Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Unified Diff: service/taskqueue/interface.go

Issue 2512093002: Add support for Pull Queues to prod implementation. (Closed)
Patch Set: use time.Duration for leaseTime Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « impl/prod/taskqueue.go ('k') | service/taskqueue/raw_interface.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: service/taskqueue/interface.go
diff --git a/service/taskqueue/interface.go b/service/taskqueue/interface.go
index ae78f2fa3cb1e08359f8f6b910b084063298e7e7..389c17b643669baec9d8b0b30cb429b8bdd9bec1 100644
--- a/service/taskqueue/interface.go
+++ b/service/taskqueue/interface.go
@@ -5,6 +5,8 @@
package taskqueue
import (
+ "time"
+
"github.com/luci/luci-go/common/errors"
"golang.org/x/net/context"
@@ -56,11 +58,10 @@ func Delete(c context.Context, queueName string, tasks ...*Task) error {
return err
}
-// NOTE(riannucci): No support for pull taskqueues. We're not planning on
-// making pull-queue clients which RUN in appengine (e.g. they'd all be
-// external REST consumers). If someone needs this, it will need to be added
-// here and in RawInterface. The theory is that a good lease API might look
-// like:
+// NOTE(riannucci): Pull task queues API can be extended to support automatic
+// lease management.
+//
+// The theory is that a good lease API might look like:
//
// func Lease(queueName, tag string, batchSize int, duration time.Time, cb func(*Task, error<-))
//
@@ -75,6 +76,33 @@ func Delete(c context.Context, queueName string, tasks ...*Task) error {
// that each call to cb would have 'duration' amount of time to work on the
// task, as well as releasing as many leased tasks as it can on a failure.
+// Lease leases tasks from a queue.
+//
+// leaseTime has seconds precision. The number of tasks fetched will be at most
+// maxTasks.
+func Lease(c context.Context, maxTasks int, queueName string, leaseTime time.Duration) ([]*Task, error) {
+ return Raw(c).Lease(maxTasks, queueName, leaseTime)
+}
+
+// LeaseByTag leases tasks from a queue, grouped by tag.
+//
+// If tag is empty, then the returned tasks are grouped by the tag of the task
+// with earliest ETA.
+//
+// leaseTime has seconds precision. The number of tasks fetched will be at most
+// maxTasks.
+func LeaseByTag(c context.Context, maxTasks int, queueName string, leaseTime time.Duration, tag string) ([]*Task, error) {
+ return Raw(c).LeaseByTag(maxTasks, queueName, leaseTime, tag)
+}
+
+// ModifyLease modifies the lease of a task.
+//
+// Used to request more processing time, or to abandon processing. leaseTime has
+// seconds precision and must not be negative.
+func ModifyLease(c context.Context, task *Task, queueName string, leaseTime time.Duration) error {
+ return Raw(c).ModifyLease(task, queueName, leaseTime)
+}
+
// Purge purges all tasks form the named queue.
func Purge(c context.Context, queueName string) error {
return Raw(c).Purge(queueName)
« no previous file with comments | « impl/prod/taskqueue.go ('k') | service/taskqueue/raw_interface.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698