| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package prod | 5 package prod |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "fmt" | 8 "fmt" |
| 9 "reflect" | 9 "reflect" |
| 10 "time" |
| 10 | 11 |
| 11 tq "github.com/luci/gae/service/taskqueue" | 12 tq "github.com/luci/gae/service/taskqueue" |
| 12 "golang.org/x/net/context" | 13 "golang.org/x/net/context" |
| 13 "google.golang.org/appengine" | 14 "google.golang.org/appengine" |
| 14 "google.golang.org/appengine/taskqueue" | 15 "google.golang.org/appengine/taskqueue" |
| 15 ) | 16 ) |
| 16 | 17 |
| 17 // useTQ adds a gae.TaskQueue implementation to context, accessible | 18 // useTQ adds a gae.TaskQueue implementation to context, accessible |
| 18 // by gae.GetTQ(c) | 19 // by gae.GetTQ(c) |
| 19 func useTQ(c context.Context) context.Context { | 20 func useTQ(c context.Context) context.Context { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 | 79 |
| 79 // tqMF2R (TQ multi-fake-to-real) converts []*tq.Task to []*taskqueue.Task. | 80 // tqMF2R (TQ multi-fake-to-real) converts []*tq.Task to []*taskqueue.Task. |
| 80 func tqMF2R(ns []*tq.Task) []*taskqueue.Task { | 81 func tqMF2R(ns []*tq.Task) []*taskqueue.Task { |
| 81 ret := make([]*taskqueue.Task, len(ns)) | 82 ret := make([]*taskqueue.Task, len(ns)) |
| 82 for i, t := range ns { | 83 for i, t := range ns { |
| 83 ret[i] = tqF2R(t) | 84 ret[i] = tqF2R(t) |
| 84 } | 85 } |
| 85 return ret | 86 return ret |
| 86 } | 87 } |
| 87 | 88 |
| 89 // tqMR2F (TQ multi-real-to-fake) converts []*taskqueue.Task to []*tq.Task. |
| 90 func tqMR2F(ns []*taskqueue.Task) []*tq.Task { |
| 91 ret := make([]*tq.Task, len(ns)) |
| 92 for i, t := range ns { |
| 93 ret[i] = tqR2F(t) |
| 94 } |
| 95 return ret |
| 96 } |
| 97 |
| 88 func (t tqImpl) AddMulti(tasks []*tq.Task, queueName string, cb tq.RawTaskCB) er
ror { | 98 func (t tqImpl) AddMulti(tasks []*tq.Task, queueName string, cb tq.RawTaskCB) er
ror { |
| 89 realTasks, err := taskqueue.AddMulti(t.aeCtx, tqMF2R(tasks), queueName) | 99 realTasks, err := taskqueue.AddMulti(t.aeCtx, tqMF2R(tasks), queueName) |
| 90 if err != nil { | 100 if err != nil { |
| 91 if me, ok := err.(appengine.MultiError); ok { | 101 if me, ok := err.(appengine.MultiError); ok { |
| 92 for i, err := range me { | 102 for i, err := range me { |
| 93 tsk := (*taskqueue.Task)(nil) | 103 tsk := (*taskqueue.Task)(nil) |
| 94 if realTasks != nil { | 104 if realTasks != nil { |
| 95 tsk = realTasks[i] | 105 tsk = realTasks[i] |
| 96 } | 106 } |
| 97 cb(tqR2F(tsk), err) | 107 cb(tqR2F(tsk), err) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 110 err := taskqueue.DeleteMulti(t.aeCtx, tqMF2R(tasks), queueName) | 120 err := taskqueue.DeleteMulti(t.aeCtx, tqMF2R(tasks), queueName) |
| 111 if me, ok := err.(appengine.MultiError); ok { | 121 if me, ok := err.(appengine.MultiError); ok { |
| 112 for _, err := range me { | 122 for _, err := range me { |
| 113 cb(err) | 123 cb(err) |
| 114 } | 124 } |
| 115 err = nil | 125 err = nil |
| 116 } | 126 } |
| 117 return err | 127 return err |
| 118 } | 128 } |
| 119 | 129 |
| 130 func (t tqImpl) Lease(maxTasks int, queueName string, leaseTime time.Duration) (
[]*tq.Task, error) { |
| 131 tasks, err := taskqueue.Lease(t.aeCtx, maxTasks, queueName, int(leaseTim
e/time.Second)) |
| 132 if err != nil { |
| 133 return nil, err |
| 134 } |
| 135 return tqMR2F(tasks), nil |
| 136 } |
| 137 |
| 138 func (t tqImpl) LeaseByTag(maxTasks int, queueName string, leaseTime time.Durati
on, tag string) ([]*tq.Task, error) { |
| 139 tasks, err := taskqueue.LeaseByTag(t.aeCtx, maxTasks, queueName, int(lea
seTime/time.Second), tag) |
| 140 if err != nil { |
| 141 return nil, err |
| 142 } |
| 143 return tqMR2F(tasks), nil |
| 144 } |
| 145 |
| 146 func (t tqImpl) ModifyLease(task *tq.Task, queueName string, leaseTime time.Dura
tion) error { |
| 147 return taskqueue.ModifyLease(t.aeCtx, tqF2R(task), queueName, int(leaseT
ime/time.Second)) |
| 148 } |
| 149 |
| 120 func (t tqImpl) Purge(queueName string) error { | 150 func (t tqImpl) Purge(queueName string) error { |
| 121 return taskqueue.Purge(t.aeCtx, queueName) | 151 return taskqueue.Purge(t.aeCtx, queueName) |
| 122 } | 152 } |
| 123 | 153 |
| 124 func (t tqImpl) Stats(queueNames []string, cb tq.RawStatsCB) error { | 154 func (t tqImpl) Stats(queueNames []string, cb tq.RawStatsCB) error { |
| 125 stats, err := taskqueue.QueueStats(t.aeCtx, queueNames) | 155 stats, err := taskqueue.QueueStats(t.aeCtx, queueNames) |
| 126 if err != nil { | 156 if err != nil { |
| 127 return err | 157 return err |
| 128 } | 158 } |
| 129 for _, s := range stats { | 159 for _, s := range stats { |
| 130 cb((*tq.Statistics)(&s), nil) | 160 cb((*tq.Statistics)(&s), nil) |
| 131 } | 161 } |
| 132 return nil | 162 return nil |
| 133 } | 163 } |
| 134 | 164 |
| 135 func (t tqImpl) GetTestable() tq.Testable { | 165 func (t tqImpl) GetTestable() tq.Testable { |
| 136 return nil | 166 return nil |
| 137 } | 167 } |
| OLD | NEW |