From df46f123dd656545c80821931f0a384f7dc5d608 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 21 Oct 2015 01:10:48 +0000 Subject: [PATCH 1/3] Actually use the renew code We have the code to check once a day and renew, but currently it's just in a script directory. This change adds an event listener hook to check and renew subscriptions daily. --- plugins/OStatus/OStatusPlugin.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 0dace39db0..8cdc9c343a 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -1351,4 +1351,19 @@ class OStatusPlugin extends Plugin } return true; } + + public function onCronDaily() + { + try { + $sub = FeedSub::renewalCheck(); + } catch (NoResultException $e) { + common_log(LOG_INFO, "There were no expiring feeds."); + return; + } + + while ($sub->fetch()) { + common_log(LOG_INFO, "Renewing feed subscription\n\tExp.: {$sub->sub_end}\n\tFeed: {$sub->uri}\n\tHub: {$sub->huburi}"); + $sub->renew(); + } + } } From df21c3c95d443c8bbfcc27470d315756ef8f8a0e Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 21 Oct 2015 01:49:26 +0000 Subject: [PATCH 2/3] Renew 1 day *before* the end, not 1 day *after* --- plugins/OStatus/classes/FeedSub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php index d0ac83b56d..e5acc0ab68 100644 --- a/plugins/OStatus/classes/FeedSub.php +++ b/plugins/OStatus/classes/FeedSub.php @@ -295,7 +295,7 @@ class FeedSub extends Managed_DataObject { $fs = new FeedSub(); // the "" empty string check is because we historically haven't saved unsubscribed feeds as NULL - $fs->whereAdd('sub_end IS NOT NULL AND sub_end!="" AND sub_end < NOW() - INTERVAL 1 day'); + $fs->whereAdd('sub_end IS NOT NULL AND sub_end!="" AND sub_end < NOW() + INTERVAL 1 day'); if (!$fs->find()) { // find can be both false and 0, depending on why nothing was found throw new NoResultException($fs); } From 4b31bc3fd229fa4b6b48b83331a6b4a00b4d89d6 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 21 Oct 2015 01:50:03 +0000 Subject: [PATCH 3/3] Enqueue renewals Better for request times, etc --- plugins/OStatus/OStatusPlugin.php | 8 ++- plugins/OStatus/lib/pushrenewqueuehandler.php | 49 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 plugins/OStatus/lib/pushrenewqueuehandler.php diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 8cdc9c343a..bc08a62eff 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -104,6 +104,9 @@ class OStatusPlugin extends Plugin // Incoming from a foreign PuSH hub $qm->connect('pushin', 'PushInQueueHandler'); + + // Re-subscribe feeds that need renewal + $qm->connect('pushrenew', 'PushRenewQueueHandler'); return true; } @@ -1361,9 +1364,10 @@ class OStatusPlugin extends Plugin return; } + $qm = QueueManager::get(); while ($sub->fetch()) { - common_log(LOG_INFO, "Renewing feed subscription\n\tExp.: {$sub->sub_end}\n\tFeed: {$sub->uri}\n\tHub: {$sub->huburi}"); - $sub->renew(); + $item = array('feedsub_id' => $sub->id); + $qm->enqueue($item, 'pushrenew'); } } } diff --git a/plugins/OStatus/lib/pushrenewqueuehandler.php b/plugins/OStatus/lib/pushrenewqueuehandler.php new file mode 100644 index 0000000000..d79cbe503f --- /dev/null +++ b/plugins/OStatus/lib/pushrenewqueuehandler.php @@ -0,0 +1,49 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Renew an expiring feedsub + * @package FeedSub + * @author Stephen Paul Weber + */ +class PushRenewQueueHandler extends QueueHandler +{ + function transport() + { + return 'pushrenew'; + } + + function handle($data) + { + $feedsub_id = $data['feedsub_id']; + $feedsub = FeedSub::getKV('id', $feedsub_id); + if ($feedsub instanceof FeedSub) { + try { + common_log(LOG_INFO, "Renewing feed subscription\n\tExp.: {$feedsub->sub_end}\n\tFeed: {$feedsub->uri}\n\tHub: {$feedsub->huburi}"); + $feedsub->renew(); + } catch(Exception $e) { + common_log(LOG_ERR, "Exception during PuSH renew processing for $feedsub->uri: " . $e->getMessage()); + } + } else { + common_log(LOG_ERR, "Discarding renew for unknown feed subscription id $feedsub_id"); + } + return true; + } +}