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.
 
 
 

801 lines
31 KiB

  1. // Copyright 2019 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. // Code generated by gapic-generator. DO NOT EDIT.
  15. package cloudtasks
  16. import (
  17. "context"
  18. "fmt"
  19. "math"
  20. "time"
  21. "github.com/golang/protobuf/proto"
  22. gax "github.com/googleapis/gax-go/v2"
  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", "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", versionGo()}, keyval...)
  143. kv = append(kv, "gapic", versionClient, "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. req = proto.Clone(req).(*taskspb.ListQueuesRequest)
  155. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Queue, string, error) {
  156. var resp *taskspb.ListQueuesResponse
  157. req.PageToken = pageToken
  158. if pageSize > math.MaxInt32 {
  159. req.PageSize = math.MaxInt32
  160. } else {
  161. req.PageSize = int32(pageSize)
  162. }
  163. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  164. var err error
  165. resp, err = c.client.ListQueues(ctx, req, settings.GRPC...)
  166. return err
  167. }, opts...)
  168. if err != nil {
  169. return nil, "", err
  170. }
  171. return resp.Queues, resp.NextPageToken, nil
  172. }
  173. fetch := func(pageSize int, pageToken string) (string, error) {
  174. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  175. if err != nil {
  176. return "", err
  177. }
  178. it.items = append(it.items, items...)
  179. return nextPageToken, nil
  180. }
  181. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  182. it.pageInfo.MaxSize = int(req.PageSize)
  183. return it
  184. }
  185. // GetQueue gets a queue.
  186. func (c *Client) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  187. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  188. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  189. opts = append(c.CallOptions.GetQueue[0:len(c.CallOptions.GetQueue):len(c.CallOptions.GetQueue)], opts...)
  190. var resp *taskspb.Queue
  191. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  192. var err error
  193. resp, err = c.client.GetQueue(ctx, req, settings.GRPC...)
  194. return err
  195. }, opts...)
  196. if err != nil {
  197. return nil, err
  198. }
  199. return resp, nil
  200. }
  201. // CreateQueue creates a queue.
  202. //
  203. // Queues created with this method allow tasks to live for a maximum of 31
  204. // days. After a task is 31 days old, the task will be deleted regardless of
  205. // whether it was dispatched or not.
  206. //
  207. // WARNING: Using this method may have unintended side effects if you are
  208. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  209. // Read
  210. // Overview of Queue Management and
  211. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  212. // this method.
  213. func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  214. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  215. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  216. opts = append(c.CallOptions.CreateQueue[0:len(c.CallOptions.CreateQueue):len(c.CallOptions.CreateQueue)], opts...)
  217. var resp *taskspb.Queue
  218. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  219. var err error
  220. resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...)
  221. return err
  222. }, opts...)
  223. if err != nil {
  224. return nil, err
  225. }
  226. return resp, nil
  227. }
  228. // UpdateQueue updates a queue.
  229. //
  230. // This method creates the queue if it does not exist and updates
  231. // the queue if it does exist.
  232. //
  233. // Queues created with this method allow tasks to live for a maximum of 31
  234. // days. After a task is 31 days old, the task will be deleted regardless of
  235. // whether it was dispatched or not.
  236. //
  237. // WARNING: Using this method may have unintended side effects if you are
  238. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  239. // Read
  240. // Overview of Queue Management and
  241. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  242. // this method.
  243. func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  244. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", req.GetQueue().GetName()))
  245. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  246. opts = append(c.CallOptions.UpdateQueue[0:len(c.CallOptions.UpdateQueue):len(c.CallOptions.UpdateQueue)], opts...)
  247. var resp *taskspb.Queue
  248. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  249. var err error
  250. resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...)
  251. return err
  252. }, opts...)
  253. if err != nil {
  254. return nil, err
  255. }
  256. return resp, nil
  257. }
  258. // DeleteQueue deletes a queue.
  259. //
  260. // This command will delete the queue even if it has tasks in it.
  261. //
  262. // Note: If you delete a queue, a queue with the same name can't be created
  263. // for 7 days.
  264. //
  265. // WARNING: Using this method may have unintended side effects if you are
  266. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  267. // Read
  268. // Overview of Queue Management and
  269. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  270. // this method.
  271. func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
  272. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  273. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  274. opts = append(c.CallOptions.DeleteQueue[0:len(c.CallOptions.DeleteQueue):len(c.CallOptions.DeleteQueue)], opts...)
  275. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  276. var err error
  277. _, err = c.client.DeleteQueue(ctx, req, settings.GRPC...)
  278. return err
  279. }, opts...)
  280. return err
  281. }
  282. // PurgeQueue purges a queue by deleting all of its tasks.
  283. //
  284. // All tasks created before this method is called are permanently deleted.
  285. //
  286. // Purge operations can take up to one minute to take effect. Tasks
  287. // might be dispatched before the purge takes effect. A purge is irreversible.
  288. func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  289. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  290. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  291. opts = append(c.CallOptions.PurgeQueue[0:len(c.CallOptions.PurgeQueue):len(c.CallOptions.PurgeQueue)], opts...)
  292. var resp *taskspb.Queue
  293. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  294. var err error
  295. resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...)
  296. return err
  297. }, opts...)
  298. if err != nil {
  299. return nil, err
  300. }
  301. return resp, nil
  302. }
  303. // PauseQueue pauses the queue.
  304. //
  305. // If a queue is paused then the system will stop dispatching tasks
  306. // until the queue is resumed via
  307. // [ResumeQueue][google.cloud.tasks.v2beta2.CloudTasks.ResumeQueue]. Tasks can
  308. // still be added when the queue is paused. A queue is paused if its
  309. // [state][google.cloud.tasks.v2beta2.Queue.state] is
  310. // [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED].
  311. func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  312. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  313. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  314. opts = append(c.CallOptions.PauseQueue[0:len(c.CallOptions.PauseQueue):len(c.CallOptions.PauseQueue)], opts...)
  315. var resp *taskspb.Queue
  316. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  317. var err error
  318. resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...)
  319. return err
  320. }, opts...)
  321. if err != nil {
  322. return nil, err
  323. }
  324. return resp, nil
  325. }
  326. // ResumeQueue resume a queue.
  327. //
  328. // This method resumes a queue after it has been
  329. // [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED] or
  330. // [DISABLED][google.cloud.tasks.v2beta2.Queue.State.DISABLED]. The state of a
  331. // queue is stored in the queue's
  332. // [state][google.cloud.tasks.v2beta2.Queue.state]; after calling this method
  333. // it will be set to
  334. // [RUNNING][google.cloud.tasks.v2beta2.Queue.State.RUNNING].
  335. //
  336. // WARNING: Resuming many high-QPS queues at the same time can
  337. // lead to target overloading. If you are resuming high-QPS
  338. // queues, follow the 500/50/5 pattern described in
  339. // Managing Cloud Tasks Scaling
  340. // Risks (at https://cloud.google.com/tasks/docs/manage-cloud-task-scaling).
  341. func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  342. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  343. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  344. opts = append(c.CallOptions.ResumeQueue[0:len(c.CallOptions.ResumeQueue):len(c.CallOptions.ResumeQueue)], opts...)
  345. var resp *taskspb.Queue
  346. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  347. var err error
  348. resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...)
  349. return err
  350. }, opts...)
  351. if err != nil {
  352. return nil, err
  353. }
  354. return resp, nil
  355. }
  356. // GetIamPolicy gets the access control policy for a
  357. // [Queue][google.cloud.tasks.v2beta2.Queue]. Returns an empty policy if the
  358. // resource exists and does not have a policy set.
  359. //
  360. // Authorization requires the following
  361. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  362. // resource parent:
  363. //
  364. // cloudtasks.queues.getIamPolicy
  365. func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  366. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  367. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  368. opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
  369. var resp *iampb.Policy
  370. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  371. var err error
  372. resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
  373. return err
  374. }, opts...)
  375. if err != nil {
  376. return nil, err
  377. }
  378. return resp, nil
  379. }
  380. // SetIamPolicy sets the access control policy for a
  381. // [Queue][google.cloud.tasks.v2beta2.Queue]. Replaces any existing policy.
  382. //
  383. // Note: The Cloud Console does not check queue-level IAM permissions yet.
  384. // Project-level permissions are required to use the Cloud Console.
  385. //
  386. // Authorization requires the following
  387. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  388. // resource parent:
  389. //
  390. // cloudtasks.queues.setIamPolicy
  391. func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  392. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  393. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  394. opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
  395. var resp *iampb.Policy
  396. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  397. var err error
  398. resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
  399. return err
  400. }, opts...)
  401. if err != nil {
  402. return nil, err
  403. }
  404. return resp, nil
  405. }
  406. // TestIamPermissions returns permissions that a caller has on a
  407. // [Queue][google.cloud.tasks.v2beta2.Queue]. If the resource does not exist,
  408. // this will return an empty set of permissions, not a
  409. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] error.
  410. //
  411. // Note: This operation is designed to be used for building permission-aware
  412. // UIs and command-line tools, not for authorization checking. This operation
  413. // may "fail open" without warning.
  414. func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
  415. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  416. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  417. opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
  418. var resp *iampb.TestIamPermissionsResponse
  419. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  420. var err error
  421. resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
  422. return err
  423. }, opts...)
  424. if err != nil {
  425. return nil, err
  426. }
  427. return resp, nil
  428. }
  429. // ListTasks lists the tasks in a queue.
  430. //
  431. // By default, only the [BASIC][google.cloud.tasks.v2beta2.Task.View.BASIC]
  432. // view is retrieved due to performance considerations;
  433. // [response_view][google.cloud.tasks.v2beta2.ListTasksRequest.response_view]
  434. // controls the subset of information which is returned.
  435. //
  436. // The tasks may be returned in any order. The ordering may change at any
  437. // time.
  438. func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
  439. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  440. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  441. opts = append(c.CallOptions.ListTasks[0:len(c.CallOptions.ListTasks):len(c.CallOptions.ListTasks)], opts...)
  442. it := &TaskIterator{}
  443. req = proto.Clone(req).(*taskspb.ListTasksRequest)
  444. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Task, string, error) {
  445. var resp *taskspb.ListTasksResponse
  446. req.PageToken = pageToken
  447. if pageSize > math.MaxInt32 {
  448. req.PageSize = math.MaxInt32
  449. } else {
  450. req.PageSize = int32(pageSize)
  451. }
  452. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  453. var err error
  454. resp, err = c.client.ListTasks(ctx, req, settings.GRPC...)
  455. return err
  456. }, opts...)
  457. if err != nil {
  458. return nil, "", err
  459. }
  460. return resp.Tasks, resp.NextPageToken, nil
  461. }
  462. fetch := func(pageSize int, pageToken string) (string, error) {
  463. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  464. if err != nil {
  465. return "", err
  466. }
  467. it.items = append(it.items, items...)
  468. return nextPageToken, nil
  469. }
  470. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  471. it.pageInfo.MaxSize = int(req.PageSize)
  472. return it
  473. }
  474. // GetTask gets a task.
  475. func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  476. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  477. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  478. opts = append(c.CallOptions.GetTask[0:len(c.CallOptions.GetTask):len(c.CallOptions.GetTask)], opts...)
  479. var resp *taskspb.Task
  480. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  481. var err error
  482. resp, err = c.client.GetTask(ctx, req, settings.GRPC...)
  483. return err
  484. }, opts...)
  485. if err != nil {
  486. return nil, err
  487. }
  488. return resp, nil
  489. }
  490. // CreateTask creates a task and adds it to a queue.
  491. //
  492. // Tasks cannot be updated after creation; there is no UpdateTask command.
  493. //
  494. // For [App Engine queues][google.cloud.tasks.v2beta2.AppEngineHttpTarget],
  495. // the maximum task size is
  496. // 100KB.
  497. //
  498. // For [pull queues][google.cloud.tasks.v2beta2.PullTarget], the maximum
  499. // task size is 1MB.
  500. func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  501. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  502. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  503. opts = append(c.CallOptions.CreateTask[0:len(c.CallOptions.CreateTask):len(c.CallOptions.CreateTask)], opts...)
  504. var resp *taskspb.Task
  505. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  506. var err error
  507. resp, err = c.client.CreateTask(ctx, req, settings.GRPC...)
  508. return err
  509. }, opts...)
  510. if err != nil {
  511. return nil, err
  512. }
  513. return resp, nil
  514. }
  515. // DeleteTask deletes a task.
  516. //
  517. // A task can be deleted if it is scheduled or dispatched. A task
  518. // cannot be deleted if it has completed successfully or permanently
  519. // failed.
  520. func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
  521. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  522. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  523. opts = append(c.CallOptions.DeleteTask[0:len(c.CallOptions.DeleteTask):len(c.CallOptions.DeleteTask)], opts...)
  524. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  525. var err error
  526. _, err = c.client.DeleteTask(ctx, req, settings.GRPC...)
  527. return err
  528. }, opts...)
  529. return err
  530. }
  531. // LeaseTasks leases tasks from a pull queue for
  532. // [lease_duration][google.cloud.tasks.v2beta2.LeaseTasksRequest.lease_duration].
  533. //
  534. // This method is invoked by the worker to obtain a lease. The
  535. // worker must acknowledge the task via
  536. // [AcknowledgeTask][google.cloud.tasks.v2beta2.CloudTasks.AcknowledgeTask]
  537. // after they have performed the work associated with the task.
  538. //
  539. // The [payload][google.cloud.tasks.v2beta2.PullMessage.payload] is intended
  540. // to store data that the worker needs to perform the work associated with the
  541. // task. To return the payloads in the
  542. // [response][google.cloud.tasks.v2beta2.LeaseTasksResponse], set
  543. // [response_view][google.cloud.tasks.v2beta2.LeaseTasksRequest.response_view]
  544. // to [FULL][google.cloud.tasks.v2beta2.Task.View.FULL].
  545. //
  546. // A maximum of 10 qps of
  547. // [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks] requests are
  548. // allowed per queue. [RESOURCE_EXHAUSTED][google.rpc.Code.RESOURCE_EXHAUSTED]
  549. // is returned when this limit is
  550. // exceeded. [RESOURCE_EXHAUSTED][google.rpc.Code.RESOURCE_EXHAUSTED]
  551. // is also returned when
  552. // [max_tasks_dispatched_per_second][google.cloud.tasks.v2beta2.RateLimits.max_tasks_dispatched_per_second]
  553. // is exceeded.
  554. func (c *Client) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) {
  555. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  556. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  557. opts = append(c.CallOptions.LeaseTasks[0:len(c.CallOptions.LeaseTasks):len(c.CallOptions.LeaseTasks)], opts...)
  558. var resp *taskspb.LeaseTasksResponse
  559. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  560. var err error
  561. resp, err = c.client.LeaseTasks(ctx, req, settings.GRPC...)
  562. return err
  563. }, opts...)
  564. if err != nil {
  565. return nil, err
  566. }
  567. return resp, nil
  568. }
  569. // AcknowledgeTask acknowledges a pull task.
  570. //
  571. // The worker, that is, the entity that
  572. // [leased][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks] this task must
  573. // call this method to indicate that the work associated with the task has
  574. // finished.
  575. //
  576. // The worker must acknowledge a task within the
  577. // [lease_duration][google.cloud.tasks.v2beta2.LeaseTasksRequest.lease_duration]
  578. // or the lease will expire and the task will become available to be leased
  579. // again. After the task is acknowledged, it will not be returned
  580. // by a later [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks],
  581. // [GetTask][google.cloud.tasks.v2beta2.CloudTasks.GetTask], or
  582. // [ListTasks][google.cloud.tasks.v2beta2.CloudTasks.ListTasks].
  583. func (c *Client) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error {
  584. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  585. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  586. opts = append(c.CallOptions.AcknowledgeTask[0:len(c.CallOptions.AcknowledgeTask):len(c.CallOptions.AcknowledgeTask)], opts...)
  587. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  588. var err error
  589. _, err = c.client.AcknowledgeTask(ctx, req, settings.GRPC...)
  590. return err
  591. }, opts...)
  592. return err
  593. }
  594. // RenewLease renew the current lease of a pull task.
  595. //
  596. // The worker can use this method to extend the lease by a new
  597. // duration, starting from now. The new task lease will be
  598. // returned in the task's
  599. // [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time].
  600. func (c *Client) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  601. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  602. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  603. opts = append(c.CallOptions.RenewLease[0:len(c.CallOptions.RenewLease):len(c.CallOptions.RenewLease)], opts...)
  604. var resp *taskspb.Task
  605. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  606. var err error
  607. resp, err = c.client.RenewLease(ctx, req, settings.GRPC...)
  608. return err
  609. }, opts...)
  610. if err != nil {
  611. return nil, err
  612. }
  613. return resp, nil
  614. }
  615. // CancelLease cancel a pull task's lease.
  616. //
  617. // The worker can use this method to cancel a task's lease by
  618. // setting its [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time]
  619. // to now. This will make the task available to be leased to the next caller
  620. // of [LeaseTasks][google.cloud.tasks.v2beta2.CloudTasks.LeaseTasks].
  621. func (c *Client) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  622. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  623. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  624. opts = append(c.CallOptions.CancelLease[0:len(c.CallOptions.CancelLease):len(c.CallOptions.CancelLease)], opts...)
  625. var resp *taskspb.Task
  626. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  627. var err error
  628. resp, err = c.client.CancelLease(ctx, req, settings.GRPC...)
  629. return err
  630. }, opts...)
  631. if err != nil {
  632. return nil, err
  633. }
  634. return resp, nil
  635. }
  636. // RunTask forces a task to run now.
  637. //
  638. // When this method is called, Cloud Tasks will dispatch the task, even if
  639. // the task is already running, the queue has reached its
  640. // [RateLimits][google.cloud.tasks.v2beta2.RateLimits] or is
  641. // [PAUSED][google.cloud.tasks.v2beta2.Queue.State.PAUSED].
  642. //
  643. // This command is meant to be used for manual debugging. For
  644. // example, [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] can be
  645. // used to retry a failed task after a fix has been made or to manually force
  646. // a task to be dispatched now.
  647. //
  648. // The dispatched task is returned. That is, the task that is returned
  649. // contains the [status][google.cloud.tasks.v2beta2.Task.status] after the
  650. // task is dispatched but before the task is received by its target.
  651. //
  652. // If Cloud Tasks receives a successful response from the task's
  653. // target, then the task will be deleted; otherwise the task's
  654. // [schedule_time][google.cloud.tasks.v2beta2.Task.schedule_time] will be
  655. // reset to the time that
  656. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] was called plus
  657. // the retry delay specified in the queue's
  658. // [RetryConfig][google.cloud.tasks.v2beta2.RetryConfig].
  659. //
  660. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] returns
  661. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] when it is called on a
  662. // task that has already succeeded or permanently failed.
  663. //
  664. // [RunTask][google.cloud.tasks.v2beta2.CloudTasks.RunTask] cannot be called
  665. // on a [pull task][google.cloud.tasks.v2beta2.PullMessage].
  666. func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  667. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  668. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  669. opts = append(c.CallOptions.RunTask[0:len(c.CallOptions.RunTask):len(c.CallOptions.RunTask)], opts...)
  670. var resp *taskspb.Task
  671. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  672. var err error
  673. resp, err = c.client.RunTask(ctx, req, settings.GRPC...)
  674. return err
  675. }, opts...)
  676. if err != nil {
  677. return nil, err
  678. }
  679. return resp, nil
  680. }
  681. // QueueIterator manages a stream of *taskspb.Queue.
  682. type QueueIterator struct {
  683. items []*taskspb.Queue
  684. pageInfo *iterator.PageInfo
  685. nextFunc func() error
  686. // InternalFetch is for use by the Google Cloud Libraries only.
  687. // It is not part of the stable interface of this package.
  688. //
  689. // InternalFetch returns results from a single call to the underlying RPC.
  690. // The number of results is no greater than pageSize.
  691. // If there are no more results, nextPageToken is empty and err is nil.
  692. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error)
  693. }
  694. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  695. func (it *QueueIterator) PageInfo() *iterator.PageInfo {
  696. return it.pageInfo
  697. }
  698. // Next returns the next result. Its second return value is iterator.Done if there are no more
  699. // results. Once Next returns Done, all subsequent calls will return Done.
  700. func (it *QueueIterator) Next() (*taskspb.Queue, error) {
  701. var item *taskspb.Queue
  702. if err := it.nextFunc(); err != nil {
  703. return item, err
  704. }
  705. item = it.items[0]
  706. it.items = it.items[1:]
  707. return item, nil
  708. }
  709. func (it *QueueIterator) bufLen() int {
  710. return len(it.items)
  711. }
  712. func (it *QueueIterator) takeBuf() interface{} {
  713. b := it.items
  714. it.items = nil
  715. return b
  716. }
  717. // TaskIterator manages a stream of *taskspb.Task.
  718. type TaskIterator struct {
  719. items []*taskspb.Task
  720. pageInfo *iterator.PageInfo
  721. nextFunc func() error
  722. // InternalFetch is for use by the Google Cloud Libraries only.
  723. // It is not part of the stable interface of this package.
  724. //
  725. // InternalFetch returns results from a single call to the underlying RPC.
  726. // The number of results is no greater than pageSize.
  727. // If there are no more results, nextPageToken is empty and err is nil.
  728. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error)
  729. }
  730. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  731. func (it *TaskIterator) PageInfo() *iterator.PageInfo {
  732. return it.pageInfo
  733. }
  734. // Next returns the next result. Its second return value is iterator.Done if there are no more
  735. // results. Once Next returns Done, all subsequent calls will return Done.
  736. func (it *TaskIterator) Next() (*taskspb.Task, error) {
  737. var item *taskspb.Task
  738. if err := it.nextFunc(); err != nil {
  739. return item, err
  740. }
  741. item = it.items[0]
  742. it.items = it.items[1:]
  743. return item, nil
  744. }
  745. func (it *TaskIterator) bufLen() int {
  746. return len(it.items)
  747. }
  748. func (it *TaskIterator) takeBuf() interface{} {
  749. b := it.items
  750. it.items = nil
  751. return b
  752. }