You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

787 lines
32 KiB

  1. // Copyright 2018 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // AUTO-GENERATED CODE. DO NOT EDIT.
  15. package cloudtasks
  16. import (
  17. "fmt"
  18. "math"
  19. "time"
  20. "cloud.google.com/go/internal/version"
  21. gax "github.com/googleapis/gax-go"
  22. "golang.org/x/net/context"
  23. "google.golang.org/api/iterator"
  24. "google.golang.org/api/option"
  25. "google.golang.org/api/transport"
  26. taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2beta2"
  27. iampb "google.golang.org/genproto/googleapis/iam/v1"
  28. "google.golang.org/grpc"
  29. "google.golang.org/grpc/codes"
  30. "google.golang.org/grpc/metadata"
  31. )
  32. // CallOptions contains the retry settings for each method of Client.
  33. type CallOptions struct {
  34. ListQueues []gax.CallOption
  35. GetQueue []gax.CallOption
  36. CreateQueue []gax.CallOption
  37. UpdateQueue []gax.CallOption
  38. DeleteQueue []gax.CallOption
  39. PurgeQueue []gax.CallOption
  40. PauseQueue []gax.CallOption
  41. ResumeQueue []gax.CallOption
  42. GetIamPolicy []gax.CallOption
  43. SetIamPolicy []gax.CallOption
  44. TestIamPermissions []gax.CallOption
  45. ListTasks []gax.CallOption
  46. GetTask []gax.CallOption
  47. CreateTask []gax.CallOption
  48. DeleteTask []gax.CallOption
  49. LeaseTasks []gax.CallOption
  50. AcknowledgeTask []gax.CallOption
  51. RenewLease []gax.CallOption
  52. CancelLease []gax.CallOption
  53. RunTask []gax.CallOption
  54. }
  55. func defaultClientOptions() []option.ClientOption {
  56. return []option.ClientOption{
  57. option.WithEndpoint("cloudtasks.googleapis.com:443"),
  58. option.WithScopes(DefaultAuthScopes()...),
  59. }
  60. }
  61. func defaultCallOptions() *CallOptions {
  62. retry := map[[2]string][]gax.CallOption{
  63. {"default", "idempotent"}: {
  64. gax.WithRetry(func() gax.Retryer {
  65. return gax.OnCodes([]codes.Code{
  66. codes.DeadlineExceeded,
  67. codes.Unavailable,
  68. }, gax.Backoff{
  69. Initial: 100 * time.Millisecond,
  70. Max: 60000 * time.Millisecond,
  71. Multiplier: 1.3,
  72. })
  73. }),
  74. },
  75. }
  76. return &CallOptions{
  77. ListQueues: retry[[2]string{"default", "idempotent"}],
  78. GetQueue: retry[[2]string{"default", "idempotent"}],
  79. CreateQueue: retry[[2]string{"default", "non_idempotent"}],
  80. UpdateQueue: retry[[2]string{"default", "non_idempotent"}],
  81. DeleteQueue: retry[[2]string{"default", "non_idempotent"}],
  82. PurgeQueue: retry[[2]string{"default", "non_idempotent"}],
  83. PauseQueue: retry[[2]string{"default", "non_idempotent"}],
  84. ResumeQueue: retry[[2]string{"default", "non_idempotent"}],
  85. GetIamPolicy: retry[[2]string{"default", "idempotent"}],
  86. SetIamPolicy: retry[[2]string{"default", "non_idempotent"}],
  87. TestIamPermissions: retry[[2]string{"default", "idempotent"}],
  88. ListTasks: retry[[2]string{"default", "idempotent"}],
  89. GetTask: retry[[2]string{"default", "idempotent"}],
  90. CreateTask: retry[[2]string{"default", "non_idempotent"}],
  91. DeleteTask: retry[[2]string{"default", "idempotent"}],
  92. LeaseTasks: retry[[2]string{"default", "non_idempotent"}],
  93. AcknowledgeTask: retry[[2]string{"default", "non_idempotent"}],
  94. RenewLease: retry[[2]string{"default", "non_idempotent"}],
  95. CancelLease: retry[[2]string{"default", "non_idempotent"}],
  96. RunTask: retry[[2]string{"default", "non_idempotent"}],
  97. }
  98. }
  99. // Client is a client for interacting with Cloud Tasks API.
  100. //
  101. // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
  102. type Client struct {
  103. // The connection to the service.
  104. conn *grpc.ClientConn
  105. // The gRPC API client.
  106. client taskspb.CloudTasksClient
  107. // The call options for this service.
  108. CallOptions *CallOptions
  109. // The x-goog-* metadata to be sent with each request.
  110. xGoogMetadata metadata.MD
  111. }
  112. // NewClient creates a new cloud tasks client.
  113. //
  114. // Cloud Tasks allows developers to manage the execution of background
  115. // work in their applications.
  116. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
  117. conn, err := transport.DialGRPC(ctx, append(defaultClientOptions(), opts...)...)
  118. if err != nil {
  119. return nil, err
  120. }
  121. c := &Client{
  122. conn: conn,
  123. CallOptions: defaultCallOptions(),
  124. client: taskspb.NewCloudTasksClient(conn),
  125. }
  126. c.setGoogleClientInfo()
  127. return c, nil
  128. }
  129. // Connection returns the client's connection to the API service.
  130. func (c *Client) Connection() *grpc.ClientConn {
  131. return c.conn
  132. }
  133. // Close closes the connection to the API service. The user should invoke this when
  134. // the client is no longer required.
  135. func (c *Client) Close() error {
  136. return c.conn.Close()
  137. }
  138. // setGoogleClientInfo sets the name and version of the application in
  139. // the `x-goog-api-client` header passed on each request. Intended for
  140. // use by Google-written clients.
  141. func (c *Client) setGoogleClientInfo(keyval ...string) {
  142. kv := append([]string{"gl-go", version.Go()}, keyval...)
  143. kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
  144. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  145. }
  146. // ListQueues lists queues.
  147. //
  148. // Queues are returned in lexicographical order.
  149. func (c *Client) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator {
  150. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  151. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  152. opts = append(c.CallOptions.ListQueues[0:len(c.CallOptions.ListQueues):len(c.CallOptions.ListQueues)], opts...)
  153. it := &QueueIterator{}
  154. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Queue, string, error) {
  155. var resp *taskspb.ListQueuesResponse
  156. req.PageToken = pageToken
  157. if pageSize > math.MaxInt32 {
  158. req.PageSize = math.MaxInt32
  159. } else {
  160. req.PageSize = int32(pageSize)
  161. }
  162. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  163. var err error
  164. resp, err = c.client.ListQueues(ctx, req, settings.GRPC...)
  165. return err
  166. }, opts...)
  167. if err != nil {
  168. return nil, "", err
  169. }
  170. return resp.Queues, resp.NextPageToken, nil
  171. }
  172. fetch := func(pageSize int, pageToken string) (string, error) {
  173. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  174. if err != nil {
  175. return "", err
  176. }
  177. it.items = append(it.items, items...)
  178. return nextPageToken, nil
  179. }
  180. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  181. return it
  182. }
  183. // GetQueue gets a queue.
  184. func (c *Client) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  185. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  186. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  187. opts = append(c.CallOptions.GetQueue[0:len(c.CallOptions.GetQueue):len(c.CallOptions.GetQueue)], opts...)
  188. var resp *taskspb.Queue
  189. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  190. var err error
  191. resp, err = c.client.GetQueue(ctx, req, settings.GRPC...)
  192. return err
  193. }, opts...)
  194. if err != nil {
  195. return nil, err
  196. }
  197. return resp, nil
  198. }
  199. // CreateQueue creates a queue.
  200. //
  201. // Queues created with this method allow tasks to live for a maximum of 31
  202. // days. After a task is 31 days old, the task will be deleted regardless of whether
  203. // it was dispatched or not.
  204. //
  205. // WARNING: Using this method may have unintended side effects if you are
  206. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  207. // Read
  208. // Overview of Queue Management and queue.yaml (at /cloud-tasks/docs/queue-yaml)
  209. // before using this method.
  210. func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  211. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  212. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  213. opts = append(c.CallOptions.CreateQueue[0:len(c.CallOptions.CreateQueue):len(c.CallOptions.CreateQueue)], opts...)
  214. var resp *taskspb.Queue
  215. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  216. var err error
  217. resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...)
  218. return err
  219. }, opts...)
  220. if err != nil {
  221. return nil, err
  222. }
  223. return resp, nil
  224. }
  225. // UpdateQueue updates a queue.
  226. //
  227. // This method creates the queue if it does not exist and updates
  228. // the queue if it does exist.
  229. //
  230. // Queues created with this method allow tasks to live for a maximum of 31
  231. // days. After a task is 31 days old, the task will be deleted regardless of whether
  232. // it was dispatched or not.
  233. //
  234. // WARNING: Using this method may have unintended side effects if you are
  235. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  236. // Read
  237. // Overview of Queue Management and queue.yaml (at /cloud-tasks/docs/queue-yaml)
  238. // before using this method.
  239. func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  240. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", req.GetQueue().GetName()))
  241. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  242. opts = append(c.CallOptions.UpdateQueue[0:len(c.CallOptions.UpdateQueue):len(c.CallOptions.UpdateQueue)], opts...)
  243. var resp *taskspb.Queue
  244. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  245. var err error
  246. resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...)
  247. return err
  248. }, opts...)
  249. if err != nil {
  250. return nil, err
  251. }
  252. return resp, nil
  253. }
  254. // DeleteQueue deletes a queue.
  255. //
  256. // This command will delete the queue even if it has tasks in it.
  257. //
  258. // Note: If you delete a queue, a queue with the same name can't be created
  259. // for 7 days.
  260. //
  261. // WARNING: Using this method may have unintended side effects if you are
  262. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  263. // Read
  264. // Overview of Queue Management and queue.yaml (at /cloud-tasks/docs/queue-yaml)
  265. // before using this method.
  266. func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
  267. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  268. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  269. opts = append(c.CallOptions.DeleteQueue[0:len(c.CallOptions.DeleteQueue):len(c.CallOptions.DeleteQueue)], opts...)
  270. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  271. var err error
  272. _, err = c.client.DeleteQueue(ctx, req, settings.GRPC...)
  273. return err
  274. }, opts...)
  275. return err
  276. }
  277. // PurgeQueue purges a queue by deleting all of its tasks.
  278. //
  279. // All tasks created before this method is called are permanently deleted.
  280. //
  281. // Purge operations can take up to one minute to take effect. Tasks
  282. // might be dispatched before the purge takes effect. A purge is irreversible.
  283. func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  284. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  285. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  286. opts = append(c.CallOptions.PurgeQueue[0:len(c.CallOptions.PurgeQueue):len(c.CallOptions.PurgeQueue)], opts...)
  287. var resp *taskspb.Queue
  288. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  289. var err error
  290. resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...)
  291. return err
  292. }, opts...)
  293. if err != nil {
  294. return nil, err
  295. }
  296. return resp, nil
  297. }
  298. // PauseQueue pauses the queue.
  299. //
  300. // If a queue is paused then the system will stop dispatching tasks
  301. // until the queue is resumed via
  302. // [ResumeQueue][google.cloud.tasks.v2beta2.CloudTasks.ResumeQueue]. Tasks can still be added
  303. // when the queue is paused. A queue is paused if its
  304. // [state][google.cloud.tasks.v2beta2.Queue.state] is [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED].
  305. func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  306. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  307. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  308. opts = append(c.CallOptions.PauseQueue[0:len(c.CallOptions.PauseQueue):len(c.CallOptions.PauseQueue)], opts...)
  309. var resp *taskspb.Queue
  310. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  311. var err error
  312. resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...)
  313. return err
  314. }, opts...)
  315. if err != nil {
  316. return nil, err
  317. }
  318. return resp, nil
  319. }
  320. // ResumeQueue resume a queue.
  321. //
  322. // This method resumes a queue after it has been
  323. // [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED] or
  324. // [DISABLED][google.cloud.tasks.v2beta2.Queue.State.DISABLED]. The state of a queue is stored
  325. // in the queue's [state][google.cloud.tasks.v2beta2.Queue.state]; after calling this method it
  326. // will be set to [RUNNING][google.cloud.tasks.v2beta2.Queue.State.RUNNING].
  327. //
  328. // WARNING: Resuming many high-QPS queues at the same time can
  329. // lead to target overloading. If you are resuming high-QPS
  330. // queues, follow the 500/50/5 pattern described in
  331. // Managing Cloud Tasks Scaling Risks (at /cloud-tasks/pdfs/managing-cloud-tasks-scaling-risks-2017-06-05.pdf).
  332. func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  333. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  334. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  335. opts = append(c.CallOptions.ResumeQueue[0:len(c.CallOptions.ResumeQueue):len(c.CallOptions.ResumeQueue)], opts...)
  336. var resp *taskspb.Queue
  337. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  338. var err error
  339. resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...)
  340. return err
  341. }, opts...)
  342. if err != nil {
  343. return nil, err
  344. }
  345. return resp, nil
  346. }
  347. // GetIamPolicy gets the access control policy for a [Queue][google.cloud.tasks.v2beta2.Queue].
  348. // Returns an empty policy if the resource exists and does not have a policy
  349. // set.
  350. //
  351. // Authorization requires the following Google IAM (at /iam) permission on the
  352. // specified resource parent:
  353. //
  354. // cloudtasks.queues.getIamPolicy
  355. func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  356. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  357. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  358. opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
  359. var resp *iampb.Policy
  360. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  361. var err error
  362. resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
  363. return err
  364. }, opts...)
  365. if err != nil {
  366. return nil, err
  367. }
  368. return resp, nil
  369. }
  370. // SetIamPolicy sets the access control policy for a [Queue][google.cloud.tasks.v2beta2.Queue]. Replaces any existing
  371. // policy.
  372. //
  373. // Note: The Cloud Console does not check queue-level IAM permissions yet.
  374. // Project-level permissions are required to use the Cloud Console.
  375. //
  376. // Authorization requires the following Google IAM (at /iam) permission on the
  377. // specified resource parent:
  378. //
  379. // cloudtasks.queues.setIamPolicy
  380. func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  381. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  382. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  383. opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
  384. var resp *iampb.Policy
  385. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  386. var err error
  387. resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
  388. return err
  389. }, opts...)
  390. if err != nil {
  391. return nil, err
  392. }
  393. return resp, nil
  394. }
  395. // TestIamPermissions returns permissions that a caller has on a [Queue][google.cloud.tasks.v2beta2.Queue].
  396. // If the resource does not exist, this will return an empty set of
  397. // permissions, not a [NOT_FOUND][google.rpc.Code.NOT_FOUND] error.
  398. //
  399. // Note: This operation is designed to be used for building permission-aware
  400. // UIs and command-line tools, not for authorization checking. This operation
  401. // may "fail open" without warning.
  402. func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
  403. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  404. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  405. opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
  406. var resp *iampb.TestIamPermissionsResponse
  407. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  408. var err error
  409. resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
  410. return err
  411. }, opts...)
  412. if err != nil {
  413. return nil, err
  414. }
  415. return resp, nil
  416. }
  417. // ListTasks lists the tasks in a queue.
  418. //
  419. // By default, only the [BASIC][google.cloud.tasks.v2beta2.Task.View.BASIC] view is retrieved
  420. // due to performance considerations;
  421. // [response_view][google.cloud.tasks.v2beta2.ListTasksRequest.response_view] controls the
  422. // subset of information which is returned.
  423. func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
  424. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  425. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  426. opts = append(c.CallOptions.ListTasks[0:len(c.CallOptions.ListTasks):len(c.CallOptions.ListTasks)], opts...)
  427. it := &TaskIterator{}
  428. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Task, string, error) {
  429. var resp *taskspb.ListTasksResponse
  430. req.PageToken = pageToken
  431. if pageSize > math.MaxInt32 {
  432. req.PageSize = math.MaxInt32
  433. } else {
  434. req.PageSize = int32(pageSize)
  435. }
  436. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  437. var err error
  438. resp, err = c.client.ListTasks(ctx, req, settings.GRPC...)
  439. return err
  440. }, opts...)
  441. if err != nil {
  442. return nil, "", err
  443. }
  444. return resp.Tasks, resp.NextPageToken, nil
  445. }
  446. fetch := func(pageSize int, pageToken string) (string, error) {
  447. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  448. if err != nil {
  449. return "", err
  450. }
  451. it.items = append(it.items, items...)
  452. return nextPageToken, nil
  453. }
  454. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  455. return it
  456. }
  457. // GetTask gets a task.
  458. func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  459. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  460. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  461. opts = append(c.CallOptions.GetTask[0:len(c.CallOptions.GetTask):len(c.CallOptions.GetTask)], opts...)
  462. var resp *taskspb.Task
  463. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  464. var err error
  465. resp, err = c.client.GetTask(ctx, req, settings.GRPC...)
  466. return err
  467. }, opts...)
  468. if err != nil {
  469. return nil, err
  470. }
  471. return resp, nil
  472. }
  473. // CreateTask creates a task and adds it to a queue.
  474. //
  475. // To add multiple tasks at the same time, use
  476. // HTTP batching (at /storage/docs/json_api/v1/how-tos/batch)
  477. // or the batching documentation for your client library, for example
  478. // https://developers.google.com/api-client-library/python/guide/batch.
  479. //
  480. // Tasks cannot be updated after creation; there is no UpdateTask command.
  481. //
  482. // For App Engine queues (at google.cloud.tasks.v2beta2.AppEngineHttpTarget),
  483. // the maximum task size is 100KB.
  484. //
  485. // For pull queues (at google.cloud.tasks.v2beta2.PullTarget), this
  486. // the maximum task size is 1MB.
  487. func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  488. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  489. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  490. opts = append(c.CallOptions.CreateTask[0:len(c.CallOptions.CreateTask):len(c.CallOptions.CreateTask)], opts...)
  491. var resp *taskspb.Task
  492. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  493. var err error
  494. resp, err = c.client.CreateTask(ctx, req, settings.GRPC...)
  495. return err
  496. }, opts...)
  497. if err != nil {
  498. return nil, err
  499. }
  500. return resp, nil
  501. }
  502. // DeleteTask deletes a task.
  503. //
  504. // A task can be deleted if it is scheduled or dispatched. A task
  505. // cannot be deleted if it has completed successfully or permanently
  506. // failed.
  507. func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
  508. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  509. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  510. opts = append(c.CallOptions.DeleteTask[0:len(c.CallOptions.DeleteTask):len(c.CallOptions.DeleteTask)], opts...)
  511. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  512. var err error
  513. _, err = c.client.DeleteTask(ctx, req, settings.GRPC...)
  514. return err
  515. }, opts...)
  516. return err
  517. }
  518. // LeaseTasks leases tasks from a pull queue for
  519. // [lease_duration][google.cloud.tasks.v2beta2.LeaseTasksRequest.lease_duration].
  520. //
  521. // This method is invoked by the worker to obtain a lease. The
  522. // worker must acknowledge the task via
  523. // [AcknowledgeTask][google.cloud.tasks.v2beta2.CloudTasks.AcknowledgeTask] after they have
  524. // performed the work associated with the task.
  525. //
  526. // The [payload][google.cloud.tasks.v2beta2.PullMessage.payload] is intended to store data that
  527. // the worker needs to perform the work associated with the task. To
  528. // return the payloads in the [response][google.cloud.tasks.v2beta2.LeaseTasksResponse], set
  529. // [response_view][google.cloud.tasks.v2beta2.LeaseTasksRequest.response_view] to
  530. // [FULL][google.cloud.tasks.v2beta2.Task.View.FULL].
  531. //
  532. // A maximum of 10 qps of [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks]
  533. // requests are allowed per
  534. // queue. [RESOURCE_EXHAUSTED][google.rpc.Code.RESOURCE_EXHAUSTED]
  535. // is returned when this limit is
  536. // exceeded. [RESOURCE_EXHAUSTED][google.rpc.Code.RESOURCE_EXHAUSTED]
  537. // is also returned when
  538. // [max_tasks_dispatched_per_second][google.cloud.tasks.v2beta2.RateLimits.max_tasks_dispatched_per_second]
  539. // is exceeded.
  540. func (c *Client) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) {
  541. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  542. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  543. opts = append(c.CallOptions.LeaseTasks[0:len(c.CallOptions.LeaseTasks):len(c.CallOptions.LeaseTasks)], opts...)
  544. var resp *taskspb.LeaseTasksResponse
  545. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  546. var err error
  547. resp, err = c.client.LeaseTasks(ctx, req, settings.GRPC...)
  548. return err
  549. }, opts...)
  550. if err != nil {
  551. return nil, err
  552. }
  553. return resp, nil
  554. }
  555. // AcknowledgeTask acknowledges a pull task.
  556. //
  557. // The worker, that is, the entity that
  558. // [leased][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks] this task must call this method
  559. // to indicate that the work associated with the task has finished.
  560. //
  561. // The worker must acknowledge a task within the
  562. // [lease_duration][google.cloud.tasks.v2beta2.LeaseTasksRequest.lease_duration] or the lease
  563. // will expire and the task will become available to be leased
  564. // again. After the task is acknowledged, it will not be returned
  565. // by a later [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks],
  566. // [GetTask][google.cloud.tasks.v2beta2.CloudTasks.GetTask], or
  567. // [ListTasks][google.cloud.tasks.v2beta2.CloudTasks.ListTasks].
  568. //
  569. // To acknowledge multiple tasks at the same time, use
  570. // HTTP batching (at /storage/docs/json_api/v1/how-tos/batch)
  571. // or the batching documentation for your client library, for example
  572. // https://developers.google.com/api-client-library/python/guide/batch.
  573. func (c *Client) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error {
  574. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  575. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  576. opts = append(c.CallOptions.AcknowledgeTask[0:len(c.CallOptions.AcknowledgeTask):len(c.CallOptions.AcknowledgeTask)], opts...)
  577. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  578. var err error
  579. _, err = c.client.AcknowledgeTask(ctx, req, settings.GRPC...)
  580. return err
  581. }, opts...)
  582. return err
  583. }
  584. // RenewLease renew the current lease of a pull task.
  585. //
  586. // The worker can use this method to extend the lease by a new
  587. // duration, starting from now. The new task lease will be
  588. // returned in the task's [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time].
  589. func (c *Client) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  590. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  591. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  592. opts = append(c.CallOptions.RenewLease[0:len(c.CallOptions.RenewLease):len(c.CallOptions.RenewLease)], opts...)
  593. var resp *taskspb.Task
  594. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  595. var err error
  596. resp, err = c.client.RenewLease(ctx, req, settings.GRPC...)
  597. return err
  598. }, opts...)
  599. if err != nil {
  600. return nil, err
  601. }
  602. return resp, nil
  603. }
  604. // CancelLease cancel a pull task's lease.
  605. //
  606. // The worker can use this method to cancel a task's lease by
  607. // setting its [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time] to now. This will
  608. // make the task available to be leased to the next caller of
  609. // [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks].
  610. func (c *Client) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  611. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  612. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  613. opts = append(c.CallOptions.CancelLease[0:len(c.CallOptions.CancelLease):len(c.CallOptions.CancelLease)], opts...)
  614. var resp *taskspb.Task
  615. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  616. var err error
  617. resp, err = c.client.CancelLease(ctx, req, settings.GRPC...)
  618. return err
  619. }, opts...)
  620. if err != nil {
  621. return nil, err
  622. }
  623. return resp, nil
  624. }
  625. // RunTask forces a task to run now.
  626. //
  627. // When this method is called, Cloud Tasks will dispatch the task, even if
  628. // the task is already running, the queue has reached its [RateLimits][google.cloud.tasks.v2beta2.RateLimits] or
  629. // is [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED].
  630. //
  631. // This command is meant to be used for manual debugging. For
  632. // example, [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] can be used to retry a failed
  633. // task after a fix has been made or to manually force a task to be
  634. // dispatched now.
  635. //
  636. // The dispatched task is returned. That is, the task that is returned
  637. // contains the [status][google.cloud.tasks.v2beta2.Task.status] after the task is dispatched but
  638. // before the task is received by its target.
  639. //
  640. // If Cloud Tasks receives a successful response from the task's
  641. // target, then the task will be deleted; otherwise the task's
  642. // [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time] will be reset to the time that
  643. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] was called plus the retry delay specified
  644. // in the queue's [RetryConfig][google.cloud.tasks.v2beta2.RetryConfig].
  645. //
  646. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] returns
  647. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] when it is called on a
  648. // task that has already succeeded or permanently failed.
  649. //
  650. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] cannot be called on a
  651. // [pull task][google.cloud.tasks.v2beta2.PullMessage].
  652. func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  653. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  654. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  655. opts = append(c.CallOptions.RunTask[0:len(c.CallOptions.RunTask):len(c.CallOptions.RunTask)], opts...)
  656. var resp *taskspb.Task
  657. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  658. var err error
  659. resp, err = c.client.RunTask(ctx, req, settings.GRPC...)
  660. return err
  661. }, opts...)
  662. if err != nil {
  663. return nil, err
  664. }
  665. return resp, nil
  666. }
  667. // QueueIterator manages a stream of *taskspb.Queue.
  668. type QueueIterator struct {
  669. items []*taskspb.Queue
  670. pageInfo *iterator.PageInfo
  671. nextFunc func() error
  672. // InternalFetch is for use by the Google Cloud Libraries only.
  673. // It is not part of the stable interface of this package.
  674. //
  675. // InternalFetch returns results from a single call to the underlying RPC.
  676. // The number of results is no greater than pageSize.
  677. // If there are no more results, nextPageToken is empty and err is nil.
  678. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error)
  679. }
  680. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  681. func (it *QueueIterator) PageInfo() *iterator.PageInfo {
  682. return it.pageInfo
  683. }
  684. // Next returns the next result. Its second return value is iterator.Done if there are no more
  685. // results. Once Next returns Done, all subsequent calls will return Done.
  686. func (it *QueueIterator) Next() (*taskspb.Queue, error) {
  687. var item *taskspb.Queue
  688. if err := it.nextFunc(); err != nil {
  689. return item, err
  690. }
  691. item = it.items[0]
  692. it.items = it.items[1:]
  693. return item, nil
  694. }
  695. func (it *QueueIterator) bufLen() int {
  696. return len(it.items)
  697. }
  698. func (it *QueueIterator) takeBuf() interface{} {
  699. b := it.items
  700. it.items = nil
  701. return b
  702. }
  703. // TaskIterator manages a stream of *taskspb.Task.
  704. type TaskIterator struct {
  705. items []*taskspb.Task
  706. pageInfo *iterator.PageInfo
  707. nextFunc func() error
  708. // InternalFetch is for use by the Google Cloud Libraries only.
  709. // It is not part of the stable interface of this package.
  710. //
  711. // InternalFetch returns results from a single call to the underlying RPC.
  712. // The number of results is no greater than pageSize.
  713. // If there are no more results, nextPageToken is empty and err is nil.
  714. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error)
  715. }
  716. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  717. func (it *TaskIterator) PageInfo() *iterator.PageInfo {
  718. return it.pageInfo
  719. }
  720. // Next returns the next result. Its second return value is iterator.Done if there are no more
  721. // results. Once Next returns Done, all subsequent calls will return Done.
  722. func (it *TaskIterator) Next() (*taskspb.Task, error) {
  723. var item *taskspb.Task
  724. if err := it.nextFunc(); err != nil {
  725. return item, err
  726. }
  727. item = it.items[0]
  728. it.items = it.items[1:]
  729. return item, nil
  730. }
  731. func (it *TaskIterator) bufLen() int {
  732. return len(it.items)
  733. }
  734. func (it *TaskIterator) takeBuf() interface{} {
  735. b := it.items
  736. it.items = nil
  737. return b
  738. }