No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

678 líneas
26 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/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
  197. // whether 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
  203. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  204. // this method.
  205. func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  206. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  207. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  208. opts = append(c.CallOptions.CreateQueue[0:len(c.CallOptions.CreateQueue):len(c.CallOptions.CreateQueue)], opts...)
  209. var resp *taskspb.Queue
  210. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  211. var err error
  212. resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...)
  213. return err
  214. }, opts...)
  215. if err != nil {
  216. return nil, err
  217. }
  218. return resp, nil
  219. }
  220. // UpdateQueue updates a queue.
  221. //
  222. // This method creates the queue if it does not exist and updates
  223. // the queue if it does exist.
  224. //
  225. // Queues created with this method allow tasks to live for a maximum of 31
  226. // days. After a task is 31 days old, the task will be deleted regardless of
  227. // whether it was dispatched or not.
  228. //
  229. // WARNING: Using this method may have unintended side effects if you are
  230. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  231. // Read
  232. // Overview of Queue Management and
  233. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  234. // this method.
  235. func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  236. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", req.GetQueue().GetName()))
  237. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  238. opts = append(c.CallOptions.UpdateQueue[0:len(c.CallOptions.UpdateQueue):len(c.CallOptions.UpdateQueue)], opts...)
  239. var resp *taskspb.Queue
  240. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  241. var err error
  242. resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...)
  243. return err
  244. }, opts...)
  245. if err != nil {
  246. return nil, err
  247. }
  248. return resp, nil
  249. }
  250. // DeleteQueue deletes a queue.
  251. //
  252. // This command will delete the queue even if it has tasks in it.
  253. //
  254. // Note: If you delete a queue, a queue with the same name can't be created
  255. // for 7 days.
  256. //
  257. // WARNING: Using this method may have unintended side effects if you are
  258. // using an App Engine queue.yaml or queue.xml file to manage your queues.
  259. // Read
  260. // Overview of Queue Management and
  261. // queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
  262. // this method.
  263. func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
  264. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  265. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  266. opts = append(c.CallOptions.DeleteQueue[0:len(c.CallOptions.DeleteQueue):len(c.CallOptions.DeleteQueue)], opts...)
  267. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  268. var err error
  269. _, err = c.client.DeleteQueue(ctx, req, settings.GRPC...)
  270. return err
  271. }, opts...)
  272. return err
  273. }
  274. // PurgeQueue purges a queue by deleting all of its tasks.
  275. //
  276. // All tasks created before this method is called are permanently deleted.
  277. //
  278. // Purge operations can take up to one minute to take effect. Tasks
  279. // might be dispatched before the purge takes effect. A purge is irreversible.
  280. func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  281. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  282. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  283. opts = append(c.CallOptions.PurgeQueue[0:len(c.CallOptions.PurgeQueue):len(c.CallOptions.PurgeQueue)], opts...)
  284. var resp *taskspb.Queue
  285. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  286. var err error
  287. resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...)
  288. return err
  289. }, opts...)
  290. if err != nil {
  291. return nil, err
  292. }
  293. return resp, nil
  294. }
  295. // PauseQueue pauses the queue.
  296. //
  297. // If a queue is paused then the system will stop dispatching tasks
  298. // until the queue is resumed via
  299. // [ResumeQueue][google.cloud.tasks.v2beta3.CloudTasks.ResumeQueue]. Tasks can
  300. // still be added when the queue is paused. A queue is paused if its
  301. // [state][google.cloud.tasks.v2beta3.Queue.state] is
  302. // [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED].
  303. func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  304. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  305. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  306. opts = append(c.CallOptions.PauseQueue[0:len(c.CallOptions.PauseQueue):len(c.CallOptions.PauseQueue)], opts...)
  307. var resp *taskspb.Queue
  308. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  309. var err error
  310. resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...)
  311. return err
  312. }, opts...)
  313. if err != nil {
  314. return nil, err
  315. }
  316. return resp, nil
  317. }
  318. // ResumeQueue resume a queue.
  319. //
  320. // This method resumes a queue after it has been
  321. // [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED] or
  322. // [DISABLED][google.cloud.tasks.v2beta3.Queue.State.DISABLED]. The state of a
  323. // queue is stored in the queue's
  324. // [state][google.cloud.tasks.v2beta3.Queue.state]; after calling this method
  325. // it will be set to
  326. // [RUNNING][google.cloud.tasks.v2beta3.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
  332. // Risks (at https://cloud.google.com/tasks/docs/manage-cloud-task-scaling).
  333. func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
  334. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  335. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  336. opts = append(c.CallOptions.ResumeQueue[0:len(c.CallOptions.ResumeQueue):len(c.CallOptions.ResumeQueue)], opts...)
  337. var resp *taskspb.Queue
  338. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  339. var err error
  340. resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...)
  341. return err
  342. }, opts...)
  343. if err != nil {
  344. return nil, err
  345. }
  346. return resp, nil
  347. }
  348. // GetIamPolicy gets the access control policy for a
  349. // [Queue][google.cloud.tasks.v2beta3.Queue]. Returns an empty policy if the
  350. // resource exists and does not have a policy set.
  351. //
  352. // Authorization requires the following
  353. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  354. // resource parent:
  355. //
  356. // cloudtasks.queues.getIamPolicy
  357. func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  358. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  359. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  360. opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
  361. var resp *iampb.Policy
  362. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  363. var err error
  364. resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
  365. return err
  366. }, opts...)
  367. if err != nil {
  368. return nil, err
  369. }
  370. return resp, nil
  371. }
  372. // SetIamPolicy sets the access control policy for a
  373. // [Queue][google.cloud.tasks.v2beta3.Queue]. Replaces any existing policy.
  374. //
  375. // Note: The Cloud Console does not check queue-level IAM permissions yet.
  376. // Project-level permissions are required to use the Cloud Console.
  377. //
  378. // Authorization requires the following
  379. // Google IAM (at https://cloud.google.com/iam) permission on the specified
  380. // resource parent:
  381. //
  382. // cloudtasks.queues.setIamPolicy
  383. func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  384. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  385. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  386. opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
  387. var resp *iampb.Policy
  388. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  389. var err error
  390. resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
  391. return err
  392. }, opts...)
  393. if err != nil {
  394. return nil, err
  395. }
  396. return resp, nil
  397. }
  398. // TestIamPermissions returns permissions that a caller has on a
  399. // [Queue][google.cloud.tasks.v2beta3.Queue]. If the resource does not exist,
  400. // this will return an empty set of permissions, not a
  401. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] error.
  402. //
  403. // Note: This operation is designed to be used for building permission-aware
  404. // UIs and command-line tools, not for authorization checking. This operation
  405. // may "fail open" without warning.
  406. func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
  407. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", req.GetResource()))
  408. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  409. opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
  410. var resp *iampb.TestIamPermissionsResponse
  411. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  412. var err error
  413. resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
  414. return err
  415. }, opts...)
  416. if err != nil {
  417. return nil, err
  418. }
  419. return resp, nil
  420. }
  421. // ListTasks lists the tasks in a queue.
  422. //
  423. // By default, only the [BASIC][google.cloud.tasks.v2beta3.Task.View.BASIC]
  424. // view is retrieved due to performance considerations;
  425. // [response_view][google.cloud.tasks.v2beta3.ListTasksRequest.response_view]
  426. // controls the subset of information which is returned.
  427. //
  428. // The tasks may be returned in any order. The ordering may change at any
  429. // time.
  430. func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
  431. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  432. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  433. opts = append(c.CallOptions.ListTasks[0:len(c.CallOptions.ListTasks):len(c.CallOptions.ListTasks)], opts...)
  434. it := &TaskIterator{}
  435. req = proto.Clone(req).(*taskspb.ListTasksRequest)
  436. it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Task, string, error) {
  437. var resp *taskspb.ListTasksResponse
  438. req.PageToken = pageToken
  439. if pageSize > math.MaxInt32 {
  440. req.PageSize = math.MaxInt32
  441. } else {
  442. req.PageSize = int32(pageSize)
  443. }
  444. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  445. var err error
  446. resp, err = c.client.ListTasks(ctx, req, settings.GRPC...)
  447. return err
  448. }, opts...)
  449. if err != nil {
  450. return nil, "", err
  451. }
  452. return resp.Tasks, resp.NextPageToken, nil
  453. }
  454. fetch := func(pageSize int, pageToken string) (string, error) {
  455. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  456. if err != nil {
  457. return "", err
  458. }
  459. it.items = append(it.items, items...)
  460. return nextPageToken, nil
  461. }
  462. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  463. it.pageInfo.MaxSize = int(req.PageSize)
  464. return it
  465. }
  466. // GetTask gets a task.
  467. func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  468. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  469. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  470. opts = append(c.CallOptions.GetTask[0:len(c.CallOptions.GetTask):len(c.CallOptions.GetTask)], opts...)
  471. var resp *taskspb.Task
  472. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  473. var err error
  474. resp, err = c.client.GetTask(ctx, req, settings.GRPC...)
  475. return err
  476. }, opts...)
  477. if err != nil {
  478. return nil, err
  479. }
  480. return resp, nil
  481. }
  482. // CreateTask creates a task and adds it to a queue.
  483. //
  484. // Tasks cannot be updated after creation; there is no UpdateTask command.
  485. //
  486. // For [App Engine queues][google.cloud.tasks.v2beta3.AppEngineHttpQueue],
  487. // the maximum task size is
  488. // 100KB.
  489. func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  490. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", req.GetParent()))
  491. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  492. opts = append(c.CallOptions.CreateTask[0:len(c.CallOptions.CreateTask):len(c.CallOptions.CreateTask)], opts...)
  493. var resp *taskspb.Task
  494. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  495. var err error
  496. resp, err = c.client.CreateTask(ctx, req, settings.GRPC...)
  497. return err
  498. }, opts...)
  499. if err != nil {
  500. return nil, err
  501. }
  502. return resp, nil
  503. }
  504. // DeleteTask deletes a task.
  505. //
  506. // A task can be deleted if it is scheduled or dispatched. A task
  507. // cannot be deleted if it has executed successfully or permanently
  508. // failed.
  509. func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
  510. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  511. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  512. opts = append(c.CallOptions.DeleteTask[0:len(c.CallOptions.DeleteTask):len(c.CallOptions.DeleteTask)], opts...)
  513. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  514. var err error
  515. _, err = c.client.DeleteTask(ctx, req, settings.GRPC...)
  516. return err
  517. }, opts...)
  518. return err
  519. }
  520. // RunTask forces a task to run now.
  521. //
  522. // When this method is called, Cloud Tasks will dispatch the task, even if
  523. // the task is already running, the queue has reached its
  524. // [RateLimits][google.cloud.tasks.v2beta3.RateLimits] or is
  525. // [PAUSED][google.cloud.tasks.v2beta3.Queue.State.PAUSED].
  526. //
  527. // This command is meant to be used for manual debugging. For
  528. // example, [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] can be
  529. // used to retry a failed task after a fix has been made or to manually force
  530. // a task to be dispatched now.
  531. //
  532. // The dispatched task is returned. That is, the task that is returned
  533. // contains the [status][Task.status] after the task is dispatched but
  534. // before the task is received by its target.
  535. //
  536. // If Cloud Tasks receives a successful response from the task's
  537. // target, then the task will be deleted; otherwise the task's
  538. // [schedule_time][google.cloud.tasks.v2beta3.Task.schedule_time] will be
  539. // reset to the time that
  540. // [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] was called plus
  541. // the retry delay specified in the queue's
  542. // [RetryConfig][google.cloud.tasks.v2beta3.RetryConfig].
  543. //
  544. // [RunTask][google.cloud.tasks.v2beta3.CloudTasks.RunTask] returns
  545. // [NOT_FOUND][google.rpc.Code.NOT_FOUND] when it is called on a
  546. // task that has already succeeded or permanently failed.
  547. func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
  548. md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", req.GetName()))
  549. ctx = insertMetadata(ctx, c.xGoogMetadata, md)
  550. opts = append(c.CallOptions.RunTask[0:len(c.CallOptions.RunTask):len(c.CallOptions.RunTask)], opts...)
  551. var resp *taskspb.Task
  552. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  553. var err error
  554. resp, err = c.client.RunTask(ctx, req, settings.GRPC...)
  555. return err
  556. }, opts...)
  557. if err != nil {
  558. return nil, err
  559. }
  560. return resp, nil
  561. }
  562. // QueueIterator manages a stream of *taskspb.Queue.
  563. type QueueIterator struct {
  564. items []*taskspb.Queue
  565. pageInfo *iterator.PageInfo
  566. nextFunc func() error
  567. // InternalFetch is for use by the Google Cloud Libraries only.
  568. // It is not part of the stable interface of this package.
  569. //
  570. // InternalFetch returns results from a single call to the underlying RPC.
  571. // The number of results is no greater than pageSize.
  572. // If there are no more results, nextPageToken is empty and err is nil.
  573. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error)
  574. }
  575. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  576. func (it *QueueIterator) PageInfo() *iterator.PageInfo {
  577. return it.pageInfo
  578. }
  579. // Next returns the next result. Its second return value is iterator.Done if there are no more
  580. // results. Once Next returns Done, all subsequent calls will return Done.
  581. func (it *QueueIterator) Next() (*taskspb.Queue, error) {
  582. var item *taskspb.Queue
  583. if err := it.nextFunc(); err != nil {
  584. return item, err
  585. }
  586. item = it.items[0]
  587. it.items = it.items[1:]
  588. return item, nil
  589. }
  590. func (it *QueueIterator) bufLen() int {
  591. return len(it.items)
  592. }
  593. func (it *QueueIterator) takeBuf() interface{} {
  594. b := it.items
  595. it.items = nil
  596. return b
  597. }
  598. // TaskIterator manages a stream of *taskspb.Task.
  599. type TaskIterator struct {
  600. items []*taskspb.Task
  601. pageInfo *iterator.PageInfo
  602. nextFunc func() error
  603. // InternalFetch is for use by the Google Cloud Libraries only.
  604. // It is not part of the stable interface of this package.
  605. //
  606. // InternalFetch returns results from a single call to the underlying RPC.
  607. // The number of results is no greater than pageSize.
  608. // If there are no more results, nextPageToken is empty and err is nil.
  609. InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error)
  610. }
  611. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  612. func (it *TaskIterator) PageInfo() *iterator.PageInfo {
  613. return it.pageInfo
  614. }
  615. // Next returns the next result. Its second return value is iterator.Done if there are no more
  616. // results. Once Next returns Done, all subsequent calls will return Done.
  617. func (it *TaskIterator) Next() (*taskspb.Task, error) {
  618. var item *taskspb.Task
  619. if err := it.nextFunc(); err != nil {
  620. return item, err
  621. }
  622. item = it.items[0]
  623. it.items = it.items[1:]
  624. return item, nil
  625. }
  626. func (it *TaskIterator) bufLen() int {
  627. return len(it.items)
  628. }
  629. func (it *TaskIterator) takeBuf() interface{} {
  630. b := it.items
  631. it.items = nil
  632. return b
  633. }