1// Copyright 2021 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 15// Code generated by protoc-gen-go_gapic. DO NOT EDIT. 16 17package cloudtasks 18 19import ( 20 "context" 21 "fmt" 22 "math" 23 "net/url" 24 "time" 25 26 gax "github.com/googleapis/gax-go/v2" 27 "google.golang.org/api/iterator" 28 "google.golang.org/api/option" 29 "google.golang.org/api/option/internaloption" 30 gtransport "google.golang.org/api/transport/grpc" 31 taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2beta2" 32 iampb "google.golang.org/genproto/googleapis/iam/v1" 33 "google.golang.org/grpc" 34 "google.golang.org/grpc/codes" 35 "google.golang.org/grpc/metadata" 36 "google.golang.org/protobuf/proto" 37) 38 39var newClientHook clientHook 40 41// CallOptions contains the retry settings for each method of Client. 42type CallOptions struct { 43 ListQueues []gax.CallOption 44 GetQueue []gax.CallOption 45 CreateQueue []gax.CallOption 46 UpdateQueue []gax.CallOption 47 DeleteQueue []gax.CallOption 48 PurgeQueue []gax.CallOption 49 PauseQueue []gax.CallOption 50 ResumeQueue []gax.CallOption 51 GetIamPolicy []gax.CallOption 52 SetIamPolicy []gax.CallOption 53 TestIamPermissions []gax.CallOption 54 ListTasks []gax.CallOption 55 GetTask []gax.CallOption 56 CreateTask []gax.CallOption 57 DeleteTask []gax.CallOption 58 LeaseTasks []gax.CallOption 59 AcknowledgeTask []gax.CallOption 60 RenewLease []gax.CallOption 61 CancelLease []gax.CallOption 62 RunTask []gax.CallOption 63} 64 65func defaultGRPCClientOptions() []option.ClientOption { 66 return []option.ClientOption{ 67 internaloption.WithDefaultEndpoint("cloudtasks.googleapis.com:443"), 68 internaloption.WithDefaultMTLSEndpoint("cloudtasks.mtls.googleapis.com:443"), 69 internaloption.WithDefaultAudience("https://cloudtasks.googleapis.com/"), 70 internaloption.WithDefaultScopes(DefaultAuthScopes()...), 71 internaloption.EnableJwtWithScope(), 72 option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), 73 option.WithGRPCDialOption(grpc.WithDefaultCallOptions( 74 grpc.MaxCallRecvMsgSize(math.MaxInt32))), 75 } 76} 77 78func defaultCallOptions() *CallOptions { 79 return &CallOptions{ 80 ListQueues: []gax.CallOption{ 81 gax.WithRetry(func() gax.Retryer { 82 return gax.OnCodes([]codes.Code{ 83 codes.Unavailable, 84 codes.DeadlineExceeded, 85 }, gax.Backoff{ 86 Initial: 100 * time.Millisecond, 87 Max: 10000 * time.Millisecond, 88 Multiplier: 1.30, 89 }) 90 }), 91 }, 92 GetQueue: []gax.CallOption{ 93 gax.WithRetry(func() gax.Retryer { 94 return gax.OnCodes([]codes.Code{ 95 codes.Unavailable, 96 codes.DeadlineExceeded, 97 }, gax.Backoff{ 98 Initial: 100 * time.Millisecond, 99 Max: 10000 * time.Millisecond, 100 Multiplier: 1.30, 101 }) 102 }), 103 }, 104 CreateQueue: []gax.CallOption{}, 105 UpdateQueue: []gax.CallOption{}, 106 DeleteQueue: []gax.CallOption{ 107 gax.WithRetry(func() gax.Retryer { 108 return gax.OnCodes([]codes.Code{ 109 codes.Unavailable, 110 codes.DeadlineExceeded, 111 }, gax.Backoff{ 112 Initial: 100 * time.Millisecond, 113 Max: 10000 * time.Millisecond, 114 Multiplier: 1.30, 115 }) 116 }), 117 }, 118 PurgeQueue: []gax.CallOption{}, 119 PauseQueue: []gax.CallOption{}, 120 ResumeQueue: []gax.CallOption{}, 121 GetIamPolicy: []gax.CallOption{ 122 gax.WithRetry(func() gax.Retryer { 123 return gax.OnCodes([]codes.Code{ 124 codes.Unavailable, 125 codes.DeadlineExceeded, 126 }, gax.Backoff{ 127 Initial: 100 * time.Millisecond, 128 Max: 10000 * time.Millisecond, 129 Multiplier: 1.30, 130 }) 131 }), 132 }, 133 SetIamPolicy: []gax.CallOption{}, 134 TestIamPermissions: []gax.CallOption{ 135 gax.WithRetry(func() gax.Retryer { 136 return gax.OnCodes([]codes.Code{ 137 codes.Unavailable, 138 codes.DeadlineExceeded, 139 }, gax.Backoff{ 140 Initial: 100 * time.Millisecond, 141 Max: 10000 * time.Millisecond, 142 Multiplier: 1.30, 143 }) 144 }), 145 }, 146 ListTasks: []gax.CallOption{ 147 gax.WithRetry(func() gax.Retryer { 148 return gax.OnCodes([]codes.Code{ 149 codes.Unavailable, 150 codes.DeadlineExceeded, 151 }, gax.Backoff{ 152 Initial: 100 * time.Millisecond, 153 Max: 10000 * time.Millisecond, 154 Multiplier: 1.30, 155 }) 156 }), 157 }, 158 GetTask: []gax.CallOption{ 159 gax.WithRetry(func() gax.Retryer { 160 return gax.OnCodes([]codes.Code{ 161 codes.Unavailable, 162 codes.DeadlineExceeded, 163 }, gax.Backoff{ 164 Initial: 100 * time.Millisecond, 165 Max: 10000 * time.Millisecond, 166 Multiplier: 1.30, 167 }) 168 }), 169 }, 170 CreateTask: []gax.CallOption{}, 171 DeleteTask: []gax.CallOption{ 172 gax.WithRetry(func() gax.Retryer { 173 return gax.OnCodes([]codes.Code{ 174 codes.Unavailable, 175 codes.DeadlineExceeded, 176 }, gax.Backoff{ 177 Initial: 100 * time.Millisecond, 178 Max: 10000 * time.Millisecond, 179 Multiplier: 1.30, 180 }) 181 }), 182 }, 183 LeaseTasks: []gax.CallOption{}, 184 AcknowledgeTask: []gax.CallOption{}, 185 RenewLease: []gax.CallOption{}, 186 CancelLease: []gax.CallOption{}, 187 RunTask: []gax.CallOption{}, 188 } 189} 190 191// internalClient is an interface that defines the methods availaible from Cloud Tasks API. 192type internalClient interface { 193 Close() error 194 setGoogleClientInfo(...string) 195 Connection() *grpc.ClientConn 196 ListQueues(context.Context, *taskspb.ListQueuesRequest, ...gax.CallOption) *QueueIterator 197 GetQueue(context.Context, *taskspb.GetQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 198 CreateQueue(context.Context, *taskspb.CreateQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 199 UpdateQueue(context.Context, *taskspb.UpdateQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 200 DeleteQueue(context.Context, *taskspb.DeleteQueueRequest, ...gax.CallOption) error 201 PurgeQueue(context.Context, *taskspb.PurgeQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 202 PauseQueue(context.Context, *taskspb.PauseQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 203 ResumeQueue(context.Context, *taskspb.ResumeQueueRequest, ...gax.CallOption) (*taskspb.Queue, error) 204 GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error) 205 SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error) 206 TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest, ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) 207 ListTasks(context.Context, *taskspb.ListTasksRequest, ...gax.CallOption) *TaskIterator 208 GetTask(context.Context, *taskspb.GetTaskRequest, ...gax.CallOption) (*taskspb.Task, error) 209 CreateTask(context.Context, *taskspb.CreateTaskRequest, ...gax.CallOption) (*taskspb.Task, error) 210 DeleteTask(context.Context, *taskspb.DeleteTaskRequest, ...gax.CallOption) error 211 LeaseTasks(context.Context, *taskspb.LeaseTasksRequest, ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) 212 AcknowledgeTask(context.Context, *taskspb.AcknowledgeTaskRequest, ...gax.CallOption) error 213 RenewLease(context.Context, *taskspb.RenewLeaseRequest, ...gax.CallOption) (*taskspb.Task, error) 214 CancelLease(context.Context, *taskspb.CancelLeaseRequest, ...gax.CallOption) (*taskspb.Task, error) 215 RunTask(context.Context, *taskspb.RunTaskRequest, ...gax.CallOption) (*taskspb.Task, error) 216} 217 218// Client is a client for interacting with Cloud Tasks API. 219// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. 220// 221// Cloud Tasks allows developers to manage the execution of background 222// work in their applications. 223type Client struct { 224 // The internal transport-dependent client. 225 internalClient internalClient 226 227 // The call options for this service. 228 CallOptions *CallOptions 229} 230 231// Wrapper methods routed to the internal client. 232 233// Close closes the connection to the API service. The user should invoke this when 234// the client is no longer required. 235func (c *Client) Close() error { 236 return c.internalClient.Close() 237} 238 239// setGoogleClientInfo sets the name and version of the application in 240// the `x-goog-api-client` header passed on each request. Intended for 241// use by Google-written clients. 242func (c *Client) setGoogleClientInfo(keyval ...string) { 243 c.internalClient.setGoogleClientInfo(keyval...) 244} 245 246// Connection returns a connection to the API service. 247// 248// Deprecated. 249func (c *Client) Connection() *grpc.ClientConn { 250 return c.internalClient.Connection() 251} 252 253// ListQueues lists queues. 254// 255// Queues are returned in lexicographical order. 256func (c *Client) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator { 257 return c.internalClient.ListQueues(ctx, req, opts...) 258} 259 260// GetQueue gets a queue. 261func (c *Client) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 262 return c.internalClient.GetQueue(ctx, req, opts...) 263} 264 265// CreateQueue creates a queue. 266// 267// Queues created with this method allow tasks to live for a maximum of 31 268// days. After a task is 31 days old, the task will be deleted regardless of whether 269// it was dispatched or not. 270// 271// WARNING: Using this method may have unintended side effects if you are 272// using an App Engine queue.yaml or queue.xml file to manage your queues. 273// Read 274// Overview of Queue Management and 275// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using 276// this method. 277func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 278 return c.internalClient.CreateQueue(ctx, req, opts...) 279} 280 281// UpdateQueue updates a queue. 282// 283// This method creates the queue if it does not exist and updates 284// the queue if it does exist. 285// 286// Queues created with this method allow tasks to live for a maximum of 31 287// days. After a task is 31 days old, the task will be deleted regardless of whether 288// it was dispatched or not. 289// 290// WARNING: Using this method may have unintended side effects if you are 291// using an App Engine queue.yaml or queue.xml file to manage your queues. 292// Read 293// Overview of Queue Management and 294// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using 295// this method. 296func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 297 return c.internalClient.UpdateQueue(ctx, req, opts...) 298} 299 300// DeleteQueue deletes a queue. 301// 302// This command will delete the queue even if it has tasks in it. 303// 304// Note: If you delete a queue, a queue with the same name can’t be created 305// for 7 days. 306// 307// WARNING: Using this method may have unintended side effects if you are 308// using an App Engine queue.yaml or queue.xml file to manage your queues. 309// Read 310// Overview of Queue Management and 311// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using 312// this method. 313func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error { 314 return c.internalClient.DeleteQueue(ctx, req, opts...) 315} 316 317// PurgeQueue purges a queue by deleting all of its tasks. 318// 319// All tasks created before this method is called are permanently deleted. 320// 321// Purge operations can take up to one minute to take effect. Tasks 322// might be dispatched before the purge takes effect. A purge is irreversible. 323func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 324 return c.internalClient.PurgeQueue(ctx, req, opts...) 325} 326 327// PauseQueue pauses the queue. 328// 329// If a queue is paused then the system will stop dispatching tasks 330// until the queue is resumed via 331// ResumeQueue. Tasks can still be added 332// when the queue is paused. A queue is paused if its 333// state is PAUSED. 334func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 335 return c.internalClient.PauseQueue(ctx, req, opts...) 336} 337 338// ResumeQueue resume a queue. 339// 340// This method resumes a queue after it has been 341// PAUSED or 342// DISABLED. The state of a queue is stored 343// in the queue’s state; after calling this method it 344// will be set to RUNNING. 345// 346// WARNING: Resuming many high-QPS queues at the same time can 347// lead to target overloading. If you are resuming high-QPS 348// queues, follow the 500/50/5 pattern described in 349// Managing Cloud Tasks Scaling 350// Risks (at https://cloud.google.com/tasks/docs/manage-cloud-task-scaling). 351func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 352 return c.internalClient.ResumeQueue(ctx, req, opts...) 353} 354 355// GetIamPolicy gets the access control policy for a Queue. 356// Returns an empty policy if the resource exists and does not have a policy 357// set. 358// 359// Authorization requires the following 360// Google IAM (at https://cloud.google.com/iam) permission on the specified 361// resource parent: 362// 363// cloudtasks.queues.getIamPolicy 364func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { 365 return c.internalClient.GetIamPolicy(ctx, req, opts...) 366} 367 368// SetIamPolicy sets the access control policy for a Queue. Replaces any existing 369// policy. 370// 371// Note: The Cloud Console does not check queue-level IAM permissions yet. 372// Project-level permissions are required to use the Cloud Console. 373// 374// Authorization requires the following 375// Google IAM (at https://cloud.google.com/iam) permission on the specified 376// resource parent: 377// 378// cloudtasks.queues.setIamPolicy 379func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { 380 return c.internalClient.SetIamPolicy(ctx, req, opts...) 381} 382 383// TestIamPermissions returns permissions that a caller has on a Queue. 384// If the resource does not exist, this will return an empty set of 385// permissions, not a NOT_FOUND error. 386// 387// Note: This operation is designed to be used for building permission-aware 388// UIs and command-line tools, not for authorization checking. This operation 389// may “fail open” without warning. 390func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) { 391 return c.internalClient.TestIamPermissions(ctx, req, opts...) 392} 393 394// ListTasks lists the tasks in a queue. 395// 396// By default, only the BASIC view is retrieved 397// due to performance considerations; 398// response_view controls the 399// subset of information which is returned. 400// 401// The tasks may be returned in any order. The ordering may change at any 402// time. 403func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator { 404 return c.internalClient.ListTasks(ctx, req, opts...) 405} 406 407// GetTask gets a task. 408func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 409 return c.internalClient.GetTask(ctx, req, opts...) 410} 411 412// CreateTask creates a task and adds it to a queue. 413// 414// Tasks cannot be updated after creation; there is no UpdateTask command. 415// 416// For [App Engine queues][google.cloud.tasks.v2beta2.AppEngineHttpTarget], the maximum task size is 417// 100KB. 418// 419// For [pull queues][google.cloud.tasks.v2beta2.PullTarget], the maximum task size is 1MB. 420func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 421 return c.internalClient.CreateTask(ctx, req, opts...) 422} 423 424// DeleteTask deletes a task. 425// 426// A task can be deleted if it is scheduled or dispatched. A task 427// cannot be deleted if it has completed successfully or permanently 428// failed. 429func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error { 430 return c.internalClient.DeleteTask(ctx, req, opts...) 431} 432 433// LeaseTasks leases tasks from a pull queue for 434// lease_duration. 435// 436// This method is invoked by the worker to obtain a lease. The 437// worker must acknowledge the task via 438// AcknowledgeTask after they have 439// performed the work associated with the task. 440// 441// The payload is intended to store data that 442// the worker needs to perform the work associated with the task. To 443// return the payloads in the response, set 444// response_view to 445// FULL. 446// 447// A maximum of 10 qps of LeaseTasks 448// requests are allowed per 449// queue. RESOURCE_EXHAUSTED 450// is returned when this limit is 451// exceeded. RESOURCE_EXHAUSTED 452// is also returned when 453// max_tasks_dispatched_per_second 454// is exceeded. 455func (c *Client) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) { 456 return c.internalClient.LeaseTasks(ctx, req, opts...) 457} 458 459// AcknowledgeTask acknowledges a pull task. 460// 461// The worker, that is, the entity that 462// leased this task must call this method 463// to indicate that the work associated with the task has finished. 464// 465// The worker must acknowledge a task within the 466// lease_duration or the lease 467// will expire and the task will become available to be leased 468// again. After the task is acknowledged, it will not be returned 469// by a later LeaseTasks, 470// GetTask, or 471// ListTasks. 472func (c *Client) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error { 473 return c.internalClient.AcknowledgeTask(ctx, req, opts...) 474} 475 476// RenewLease renew the current lease of a pull task. 477// 478// The worker can use this method to extend the lease by a new 479// duration, starting from now. The new task lease will be 480// returned in the task’s schedule_time. 481func (c *Client) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 482 return c.internalClient.RenewLease(ctx, req, opts...) 483} 484 485// CancelLease cancel a pull task’s lease. 486// 487// The worker can use this method to cancel a task’s lease by 488// setting its schedule_time to now. This will 489// make the task available to be leased to the next caller of 490// LeaseTasks. 491func (c *Client) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 492 return c.internalClient.CancelLease(ctx, req, opts...) 493} 494 495// RunTask forces a task to run now. 496// 497// When this method is called, Cloud Tasks will dispatch the task, even if 498// the task is already running, the queue has reached its RateLimits or 499// is PAUSED. 500// 501// This command is meant to be used for manual debugging. For 502// example, RunTask can be used to retry a failed 503// task after a fix has been made or to manually force a task to be 504// dispatched now. 505// 506// The dispatched task is returned. That is, the task that is returned 507// contains the status after the task is dispatched but 508// before the task is received by its target. 509// 510// If Cloud Tasks receives a successful response from the task’s 511// target, then the task will be deleted; otherwise the task’s 512// schedule_time will be reset to the time that 513// RunTask was called plus the retry delay specified 514// in the queue’s RetryConfig. 515// 516// RunTask returns 517// NOT_FOUND when it is called on a 518// task that has already succeeded or permanently failed. 519// 520// RunTask cannot be called on a 521// [pull task][google.cloud.tasks.v2beta2.PullMessage]. 522func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 523 return c.internalClient.RunTask(ctx, req, opts...) 524} 525 526// gRPCClient is a client for interacting with Cloud Tasks API over gRPC transport. 527// 528// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. 529type gRPCClient struct { 530 // Connection pool of gRPC connections to the service. 531 connPool gtransport.ConnPool 532 533 // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE 534 disableDeadlines bool 535 536 // Points back to the CallOptions field of the containing Client 537 CallOptions **CallOptions 538 539 // The gRPC API client. 540 client taskspb.CloudTasksClient 541 542 // The x-goog-* metadata to be sent with each request. 543 xGoogMetadata metadata.MD 544} 545 546// NewClient creates a new cloud tasks client based on gRPC. 547// The returned client must be Closed when it is done being used to clean up its underlying connections. 548// 549// Cloud Tasks allows developers to manage the execution of background 550// work in their applications. 551func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { 552 clientOpts := defaultGRPCClientOptions() 553 if newClientHook != nil { 554 hookOpts, err := newClientHook(ctx, clientHookParams{}) 555 if err != nil { 556 return nil, err 557 } 558 clientOpts = append(clientOpts, hookOpts...) 559 } 560 561 disableDeadlines, err := checkDisableDeadlines() 562 if err != nil { 563 return nil, err 564 } 565 566 connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) 567 if err != nil { 568 return nil, err 569 } 570 client := Client{CallOptions: defaultCallOptions()} 571 572 c := &gRPCClient{ 573 connPool: connPool, 574 disableDeadlines: disableDeadlines, 575 client: taskspb.NewCloudTasksClient(connPool), 576 CallOptions: &client.CallOptions, 577 } 578 c.setGoogleClientInfo() 579 580 client.internalClient = c 581 582 return &client, nil 583} 584 585// Connection returns a connection to the API service. 586// 587// Deprecated. 588func (c *gRPCClient) Connection() *grpc.ClientConn { 589 return c.connPool.Conn() 590} 591 592// setGoogleClientInfo sets the name and version of the application in 593// the `x-goog-api-client` header passed on each request. Intended for 594// use by Google-written clients. 595func (c *gRPCClient) setGoogleClientInfo(keyval ...string) { 596 kv := append([]string{"gl-go", versionGo()}, keyval...) 597 kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) 598 c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) 599} 600 601// Close closes the connection to the API service. The user should invoke this when 602// the client is no longer required. 603func (c *gRPCClient) Close() error { 604 return c.connPool.Close() 605} 606 607func (c *gRPCClient) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator { 608 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 609 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 610 opts = append((*c.CallOptions).ListQueues[0:len((*c.CallOptions).ListQueues):len((*c.CallOptions).ListQueues)], opts...) 611 it := &QueueIterator{} 612 req = proto.Clone(req).(*taskspb.ListQueuesRequest) 613 it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Queue, string, error) { 614 resp := &taskspb.ListQueuesResponse{} 615 if pageToken != "" { 616 req.PageToken = pageToken 617 } 618 if pageSize > math.MaxInt32 { 619 req.PageSize = math.MaxInt32 620 } else if pageSize != 0 { 621 req.PageSize = int32(pageSize) 622 } 623 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 624 var err error 625 resp, err = c.client.ListQueues(ctx, req, settings.GRPC...) 626 return err 627 }, opts...) 628 if err != nil { 629 return nil, "", err 630 } 631 632 it.Response = resp 633 return resp.GetQueues(), resp.GetNextPageToken(), nil 634 } 635 fetch := func(pageSize int, pageToken string) (string, error) { 636 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 637 if err != nil { 638 return "", err 639 } 640 it.items = append(it.items, items...) 641 return nextPageToken, nil 642 } 643 644 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 645 it.pageInfo.MaxSize = int(req.GetPageSize()) 646 it.pageInfo.Token = req.GetPageToken() 647 648 return it 649} 650 651func (c *gRPCClient) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 652 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 653 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 654 defer cancel() 655 ctx = cctx 656 } 657 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 658 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 659 opts = append((*c.CallOptions).GetQueue[0:len((*c.CallOptions).GetQueue):len((*c.CallOptions).GetQueue)], opts...) 660 var resp *taskspb.Queue 661 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 662 var err error 663 resp, err = c.client.GetQueue(ctx, req, settings.GRPC...) 664 return err 665 }, opts...) 666 if err != nil { 667 return nil, err 668 } 669 return resp, nil 670} 671 672func (c *gRPCClient) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 673 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 674 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 675 defer cancel() 676 ctx = cctx 677 } 678 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 679 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 680 opts = append((*c.CallOptions).CreateQueue[0:len((*c.CallOptions).CreateQueue):len((*c.CallOptions).CreateQueue)], opts...) 681 var resp *taskspb.Queue 682 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 683 var err error 684 resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...) 685 return err 686 }, opts...) 687 if err != nil { 688 return nil, err 689 } 690 return resp, nil 691} 692 693func (c *gRPCClient) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 694 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 695 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 696 defer cancel() 697 ctx = cctx 698 } 699 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", url.QueryEscape(req.GetQueue().GetName()))) 700 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 701 opts = append((*c.CallOptions).UpdateQueue[0:len((*c.CallOptions).UpdateQueue):len((*c.CallOptions).UpdateQueue)], opts...) 702 var resp *taskspb.Queue 703 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 704 var err error 705 resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...) 706 return err 707 }, opts...) 708 if err != nil { 709 return nil, err 710 } 711 return resp, nil 712} 713 714func (c *gRPCClient) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error { 715 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 716 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 717 defer cancel() 718 ctx = cctx 719 } 720 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 721 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 722 opts = append((*c.CallOptions).DeleteQueue[0:len((*c.CallOptions).DeleteQueue):len((*c.CallOptions).DeleteQueue)], opts...) 723 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 724 var err error 725 _, err = c.client.DeleteQueue(ctx, req, settings.GRPC...) 726 return err 727 }, opts...) 728 return err 729} 730 731func (c *gRPCClient) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 732 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 733 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 734 defer cancel() 735 ctx = cctx 736 } 737 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 738 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 739 opts = append((*c.CallOptions).PurgeQueue[0:len((*c.CallOptions).PurgeQueue):len((*c.CallOptions).PurgeQueue)], opts...) 740 var resp *taskspb.Queue 741 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 742 var err error 743 resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...) 744 return err 745 }, opts...) 746 if err != nil { 747 return nil, err 748 } 749 return resp, nil 750} 751 752func (c *gRPCClient) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 753 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 754 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 755 defer cancel() 756 ctx = cctx 757 } 758 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 759 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 760 opts = append((*c.CallOptions).PauseQueue[0:len((*c.CallOptions).PauseQueue):len((*c.CallOptions).PauseQueue)], opts...) 761 var resp *taskspb.Queue 762 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 763 var err error 764 resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...) 765 return err 766 }, opts...) 767 if err != nil { 768 return nil, err 769 } 770 return resp, nil 771} 772 773func (c *gRPCClient) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) { 774 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 775 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 776 defer cancel() 777 ctx = cctx 778 } 779 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 780 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 781 opts = append((*c.CallOptions).ResumeQueue[0:len((*c.CallOptions).ResumeQueue):len((*c.CallOptions).ResumeQueue)], opts...) 782 var resp *taskspb.Queue 783 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 784 var err error 785 resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...) 786 return err 787 }, opts...) 788 if err != nil { 789 return nil, err 790 } 791 return resp, nil 792} 793 794func (c *gRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { 795 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 796 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 797 defer cancel() 798 ctx = cctx 799 } 800 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) 801 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 802 opts = append((*c.CallOptions).GetIamPolicy[0:len((*c.CallOptions).GetIamPolicy):len((*c.CallOptions).GetIamPolicy)], opts...) 803 var resp *iampb.Policy 804 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 805 var err error 806 resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...) 807 return err 808 }, opts...) 809 if err != nil { 810 return nil, err 811 } 812 return resp, nil 813} 814 815func (c *gRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) { 816 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 817 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 818 defer cancel() 819 ctx = cctx 820 } 821 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) 822 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 823 opts = append((*c.CallOptions).SetIamPolicy[0:len((*c.CallOptions).SetIamPolicy):len((*c.CallOptions).SetIamPolicy)], opts...) 824 var resp *iampb.Policy 825 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 826 var err error 827 resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...) 828 return err 829 }, opts...) 830 if err != nil { 831 return nil, err 832 } 833 return resp, nil 834} 835 836func (c *gRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) { 837 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 838 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 839 defer cancel() 840 ctx = cctx 841 } 842 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource()))) 843 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 844 opts = append((*c.CallOptions).TestIamPermissions[0:len((*c.CallOptions).TestIamPermissions):len((*c.CallOptions).TestIamPermissions)], opts...) 845 var resp *iampb.TestIamPermissionsResponse 846 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 847 var err error 848 resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...) 849 return err 850 }, opts...) 851 if err != nil { 852 return nil, err 853 } 854 return resp, nil 855} 856 857func (c *gRPCClient) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator { 858 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 859 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 860 opts = append((*c.CallOptions).ListTasks[0:len((*c.CallOptions).ListTasks):len((*c.CallOptions).ListTasks)], opts...) 861 it := &TaskIterator{} 862 req = proto.Clone(req).(*taskspb.ListTasksRequest) 863 it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Task, string, error) { 864 resp := &taskspb.ListTasksResponse{} 865 if pageToken != "" { 866 req.PageToken = pageToken 867 } 868 if pageSize > math.MaxInt32 { 869 req.PageSize = math.MaxInt32 870 } else if pageSize != 0 { 871 req.PageSize = int32(pageSize) 872 } 873 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 874 var err error 875 resp, err = c.client.ListTasks(ctx, req, settings.GRPC...) 876 return err 877 }, opts...) 878 if err != nil { 879 return nil, "", err 880 } 881 882 it.Response = resp 883 return resp.GetTasks(), resp.GetNextPageToken(), nil 884 } 885 fetch := func(pageSize int, pageToken string) (string, error) { 886 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 887 if err != nil { 888 return "", err 889 } 890 it.items = append(it.items, items...) 891 return nextPageToken, nil 892 } 893 894 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 895 it.pageInfo.MaxSize = int(req.GetPageSize()) 896 it.pageInfo.Token = req.GetPageToken() 897 898 return it 899} 900 901func (c *gRPCClient) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 902 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 903 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 904 defer cancel() 905 ctx = cctx 906 } 907 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 908 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 909 opts = append((*c.CallOptions).GetTask[0:len((*c.CallOptions).GetTask):len((*c.CallOptions).GetTask)], opts...) 910 var resp *taskspb.Task 911 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 912 var err error 913 resp, err = c.client.GetTask(ctx, req, settings.GRPC...) 914 return err 915 }, opts...) 916 if err != nil { 917 return nil, err 918 } 919 return resp, nil 920} 921 922func (c *gRPCClient) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 923 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 924 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 925 defer cancel() 926 ctx = cctx 927 } 928 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 929 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 930 opts = append((*c.CallOptions).CreateTask[0:len((*c.CallOptions).CreateTask):len((*c.CallOptions).CreateTask)], opts...) 931 var resp *taskspb.Task 932 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 933 var err error 934 resp, err = c.client.CreateTask(ctx, req, settings.GRPC...) 935 return err 936 }, opts...) 937 if err != nil { 938 return nil, err 939 } 940 return resp, nil 941} 942 943func (c *gRPCClient) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error { 944 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 945 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 946 defer cancel() 947 ctx = cctx 948 } 949 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 950 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 951 opts = append((*c.CallOptions).DeleteTask[0:len((*c.CallOptions).DeleteTask):len((*c.CallOptions).DeleteTask)], opts...) 952 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 953 var err error 954 _, err = c.client.DeleteTask(ctx, req, settings.GRPC...) 955 return err 956 }, opts...) 957 return err 958} 959 960func (c *gRPCClient) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) { 961 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 962 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 963 defer cancel() 964 ctx = cctx 965 } 966 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 967 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 968 opts = append((*c.CallOptions).LeaseTasks[0:len((*c.CallOptions).LeaseTasks):len((*c.CallOptions).LeaseTasks)], opts...) 969 var resp *taskspb.LeaseTasksResponse 970 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 971 var err error 972 resp, err = c.client.LeaseTasks(ctx, req, settings.GRPC...) 973 return err 974 }, opts...) 975 if err != nil { 976 return nil, err 977 } 978 return resp, nil 979} 980 981func (c *gRPCClient) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error { 982 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 983 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 984 defer cancel() 985 ctx = cctx 986 } 987 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 988 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 989 opts = append((*c.CallOptions).AcknowledgeTask[0:len((*c.CallOptions).AcknowledgeTask):len((*c.CallOptions).AcknowledgeTask)], opts...) 990 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 991 var err error 992 _, err = c.client.AcknowledgeTask(ctx, req, settings.GRPC...) 993 return err 994 }, opts...) 995 return err 996} 997 998func (c *gRPCClient) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 999 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 1000 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 1001 defer cancel() 1002 ctx = cctx 1003 } 1004 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 1005 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 1006 opts = append((*c.CallOptions).RenewLease[0:len((*c.CallOptions).RenewLease):len((*c.CallOptions).RenewLease)], opts...) 1007 var resp *taskspb.Task 1008 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 1009 var err error 1010 resp, err = c.client.RenewLease(ctx, req, settings.GRPC...) 1011 return err 1012 }, opts...) 1013 if err != nil { 1014 return nil, err 1015 } 1016 return resp, nil 1017} 1018 1019func (c *gRPCClient) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 1020 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 1021 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 1022 defer cancel() 1023 ctx = cctx 1024 } 1025 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 1026 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 1027 opts = append((*c.CallOptions).CancelLease[0:len((*c.CallOptions).CancelLease):len((*c.CallOptions).CancelLease)], opts...) 1028 var resp *taskspb.Task 1029 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 1030 var err error 1031 resp, err = c.client.CancelLease(ctx, req, settings.GRPC...) 1032 return err 1033 }, opts...) 1034 if err != nil { 1035 return nil, err 1036 } 1037 return resp, nil 1038} 1039 1040func (c *gRPCClient) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) { 1041 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 1042 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 1043 defer cancel() 1044 ctx = cctx 1045 } 1046 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 1047 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 1048 opts = append((*c.CallOptions).RunTask[0:len((*c.CallOptions).RunTask):len((*c.CallOptions).RunTask)], opts...) 1049 var resp *taskspb.Task 1050 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 1051 var err error 1052 resp, err = c.client.RunTask(ctx, req, settings.GRPC...) 1053 return err 1054 }, opts...) 1055 if err != nil { 1056 return nil, err 1057 } 1058 return resp, nil 1059} 1060 1061// QueueIterator manages a stream of *taskspb.Queue. 1062type QueueIterator struct { 1063 items []*taskspb.Queue 1064 pageInfo *iterator.PageInfo 1065 nextFunc func() error 1066 1067 // Response is the raw response for the current page. 1068 // It must be cast to the RPC response type. 1069 // Calling Next() or InternalFetch() updates this value. 1070 Response interface{} 1071 1072 // InternalFetch is for use by the Google Cloud Libraries only. 1073 // It is not part of the stable interface of this package. 1074 // 1075 // InternalFetch returns results from a single call to the underlying RPC. 1076 // The number of results is no greater than pageSize. 1077 // If there are no more results, nextPageToken is empty and err is nil. 1078 InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error) 1079} 1080 1081// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 1082func (it *QueueIterator) PageInfo() *iterator.PageInfo { 1083 return it.pageInfo 1084} 1085 1086// Next returns the next result. Its second return value is iterator.Done if there are no more 1087// results. Once Next returns Done, all subsequent calls will return Done. 1088func (it *QueueIterator) Next() (*taskspb.Queue, error) { 1089 var item *taskspb.Queue 1090 if err := it.nextFunc(); err != nil { 1091 return item, err 1092 } 1093 item = it.items[0] 1094 it.items = it.items[1:] 1095 return item, nil 1096} 1097 1098func (it *QueueIterator) bufLen() int { 1099 return len(it.items) 1100} 1101 1102func (it *QueueIterator) takeBuf() interface{} { 1103 b := it.items 1104 it.items = nil 1105 return b 1106} 1107 1108// TaskIterator manages a stream of *taskspb.Task. 1109type TaskIterator struct { 1110 items []*taskspb.Task 1111 pageInfo *iterator.PageInfo 1112 nextFunc func() error 1113 1114 // Response is the raw response for the current page. 1115 // It must be cast to the RPC response type. 1116 // Calling Next() or InternalFetch() updates this value. 1117 Response interface{} 1118 1119 // InternalFetch is for use by the Google Cloud Libraries only. 1120 // It is not part of the stable interface of this package. 1121 // 1122 // InternalFetch returns results from a single call to the underlying RPC. 1123 // The number of results is no greater than pageSize. 1124 // If there are no more results, nextPageToken is empty and err is nil. 1125 InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error) 1126} 1127 1128// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 1129func (it *TaskIterator) PageInfo() *iterator.PageInfo { 1130 return it.pageInfo 1131} 1132 1133// Next returns the next result. Its second return value is iterator.Done if there are no more 1134// results. Once Next returns Done, all subsequent calls will return Done. 1135func (it *TaskIterator) Next() (*taskspb.Task, error) { 1136 var item *taskspb.Task 1137 if err := it.nextFunc(); err != nil { 1138 return item, err 1139 } 1140 item = it.items[0] 1141 it.items = it.items[1:] 1142 return item, nil 1143} 1144 1145func (it *TaskIterator) bufLen() int { 1146 return len(it.items) 1147} 1148 1149func (it *TaskIterator) takeBuf() interface{} { 1150 b := it.items 1151 it.items = nil 1152 return b 1153} 1154