From 45c9d3d729a9c811282bdb9caa70450218200e8b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 29 Dec 2009 14:05:43 -0800 Subject: Add progress output and optional --sleep-time parameter to triminboxes.php --- classes/Notice_inbox.php | 9 +++++++++ scripts/triminboxes.php | 24 ++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php index b39006542..d3ddad656 100644 --- a/classes/Notice_inbox.php +++ b/classes/Notice_inbox.php @@ -106,6 +106,13 @@ class Notice_inbox extends Memcached_DataObject return Memcached_DataObject::pkeyGet('Notice_inbox', $kv); } + /** + * Trim inbox for a given user to latest NOTICE_INBOX_LIMIT items + * (up to NOTICE_INBOX_GC_MAX will be deleted). + * + * @param int $user_id + * @return int count of notices dropped from the inbox, if any + */ static function gc($user_id) { $entry = new Notice_inbox(); @@ -133,6 +140,8 @@ class Notice_inbox extends Memcached_DataObject $notices = array(); } } + + return $total; } static function deleteMatching($user_id, $notices) diff --git a/scripts/triminboxes.php b/scripts/triminboxes.php index da09817e5..ea4751305 100644 --- a/scripts/triminboxes.php +++ b/scripts/triminboxes.php @@ -21,19 +21,21 @@ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); $shortoptions = 'u::'; -$longoptions = array('start-user-id::'); +$longoptions = array('start-user-id=', 'sleep-time='); $helptext = << --start-user-id= User ID to start after. Default is all. + --sleep-time= Amount of time to wait (in seconds) between trims. Default is zero. END_OF_TRIM_HELP; require_once INSTALLDIR.'/scripts/commandline.inc'; $id = null; +$sleep_time = 0; if (have_option('u')) { $id = get_option_value('u'); @@ -43,6 +45,12 @@ if (have_option('u')) { $id = null; } +if (have_option('--sleep-time')) { + $sleep_time = intval(get_option_value('--sleep-time')); +} + +$quiet = have_option('q') || have_option('--quiet'); + $user = new User(); if (!empty($id)) { @@ -52,5 +60,17 @@ if (!empty($id)) { $cnt = $user->find(); while ($user->fetch()) { - Notice_inbox::gc($user->id); + if (!$quiet) { + print "Trimming inbox for user $user->id"; + } + $count = Notice_inbox::gc($user->id); + if ($count) { + if (!$quiet) { + print ": $count trimmed..."; + } + sleep($sleep_time); + } + if (!$quiet) { + print "\n"; + } } -- cgit v1.2.3-54-g00ecf From 45dc24689df85b63eaa13173cd9a111b4a5cf237 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 30 Dec 2009 15:09:24 -0800 Subject: temp debug logging hack for subscriber list early cutoff bug - we can see a cut off list at http://identi.ca/petercook/subscribers but haven't been able to explain it. will log a little data on the execution through the list --- lib/profilelist.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/profilelist.php b/lib/profilelist.php index 3412d41d1..ae875ac01 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -86,16 +86,21 @@ class ProfileList extends Widget function showProfiles() { + $log = strtolower(get_class($this)) == 'subscriberslist' && $this->owner->nickname == 'petercook'; $cnt = 0; + if ($log) common_log(LOG_INFO, "subbug: starting with {$this->profile->N}"); while ($this->profile->fetch()) { $cnt++; if($cnt > PROFILES_PER_PAGE) { + if ($log) common_log(LOG_INFO, "subbug: breaking at $cnt"); break; } + if ($log) common_log(LOG_INFO, "subbug: showing at $cnt"); $pli = $this->newListItem($this->profile); $pli->show(); } + if ($log) common_log(LOG_INFO, "subbug: ended at $cnt"); return $cnt; } -- cgit v1.2.3-54-g00ecf From 9218cce3cdc824e2011bcdf250a08ca1698f5ea1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 30 Dec 2009 15:55:15 -0800 Subject: subbug debug info to check on free ordering --- classes/Memcached_DataObject.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index d8b0db5a6..4efec06ab 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -31,11 +31,20 @@ class Memcached_DataObject extends DB_DataObject function __destruct() { + if (get_class($this) == 'Profile') + common_log(LOG_INFO, 'subbug: destructing result id ' . $this->_DB_resultid); $this->free(); if (method_exists('DB_DataObject', '__destruct')) { parent::__destruct(); } } + + function free() + { + if (get_class($this) == 'Profile') + common_log(LOG_INFO, 'subbug: freeing result id ' . $this->_DB_resultid); + parent::free(); + } function &staticGet($cls, $k, $v=null) { -- cgit v1.2.3-54-g00ecf From ff50c2b91d9fadaa9a4ede11785408408fc2d3c5 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 30 Dec 2009 16:40:59 -0800 Subject: Revert debugging code --- classes/Memcached_DataObject.php | 9 --------- lib/profilelist.php | 5 ----- 2 files changed, 14 deletions(-) diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 4efec06ab..d8b0db5a6 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -31,20 +31,11 @@ class Memcached_DataObject extends DB_DataObject function __destruct() { - if (get_class($this) == 'Profile') - common_log(LOG_INFO, 'subbug: destructing result id ' . $this->_DB_resultid); $this->free(); if (method_exists('DB_DataObject', '__destruct')) { parent::__destruct(); } } - - function free() - { - if (get_class($this) == 'Profile') - common_log(LOG_INFO, 'subbug: freeing result id ' . $this->_DB_resultid); - parent::free(); - } function &staticGet($cls, $k, $v=null) { diff --git a/lib/profilelist.php b/lib/profilelist.php index ae875ac01..3412d41d1 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -86,21 +86,16 @@ class ProfileList extends Widget function showProfiles() { - $log = strtolower(get_class($this)) == 'subscriberslist' && $this->owner->nickname == 'petercook'; $cnt = 0; - if ($log) common_log(LOG_INFO, "subbug: starting with {$this->profile->N}"); while ($this->profile->fetch()) { $cnt++; if($cnt > PROFILES_PER_PAGE) { - if ($log) common_log(LOG_INFO, "subbug: breaking at $cnt"); break; } - if ($log) common_log(LOG_INFO, "subbug: showing at $cnt"); $pli = $this->newListItem($this->profile); $pli->show(); } - if ($log) common_log(LOG_INFO, "subbug: ended at $cnt"); return $cnt; } -- cgit v1.2.3-54-g00ecf From 89cca01259d71f3da961ef64def3647f86a01567 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 30 Dec 2009 16:42:57 -0800 Subject: Take Memcached_DataObject destructor back out to check whether it might be causing some under-the-hood problems. --- classes/Memcached_DataObject.php | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index d8b0db5a6..644b84d5c 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -23,20 +23,6 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; class Memcached_DataObject extends DB_DataObject { - /** - * Destructor to free global memory resources associated with - * this data object when it's unset or goes out of scope. - * DB_DataObject doesn't do this yet by itself. - */ - - function __destruct() - { - $this->free(); - if (method_exists('DB_DataObject', '__destruct')) { - parent::__destruct(); - } - } - function &staticGet($cls, $k, $v=null) { if (is_null($v)) { -- cgit v1.2.3-54-g00ecf