summaryrefslogtreecommitdiff
path: root/classes/Queue_item.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/Queue_item.php')
-rw-r--r--classes/Queue_item.php30
1 files changed, 30 insertions, 0 deletions
diff --git a/classes/Queue_item.php b/classes/Queue_item.php
index a953e141b..2ae78d9f6 100644
--- a/classes/Queue_item.php
+++ b/classes/Queue_item.php
@@ -22,4 +22,34 @@ class Queue_item extends DB_DataObject
###END_AUTOCODE
function sequenceKey() { return array(false, false); }
+
+ static function top($transport) {
+
+ $qi = new Queue_item();
+ $qi->transport = $transport;
+ $qi->orderBy('created');
+ $qi->whereAdd('claimed is NULL');
+
+ $qi->limit(1);
+
+ $cnt = $qi->find(TRUE);
+
+ if ($cnt) {
+ # XXX: potential race condition
+ # can we force it to only update if claimed is still NULL
+ # (or old)?
+ $this->log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id);
+ $orig = clone($qi);
+ $qi->claimed = common_sql_now();
+ $result = $qi->update($orig);
+ if ($result) {
+ $this->log(LOG_INFO, 'claim succeeded.');
+ return $qi;
+ } else {
+ $this->log(LOG_INFO, 'claim failed.');
+ }
+ }
+ $qi = NULL;
+ return NULL;
+ }
}