| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file contains types which are mirrors/duplicates of the upstream SDK | 5 // This file contains types which are mirrors/duplicates of the upstream SDK |
| 6 // types. This exists so that users can depend solely on this wrapper library | 6 // types. This exists so that users can depend solely on this wrapper library |
| 7 // without necessarially needing an SDK implementation present. | 7 // without necessarially needing an SDK implementation present. |
| 8 // | 8 // |
| 9 // This was done (instead of type-aliasing from the github version of the SDK) | 9 // This was done (instead of type-aliasing from the github version of the SDK) |
| 10 // because some of the types need to be tweaked (like Task.RetryOptions) to | 10 // because some of the types need to be tweaked (like Task.RetryOptions) to |
| 11 // interact well with the wrapper, and the inconsistency of having some types | 11 // interact well with the wrapper, and the inconsistency of having some types |
| 12 // defined by the gae package and others defined by the SDK was pretty awkward. | 12 // defined by the gae package and others defined by the SDK was pretty awkward. |
| 13 | 13 |
| 14 package taskqueue | 14 package taskqueue |
| 15 | 15 |
| 16 import ( | 16 import ( |
| 17 "net/http" | |
| 18 "time" | 17 "time" |
| 19 ) | 18 ) |
| 20 | 19 |
| 21 // Statistics represents statistics about a single task queue. | 20 // Statistics represents statistics about a single task queue. |
| 22 type Statistics struct { | 21 type Statistics struct { |
| 23 Tasks int // may be an approximation | 22 Tasks int // may be an approximation |
| 24 OldestETA time.Time // zero if there are no pending tasks | 23 OldestETA time.Time // zero if there are no pending tasks |
| 25 | 24 |
| 26 Executed1Minute int // tasks executed in the last minute | 25 Executed1Minute int // tasks executed in the last minute |
| 27 InFlight int // tasks executing now | 26 InFlight int // tasks executing now |
| 28 EnforcedRate float64 // requests per second | 27 EnforcedRate float64 // requests per second |
| 29 } | 28 } |
| 30 | |
| 31 // RetryOptions let you control whether to retry a task and the backoff interval
s between tries. | |
| 32 type RetryOptions struct { | |
| 33 // Number of tries/leases after which the task fails permanently and is
deleted. | |
| 34 // If AgeLimit is also set, both limits must be exceeded for the task to
fail permanently. | |
| 35 RetryLimit int32 | |
| 36 | |
| 37 // Maximum time allowed since the task's first try before the task fails
permanently and is deleted (only for push tasks). | |
| 38 // If RetryLimit is also set, both limits must be exceeded for the task
to fail permanently. | |
| 39 AgeLimit time.Duration | |
| 40 | |
| 41 // Minimum time between successive tries (only for push tasks). | |
| 42 MinBackoff time.Duration | |
| 43 | |
| 44 // Maximum time between successive tries (only for push tasks). | |
| 45 MaxBackoff time.Duration | |
| 46 | |
| 47 // Maximum number of times to double the interval between successive tri
es before the intervals increase linearly (only for push tasks). | |
| 48 MaxDoublings int32 | |
| 49 | |
| 50 // If MaxDoublings is zero, set ApplyZeroMaxDoublings to true to overrid
e the default non-zero value. | |
| 51 // Otherwise a zero MaxDoublings is ignored and the default is used. | |
| 52 ApplyZeroMaxDoublings bool | |
| 53 } | |
| 54 | |
| 55 // Task represents a taskqueue task to be executed. | |
| 56 type Task struct { | |
| 57 // Path is the worker URL for the task. | |
| 58 // If unset, it will default to /_ah/queue/<queue_name>. | |
| 59 Path string | |
| 60 | |
| 61 // Payload is the data for the task. | |
| 62 // This will be delivered as the HTTP request body. | |
| 63 // It is only used when Method is POST, PUT or PULL. | |
| 64 // url.Values' Encode method may be used to generate this for POST reque
sts. | |
| 65 Payload []byte | |
| 66 | |
| 67 // Additional HTTP headers to pass at the task's execution time. | |
| 68 // To schedule the task to be run with an alternate app version | |
| 69 // or backend, set the "Host" header. | |
| 70 Header http.Header | |
| 71 | |
| 72 // Method is the HTTP method for the task ("GET", "POST", etc.), | |
| 73 // or "PULL" if this is task is destined for a pull-based queue. | |
| 74 // If empty, this defaults to "POST". | |
| 75 Method string | |
| 76 | |
| 77 // A name for the task. | |
| 78 // If empty, a name will be chosen. | |
| 79 Name string | |
| 80 | |
| 81 // Delay specifies the duration the task queue service must wait | |
| 82 // before executing the task. | |
| 83 // Either Delay or ETA may be set, but not both. | |
| 84 Delay time.Duration | |
| 85 | |
| 86 // ETA specifies the earliest time a task may be executed (push queues) | |
| 87 // or leased (pull queues). | |
| 88 // Either Delay or ETA may be set, but not both. | |
| 89 ETA time.Time | |
| 90 | |
| 91 // The number of times the task has been dispatched or leased. | |
| 92 RetryCount int32 | |
| 93 | |
| 94 // Tag for the task. Only used when Method is PULL. | |
| 95 Tag string | |
| 96 | |
| 97 // Retry options for this task. May be nil. | |
| 98 RetryOptions *RetryOptions | |
| 99 } | |
| 100 | |
| 101 // Duplicate returns a deep copy of this Task. | |
| 102 func (t *Task) Duplicate() *Task { | |
| 103 ret := *t | |
| 104 | |
| 105 if len(t.Header) > 0 { | |
| 106 ret.Header = make(http.Header, len(t.Header)) | |
| 107 for k, vs := range t.Header { | |
| 108 newVs := make([]string, len(vs)) | |
| 109 copy(newVs, vs) | |
| 110 ret.Header[k] = newVs | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 if len(t.Payload) > 0 { | |
| 115 ret.Payload = make([]byte, len(t.Payload)) | |
| 116 copy(ret.Payload, t.Payload) | |
| 117 } | |
| 118 | |
| 119 if t.RetryOptions != nil { | |
| 120 ret.RetryOptions = &RetryOptions{} | |
| 121 *ret.RetryOptions = *t.RetryOptions | |
| 122 } | |
| 123 | |
| 124 return &ret | |
| 125 } | |
| OLD | NEW |