cloud_tasks_client.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  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/v2beta3"
  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. RunTask []gax.CallOption
  50. }
  51. func defaultClientOptions() []option.ClientOption {
  52. return []option.ClientOption{
  53. option.WithEndpoint("cloudtasks.googleapis.com:443"),
  54. option.WithScopes(DefaultAuthScopes()...),
  55. }
  56. }
  57. func defaultCallOptions() *CallOptions {
  58. retry := map[[2]string][]gax.CallOption{
  59. {"default", "idempotent"}: {
  60. gax.WithRetry(func() gax.Retryer {
  61. return gax.OnCodes([]codes.Code{
  62. codes.DeadlineExceeded,
  63. codes.Unavailable,
  64. }, gax.Backoff{
  65. Initial: 100 * time.Millisecond,
  66. Max: 60000 * time.Millisecond,
  67. Multiplier: 1.3,
  68. })
  69. }),
  70. },
  71. }
  72. return &CallOptions{
  73. ListQueues: retry[[2]string{"default", "idempotent"}],
  74. GetQueue: retry[[2]string{"default", "idempotent"}],
  75. CreateQueue: retry[[2]string{"default", "non_idempotent"}],
  76. UpdateQueue: retry[[2]string{"default", "non_idempotent"}],
  77. DeleteQueue: retry[[2]string{"default", "idempotent"}],
  78. PurgeQueue: retry[[2]string{"default", "non_idempotent"}],
  79. PauseQueue: retry[[2]string{"default", "non_idempotent"}],
  80. ResumeQueue: retry[[2]string{"default", "non_idempotent"}],
  81. GetIamPolicy: retry[[2]string{"default", "idempotent"}],
  82. SetIamPolicy: retry[[2]string{"default", "non_idempotent"}],
  83. TestIamPermissions: retry[[2]string{"default", "idempotent"}],
  84. ListTasks: retry[[2]string{"default", "idempotent"}],
  85. GetTask: retry[[2]string{"default", "idempotent"}],
  86. CreateTask: retry[[2]string{"default", "non_idempotent"}],
  87. DeleteTask: retry[[2]string{"default", "idempotent"}],
  88. RunTask: retry[[2]string{"default", "non_idempotent"}],
  89. }
  90. }
  91. // Client is a client for interacting with Cloud Tasks API.
  92. //
  93. // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
  94. type Client struct {
  95. // The connection to the service.
  96. conn *grpc.ClientConn
  97. // The gRPC API client.
  98. client taskspb.CloudTasksClient
  99. // The call options for this service.
  100. CallOptions *CallOptions
  101. // The x-goog-* metadata to be sent with each request.
  102. xGoogMetadata metadata.MD
  103. }
  104. // NewClient creates a new cloud tasks client.
  105. //
  106. // Cloud Tasks allows developers to manage the execution of background
  107. // work in their applications.
  108. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
  109. conn, err := transport.DialGRPC(ctx, append(defaultClientOptions(), opts...)...)
  110. if err != nil {
  111. return nil, err
  112. }
  113. c := &Client{
  114. conn: conn,
  115. CallOptions: defaultCallOptions(),
  116. client: taskspb.NewCloudTasksClient(conn),
  117. }
  118. c.setGoogleClientInfo()
  119. return c, nil
  120. }
  121. // Connection returns the client's connection to the API service.
  122. func (c *Client) Connection() *grpc.ClientConn {
  123. return c.conn
  124. }
  125. // Close closes the connection to the API service. The user should invoke this when
  126. // the client is no longer required.
  127. func (c *Client) Close() error {
  128. return c.conn.Close()
  129. }
  130. // setGoogleClientInfo sets the name and version of the application in
  131. // the `x-goog-api-client` header passed on each request. Intended for
  132. // use by Google-written clients.
  133. func (c *Client) setGoogleClientInfo(keyval ...string) {
  134. kv := append([]string{"gl-go", versionGo()}, keyval...)
  135. kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
  136. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  137. }
  138. // ListQueues lists queues.
  139. //
  140. // Queues are returned in lexicographical order.
  141. func (c *Client) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator {
  142. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  143. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  144. opts = append(c.CallOptions.ListQueues[0:len(c.CallOptions.ListQueues):len(c.CallOptions.ListQueues)], opts...)
  145. it := &QueueIterator{}
  146. req = proto.Clone(req).(*taskspb.ListQueuesRequest)
  147. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Queue, string, error) {
  148. var resp *taskspb.ListQueuesResponse
  149. req.PageToken = pageToken
  150. if pageSize > math.MaxInt32 {
  151. req.PageSize = math.MaxInt32
  152. } else {
  153. req.PageSize = int32(pageSize)
  154. }
  155. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  156. var err error
  157. resp, err = c.client.ListQueues(ctx, req, settings.GRPC...)
  158. return err
  159. }, opts...)
  160. if err != nil {
  161. return nil, "", err
  162. }
  163. return resp.Queues, resp.NextPageToken, nil
  164. }
  165. fetch := func(pageSize int, pageToken string) (string, error) {
  166. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  167. if err != nil {
  168. return "", err
  169. }
  170. it.items = append(it.items, items...)
  171. return nextPageToken, nil
  172. }
  173. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  174. it.pageInfo.MaxSize = int(req.PageSize)
  175. return it
  176. }
  177. // GetQueue gets a queue.
  178. func (c *Client) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  179. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  180. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  181. opts = append(c.CallOptions.GetQueue[0:len(c.CallOptions.GetQueue):len(c.CallOptions.GetQueue)], opts...)
  182. var resp *taskspb.Queue
  183. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  184. var err error
  185. resp, err = c.client.GetQueue(ctx, req, settings.GRPC...)
  186. return err
  187. }, opts...)
  188. if err != nil {
  189. return nil, err
  190. }
  191. return resp, nil
  192. }
  193. // CreateQueue creates a queue.
  194. //
  195. // Queues created with this method allow tasks to live for a maximum of 31
  196. // days. After a task is 31 days old, the task will be deleted regardless of whether
  197. // it was dispatched or not.
  198. //
  199. // WARNING: Using this method may have unintended side effects if you are
  200. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  201. // Read
  202. // Overview of Queue Management and queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml)
  203. // before using this method.
  204. func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  205. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  206. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  207. opts = append(c.CallOptions.CreateQueue[0:len(c.CallOptions.CreateQueue):len(c.CallOptions.CreateQueue)], opts...)
  208. var resp *taskspb.Queue
  209. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  210. var err error
  211. resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...)
  212. return err
  213. }, opts...)
  214. if err != nil {
  215. return nil, err
  216. }
  217. return resp, nil
  218. }
  219. // UpdateQueue updates a queue.
  220. //
  221. // This method creates the queue if it does not exist and updates
  222. // the queue if it does exist.
  223. //
  224. // Queues created with this method allow tasks to live for a maximum of 31
  225. // days. After a task is 31 days old, the task will be deleted regardless of whether
  226. // it was dispatched or not.
  227. //
  228. // WARNING: Using this method may have unintended side effects if you are
  229. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  230. // Read
  231. // Overview of Queue Management and queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml)
  232. // before using this method.
  233. func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  234. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", req.GetQueue().GetName()))
  235. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  236. opts = append(c.CallOptions.UpdateQueue[0:len(c.CallOptions.UpdateQueue):len(c.CallOptions.UpdateQueue)], opts...)
  237. var resp *taskspb.Queue
  238. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  239. var err error
  240. resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...)
  241. return err
  242. }, opts...)
  243. if err != nil {
  244. return nil, err
  245. }
  246. return resp, nil
  247. }
  248. // DeleteQueue deletes a queue.
  249. //
  250. // This command will delete the queue even if it has tasks in it.
  251. //
  252. // Note: If you delete a queue, a queue with the same name can't be created
  253. // for 7 days.
  254. //
  255. // WARNING: Using this method may have unintended side effects if you are
  256. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  257. // Read
  258. // Overview of Queue Management and queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml)
  259. // before using this method.
  260. func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
  261. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  262. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  263. opts = append(c.CallOptions.DeleteQueue[0:len(c.CallOptions.DeleteQueue):len(c.CallOptions.DeleteQueue)], opts...)
  264. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  265. var err error
  266. _, err = c.client.DeleteQueue(ctx, req, settings.GRPC...)
  267. return err
  268. }, opts...)
  269. return err
  270. }
  271. // PurgeQueue purges a queue by deleting all of its tasks.
  272. //
  273. // All tasks created before this method is called are permanently deleted.
  274. //
  275. // Purge operations can take up to one minute to take effect. Tasks
  276. // might be dispatched before the purge takes effect. A purge is irreversible.
  277. func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  278. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  279. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  280. opts = append(c.CallOptions.PurgeQueue[0:len(c.CallOptions.PurgeQueue):len(c.CallOptions.PurgeQueue)], opts...)
  281. var resp *taskspb.Queue
  282. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  283. var err error
  284. resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...)
  285. return err
  286. }, opts...)
  287. if err != nil {
  288. return nil, err
  289. }
  290. return resp, nil
  291. }
  292. // PauseQueue pauses the queue.
  293. //
  294. // If a queue is paused then the system will stop dispatching tasks
  295. // until the queue is resumed via
  296. // [ResumeQueue][google.cloud.tasks.v2beta3.CloudTasks.ResumeQueue]. Tasks can still be added
  297. // when the queue is paused. A queue is paused if its
  298. // [state][google.cloud.tasks.v2beta3.Queue.state] is [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED].
  299. func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  300. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  301. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  302. opts = append(c.CallOptions.PauseQueue[0:len(c.CallOptions.PauseQueue):len(c.CallOptions.PauseQueue)], opts...)
  303. var resp *taskspb.Queue
  304. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  305. var err error
  306. resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...)
  307. return err
  308. }, opts...)
  309. if err != nil {
  310. return nil, err
  311. }
  312. return resp, nil
  313. }
  314. // ResumeQueue resume a queue.
  315. //
  316. // This method resumes a queue after it has been
  317. // [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED] or
  318. // [DISABLED][google.cloud.tasks.v2beta3.Queue.State.DISABLED]. The state of a queue is stored
  319. // in the queue's [state][google.cloud.tasks.v2beta3.Queue.state]; after calling this method it
  320. // will be set to [RUNNING][google.cloud.tasks.v2beta3.Queue.State.RUNNING].
  321. //
  322. // WARNING: Resuming many high-QPS queues at the same time can
  323. // lead to target overloading. If you are resuming high-QPS
  324. // queues, follow the 500/50/5 pattern described in
  325. // Managing Cloud Tasks Scaling Risks (at https://cloud.google.com/tasks/docs/manage-cloud-task-scaling).
  326. func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  327. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  328. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  329. opts = append(c.CallOptions.ResumeQueue[0:len(c.CallOptions.ResumeQueue):len(c.CallOptions.ResumeQueue)], opts...)
  330. var resp *taskspb.Queue
  331. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  332. var err error
  333. resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...)
  334. return err
  335. }, opts...)
  336. if err != nil {
  337. return nil, err
  338. }
  339. return resp, nil
  340. }
  341. // GetIamPolicy gets the access control policy for a [Queue][google.cloud.tasks.v2beta3.Queue].
  342. // Returns an empty policy if the resource exists and does not have a policy
  343. // set.
  344. //
  345. // Authorization requires the following
  346. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  347. // resource parent:
  348. //
  349. // cloudtasks.queues.getIamPolicy
  350. func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  351. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  352. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  353. opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
  354. var resp *iampb.Policy
  355. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  356. var err error
  357. resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
  358. return err
  359. }, opts...)
  360. if err != nil {
  361. return nil, err
  362. }
  363. return resp, nil
  364. }
  365. // SetIamPolicy sets the access control policy for a [Queue][google.cloud.tasks.v2beta3.Queue]. Replaces any existing
  366. // policy.
  367. //
  368. // Note: The Cloud Console does not check queue-level IAM permissions yet.
  369. // Project-level permissions are required to use the Cloud Console.
  370. //
  371. // Authorization requires the following
  372. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  373. // resource parent:
  374. //
  375. // cloudtasks.queues.setIamPolicy
  376. func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  377. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  378. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  379. opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
  380. var resp *iampb.Policy
  381. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  382. var err error
  383. resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
  384. return err
  385. }, opts...)
  386. if err != nil {
  387. return nil, err
  388. }
  389. return resp, nil
  390. }
  391. // TestIamPermissions returns permissions that a caller has on a [Queue][google.cloud.tasks.v2beta3.Queue].
  392. // If the resource does not exist, this will return an empty set of
  393. // permissions, not a [NOT_FOUND][google.rpc.Code.NOT_FOUND] error.
  394. //
  395. // Note: This operation is designed to be used for building permission-aware
  396. // UIs and command-line tools, not for authorization checking. This operation
  397. // may "fail open" without warning.
  398. func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
  399. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  400. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  401. opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
  402. var resp *iampb.TestIamPermissionsResponse
  403. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  404. var err error
  405. resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
  406. return err
  407. }, opts...)
  408. if err != nil {
  409. return nil, err
  410. }
  411. return resp, nil
  412. }
  413. // ListTasks lists the tasks in a queue.
  414. //
  415. // By default, only the [BASIC][google.cloud.tasks.v2beta3.Task.View.BASIC] view is retrieved
  416. // due to performance considerations;
  417. // [response_view][google.cloud.tasks.v2beta3.ListTasksRequest.response_view] controls the
  418. // subset of information which is returned.
  419. //
  420. // The tasks may be returned in any order. The ordering may change at any
  421. // time.
  422. func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
  423. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  424. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  425. opts = append(c.CallOptions.ListTasks[0:len(c.CallOptions.ListTasks):len(c.CallOptions.ListTasks)], opts...)
  426. it := &TaskIterator{}
  427. req = proto.Clone(req).(*taskspb.ListTasksRequest)
  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. it.pageInfo.MaxSize = int(req.PageSize)
  456. return it
  457. }
  458. // GetTask gets a task.
  459. func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  460. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  461. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  462. opts = append(c.CallOptions.GetTask[0:len(c.CallOptions.GetTask):len(c.CallOptions.GetTask)], opts...)
  463. var resp *taskspb.Task
  464. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  465. var err error
  466. resp, err = c.client.GetTask(ctx, req, settings.GRPC...)
  467. return err
  468. }, opts...)
  469. if err != nil {
  470. return nil, err
  471. }
  472. return resp, nil
  473. }
  474. // CreateTask creates a task and adds it to a queue.
  475. //
  476. // Tasks cannot be updated after creation; there is no UpdateTask command.
  477. //
  478. // For [App Engine queues][google.cloud.tasks.v2beta3.AppEngineHttpQueue], the maximum task size is
  479. // 100KB.
  480. func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  481. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  482. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  483. opts = append(c.CallOptions.CreateTask[0:len(c.CallOptions.CreateTask):len(c.CallOptions.CreateTask)], opts...)
  484. var resp *taskspb.Task
  485. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  486. var err error
  487. resp, err = c.client.CreateTask(ctx, req, settings.GRPC...)
  488. return err
  489. }, opts...)
  490. if err != nil {
  491. return nil, err
  492. }
  493. return resp, nil
  494. }
  495. // DeleteTask deletes a task.
  496. //
  497. // A task can be deleted if it is scheduled or dispatched. A task
  498. // cannot be deleted if it has executed successfully or permanently
  499. // failed.
  500. func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
  501. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  502. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  503. opts = append(c.CallOptions.DeleteTask[0:len(c.CallOptions.DeleteTask):len(c.CallOptions.DeleteTask)], opts...)
  504. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  505. var err error
  506. _, err = c.client.DeleteTask(ctx, req, settings.GRPC...)
  507. return err
  508. }, opts...)
  509. return err
  510. }
  511. // RunTask forces a task to run now.
  512. //
  513. // When this method is called, Cloud Tasks will dispatch the task, even if
  514. // the task is already running, the queue has reached its [RateLimits][google.cloud.tasks.v2beta3.RateLimits] or
  515. // is [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED].
  516. //
  517. // This command is meant to be used for manual debugging. For
  518. // example, [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] can be used to retry a failed
  519. // task after a fix has been made or to manually force a task to be
  520. // dispatched now.
  521. //
  522. // The dispatched task is returned. That is, the task that is returned
  523. // contains the [status][Task.status] after the task is dispatched but
  524. // before the task is received by its target.
  525. //
  526. // If Cloud Tasks receives a successful response from the task's
  527. // target, then the task will be deleted; otherwise the task's
  528. // [schedule_time][google.cloud.tasks.v2beta3.Task.schedule_time] will be reset to the time that
  529. // [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] was called plus the retry delay specified
  530. // in the queue's [RetryConfig][google.cloud.tasks.v2beta3.RetryConfig].
  531. //
  532. // [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] returns
  533. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] when it is called on a
  534. // task that has already succeeded or permanently failed.
  535. func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  536. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  537. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  538. opts = append(c.CallOptions.RunTask[0:len(c.CallOptions.RunTask):len(c.CallOptions.RunTask)], opts...)
  539. var resp *taskspb.Task
  540. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  541. var err error
  542. resp, err = c.client.RunTask(ctx, req, settings.GRPC...)
  543. return err
  544. }, opts...)
  545. if err != nil {
  546. return nil, err
  547. }
  548. return resp, nil
  549. }
  550. // QueueIterator manages a stream of *taskspb.Queue.
  551. type QueueIterator struct {
  552. items []*taskspb.Queue
  553. pageInfo *iterator.PageInfo
  554. nextFunc func() error
  555. // InternalFetch is for use by the Google Cloud Libraries only.
  556. // It is not part of the stable interface of this package.
  557. //
  558. // InternalFetch returns results from a single call to the underlying RPC.
  559. // The number of results is no greater than pageSize.
  560. // If there are no more results, nextPageToken is empty and err is nil.
  561. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error)
  562. }
  563. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  564. func (it *QueueIterator) PageInfo() *iterator.PageInfo {
  565. return it.pageInfo
  566. }
  567. // Next returns the next result. Its second return value is iterator.Done if there are no more
  568. // results. Once Next returns Done, all subsequent calls will return Done.
  569. func (it *QueueIterator) Next() (*taskspb.Queue, error) {
  570. var item *taskspb.Queue
  571. if err := it.nextFunc(); err != nil {
  572. return item, err
  573. }
  574. item = it.items[0]
  575. it.items = it.items[1:]
  576. return item, nil
  577. }
  578. func (it *QueueIterator) bufLen() int {
  579. return len(it.items)
  580. }
  581. func (it *QueueIterator) takeBuf() interface{} {
  582. b := it.items
  583. it.items = nil
  584. return b
  585. }
  586. // TaskIterator manages a stream of *taskspb.Task.
  587. type TaskIterator struct {
  588. items []*taskspb.Task
  589. pageInfo *iterator.PageInfo
  590. nextFunc func() error
  591. // InternalFetch is for use by the Google Cloud Libraries only.
  592. // It is not part of the stable interface of this package.
  593. //
  594. // InternalFetch returns results from a single call to the underlying RPC.
  595. // The number of results is no greater than pageSize.
  596. // If there are no more results, nextPageToken is empty and err is nil.
  597. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error)
  598. }
  599. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  600. func (it *TaskIterator) PageInfo() *iterator.PageInfo {
  601. return it.pageInfo
  602. }
  603. // Next returns the next result. Its second return value is iterator.Done if there are no more
  604. // results. Once Next returns Done, all subsequent calls will return Done.
  605. func (it *TaskIterator) Next() (*taskspb.Task, error) {
  606. var item *taskspb.Task
  607. if err := it.nextFunc(); err != nil {
  608. return item, err
  609. }
  610. item = it.items[0]
  611. it.items = it.items[1:]
  612. return item, nil
  613. }
  614. func (it *TaskIterator) bufLen() int {
  615. return len(it.items)
  616. }
  617. func (it *TaskIterator) takeBuf() interface{} {
  618. b := it.items
  619. it.items = nil
  620. return b
  621. }