fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2011-10-03 05:52 am

[dw-free] better organization of LJ functions

[commit: http://hg.dwscoalition.org/dw-free/rev/9d6b0a0fc48c]

http://bugs.dwscoalition.org/show_bug.cgi?id=3965

Moving LJ::get_timeupdate_multi and LJ::get_times_multi from ljlib.pl to
LJ/User.pm - no package change.

Patch by [personal profile] kareila.

Files modified:
  • cgi-bin/LJ/User.pm
  • cgi-bin/ljlib.pl
--------------------------------------------------------------------------------
diff -r 70869e7cfca3 -r 9d6b0a0fc48c cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Mon Oct 03 13:50:36 2011 +0800
+++ b/cgi-bin/LJ/User.pm	Mon Oct 03 13:52:08 2011 +0800
@@ -8068,6 +8068,133 @@
 =cut
 
 # <LJFUNC>
+# name: LJ::get_times_multi
+# des: Get the last update time and time create.
+# args: opt?, uids
+# des-opt: optional hashref, currently can contain 'memcache_only'
+#          to only retrieve data from memcache
+# des-uids: list of userids to load timeupdate and timecreate for
+# returns: hashref; uid => {timeupdate => unix timeupdate, timecreate => unix timecreate}
+# </LJFUNC>
+sub get_times_multi {
+    my ($opt, @uids) = @_;
+
+    # allow optional opt hashref as first argument
+    unless (ref $opt eq 'HASH') {
+        push @uids, $opt;
+        $opt = {};
+    }
+    return {} unless @uids;
+
+    my @memkeys = map { [$_, "tu:$_"], [$_, "tc:$_"] } @uids;
+    my $mem = LJ::MemCache::get_multi(@memkeys) || {};
+
+    my @need  = ();
+    my %times = ();
+    foreach my $uid (@uids) {
+        my ($tc, $tu) = ('', '');
+        if ($tu = $mem->{"tu:$uid"}) {
+            $times{updated}->{$uid} = unpack("N", $tu);
+        }
+        if ($tc = $mem->{"tc:$_"}){
+            $times{created}->{$_} = $tc;
+        }
+
+        push @need => $uid
+            unless $tc and $tu;
+    }
+
+    # if everything was in memcache, return now
+    return \%times if $opt->{'memcache_only'} or not @need;
+
+    # fill in holes from the database.  safe to use the reader because we
+    # only do an add to memcache, whereas postevent does a set, overwriting
+    # any potentially old data
+    my $dbr = LJ::get_db_reader();
+    my $need_bind = join(",", map { "?" } @need);
+
+    # Fetch timeupdate and timecreate from DB.
+    # Timecreate is loaded in pre-emptive goals.
+    # This is tiny optimization for 'get_timecreate_multi',
+    # which is called right after this method during
+    # friends page generation.
+    my $sth = $dbr->prepare("
+        SELECT userid,
+               UNIX_TIMESTAMP(timeupdate),
+               UNIX_TIMESTAMP(timecreate)
+        FROM   userusage
+        WHERE
+               userid IN ($need_bind)");
+    $sth->execute(@need);
+    while (my ($uid, $tu, $tc) = $sth->fetchrow_array){
+        $times{updated}->{$uid} = $tu;
+        $times{created}->{$uid} = $tc;
+
+        # set memcache for this row
+        LJ::MemCache::add([$uid, "tu:$uid"], pack("N", $tu), 30*60);
+        # set this for future use
+        LJ::MemCache::add([$uid, "tc:$uid"], $tc, 60*60*24); # as in LJ::User->timecreate
+    }
+
+    return \%times;
+}
+
+
+# <LJFUNC>
+# name: LJ::get_timeupdate_multi
+# des: Get the last time a list of users updated.
+# args: opt?, uids
+# des-opt: optional hashref, currently can contain 'memcache_only'
+#          to only retrieve data from memcache
+# des-uids: list of userids to load timeupdates for
+# returns: hashref; uid => unix timeupdate
+# </LJFUNC>
+sub get_timeupdate_multi {
+    my ($opt, @uids) = @_;
+
+    # allow optional opt hashref as first argument
+    if ( $opt && ref $opt ne 'HASH' ) {
+        push @uids, $opt;
+        $opt = {};
+    }
+    return {} unless @uids;
+
+    my @memkeys = map { [$_, "tu:$_"] } @uids;
+    my $mem = LJ::MemCache::get_multi(@memkeys) || {};
+
+    my @need;
+    my %timeupdate; # uid => timeupdate
+    foreach (@uids) {
+        if ($mem->{"tu:$_"}) {
+            $timeupdate{$_} = unpack("N", $mem->{"tu:$_"});
+        } else {
+            push @need, $_;
+        }
+    }
+
+    # if everything was in memcache, return now
+    return \%timeupdate if $opt->{'memcache_only'} || ! @need;
+
+    # fill in holes from the database.  safe to use the reader because we
+    # only do an add to memcache, whereas postevent does a set, overwriting
+    # any potentially old data
+    my $dbr = LJ::get_db_reader();
+    my $need_bind = join(",", map { "?" } @need);
+    my $sth = $dbr->prepare("SELECT userid, UNIX_TIMESTAMP(timeupdate) " .
+                            "FROM userusage WHERE userid IN ($need_bind)");
+    $sth->execute(@need);
+    while (my ($uid, $tu) = $sth->fetchrow_array) {
+        $timeupdate{$uid} = $tu;
+
+        # set memcache for this row
+        LJ::MemCache::add([$uid, "tu:$uid"], pack("N", $tu), 30*60);
+    }
+
+    return \%timeupdate;
+}
+
+
+# <LJFUNC>
 # name: LJ::get_timezone
 # des: Gets the timezone offset for the user.
 # args: u, offsetref, fakedref
diff -r 70869e7cfca3 -r 9d6b0a0fc48c cgi-bin/ljlib.pl
--- a/cgi-bin/ljlib.pl	Mon Oct 03 13:50:36 2011 +0800
+++ b/cgi-bin/ljlib.pl	Mon Oct 03 13:52:08 2011 +0800
@@ -367,133 +367,6 @@
 
 
 # <LJFUNC>
-# name: LJ::get_timeupdate_multi
-# des: Get the last time a list of users updated.
-# args: opt?, uids
-# des-opt: optional hashref, currently can contain 'memcache_only'
-#          to only retrieve data from memcache
-# des-uids: list of userids to load timeupdates for
-# returns: hashref; uid => unix timeupdate
-# </LJFUNC>
-sub get_timeupdate_multi {
-    my ($opt, @uids) = @_;
-
-    # allow optional opt hashref as first argument
-    if ( $opt && ref $opt ne 'HASH' ) {
-        push @uids, $opt;
-        $opt = {};
-    }
-    return {} unless @uids;
-
-    my @memkeys = map { [$_, "tu:$_"] } @uids;
-    my $mem = LJ::MemCache::get_multi(@memkeys) || {};
-
-    my @need;
-    my %timeupdate; # uid => timeupdate
-    foreach (@uids) {
-        if ($mem->{"tu:$_"}) {
-            $timeupdate{$_} = unpack("N", $mem->{"tu:$_"});
-        } else {
-            push @need, $_;
-        }
-    }
-
-    # if everything was in memcache, return now
-    return \%timeupdate if $opt->{'memcache_only'} || ! @need;
-
-    # fill in holes from the database.  safe to use the reader because we
-    # only do an add to memcache, whereas postevent does a set, overwriting
-    # any potentially old data
-    my $dbr = LJ::get_db_reader();
-    my $need_bind = join(",", map { "?" } @need);
-    my $sth = $dbr->prepare("SELECT userid, UNIX_TIMESTAMP(timeupdate) " .
-                            "FROM userusage WHERE userid IN ($need_bind)");
-    $sth->execute(@need);
-    while (my ($uid, $tu) = $sth->fetchrow_array) {
-        $timeupdate{$uid} = $tu;
-
-        # set memcache for this row
-        LJ::MemCache::add([$uid, "tu:$uid"], pack("N", $tu), 30*60);
-    }
-
-    return \%timeupdate;
-}
-
-
-# <LJFUNC>
-# name: LJ::get_times_multi
-# des: Get the last update time and time create.
-# args: opt?, uids
-# des-opt: optional hashref, currently can contain 'memcache_only'
-#          to only retrieve data from memcache
-# des-uids: list of userids to load timeupdate and timecreate for
-# returns: hashref; uid => {timeupdate => unix timeupdate, timecreate => unix timecreate}
-# </LJFUNC>
-sub get_times_multi {
-    my ($opt, @uids) = @_;
-
-    # allow optional opt hashref as first argument
-    unless (ref $opt eq 'HASH') {
-        push @uids, $opt;
-        $opt = {};
-    }
-    return {} unless @uids;
-
-    my @memkeys = map { [$_, "tu:$_"], [$_, "tc:$_"] } @uids;
-    my $mem = LJ::MemCache::get_multi(@memkeys) || {};
-
-    my @need  = ();
-    my %times = ();
-    foreach my $uid (@uids) {
-        my ($tc, $tu) = ('', '');
-        if ($tu = $mem->{"tu:$uid"}) {
-            $times{updated}->{$uid} = unpack("N", $tu);
-        }
-        if ($tc = $mem->{"tc:$_"}){
-            $times{created}->{$_} = $tc;
-        }
-
-        push @need => $uid
-            unless $tc and $tu;
-    }
-
-    # if everything was in memcache, return now
-    return \%times if $opt->{'memcache_only'} or not @need;
-
-    # fill in holes from the database.  safe to use the reader because we
-    # only do an add to memcache, whereas postevent does a set, overwriting
-    # any potentially old data
-    my $dbr = LJ::get_db_reader();
-    my $need_bind = join(",", map { "?" } @need);
-
-    # Fetch timeupdate and timecreate from DB.
-    # Timecreate is loaded in pre-emptive goals.
-    # This is tiny optimization for 'get_timecreate_multi',
-    # which is called right after this method during
-    # friends page generation.
-    my $sth = $dbr->prepare("
-        SELECT userid,
-               UNIX_TIMESTAMP(timeupdate),
-               UNIX_TIMESTAMP(timecreate)
-        FROM   userusage
-        WHERE
-               userid IN ($need_bind)");
-    $sth->execute(@need);
-    while (my ($uid, $tu, $tc) = $sth->fetchrow_array){
-        $times{updated}->{$uid} = $tu;
-        $times{created}->{$uid} = $tc;
-
-        # set memcache for this row
-        LJ::MemCache::add([$uid, "tu:$uid"], pack("N", $tu), 30*60);
-        # set this for future use
-        LJ::MemCache::add([$uid, "tc:$uid"], $tc, 60*60*24); # as in LJ::User->timecreate
-    }
-
-    return \%times;
-}
-
-
-# <LJFUNC>
 # name: LJ::register_authaction
 # des: Registers a secret to have the user validate.
 # info: Some things, like requiring a user to validate their e-mail address, require
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org