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 datatransfer 18 19import ( 20 "context" 21 "fmt" 22 "math" 23 "net/url" 24 "time" 25 26 "github.com/golang/protobuf/proto" 27 gax "github.com/googleapis/gax-go/v2" 28 "google.golang.org/api/iterator" 29 "google.golang.org/api/option" 30 "google.golang.org/api/option/internaloption" 31 gtransport "google.golang.org/api/transport/grpc" 32 datatransferpb "google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1" 33 "google.golang.org/grpc" 34 "google.golang.org/grpc/codes" 35 "google.golang.org/grpc/metadata" 36) 37 38var newClientHook clientHook 39 40// CallOptions contains the retry settings for each method of Client. 41type CallOptions struct { 42 GetDataSource []gax.CallOption 43 ListDataSources []gax.CallOption 44 CreateTransferConfig []gax.CallOption 45 UpdateTransferConfig []gax.CallOption 46 DeleteTransferConfig []gax.CallOption 47 GetTransferConfig []gax.CallOption 48 ListTransferConfigs []gax.CallOption 49 ScheduleTransferRuns []gax.CallOption 50 StartManualTransferRuns []gax.CallOption 51 GetTransferRun []gax.CallOption 52 DeleteTransferRun []gax.CallOption 53 ListTransferRuns []gax.CallOption 54 ListTransferLogs []gax.CallOption 55 CheckValidCreds []gax.CallOption 56} 57 58func defaultClientOptions() []option.ClientOption { 59 return []option.ClientOption{ 60 internaloption.WithDefaultEndpoint("bigquerydatatransfer.googleapis.com:443"), 61 internaloption.WithDefaultMTLSEndpoint("bigquerydatatransfer.mtls.googleapis.com:443"), 62 internaloption.WithDefaultAudience("https://bigquerydatatransfer.googleapis.com/"), 63 internaloption.WithDefaultScopes(DefaultAuthScopes()...), 64 option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), 65 option.WithGRPCDialOption(grpc.WithDefaultCallOptions( 66 grpc.MaxCallRecvMsgSize(math.MaxInt32))), 67 } 68} 69 70func defaultCallOptions() *CallOptions { 71 return &CallOptions{ 72 GetDataSource: []gax.CallOption{ 73 gax.WithRetry(func() gax.Retryer { 74 return gax.OnCodes([]codes.Code{ 75 codes.Unavailable, 76 codes.DeadlineExceeded, 77 }, gax.Backoff{ 78 Initial: 100 * time.Millisecond, 79 Max: 60000 * time.Millisecond, 80 Multiplier: 1.30, 81 }) 82 }), 83 }, 84 ListDataSources: []gax.CallOption{ 85 gax.WithRetry(func() gax.Retryer { 86 return gax.OnCodes([]codes.Code{ 87 codes.Unavailable, 88 codes.DeadlineExceeded, 89 }, gax.Backoff{ 90 Initial: 100 * time.Millisecond, 91 Max: 60000 * time.Millisecond, 92 Multiplier: 1.30, 93 }) 94 }), 95 }, 96 CreateTransferConfig: []gax.CallOption{}, 97 UpdateTransferConfig: []gax.CallOption{}, 98 DeleteTransferConfig: []gax.CallOption{ 99 gax.WithRetry(func() gax.Retryer { 100 return gax.OnCodes([]codes.Code{ 101 codes.Unavailable, 102 codes.DeadlineExceeded, 103 }, gax.Backoff{ 104 Initial: 100 * time.Millisecond, 105 Max: 60000 * time.Millisecond, 106 Multiplier: 1.30, 107 }) 108 }), 109 }, 110 GetTransferConfig: []gax.CallOption{ 111 gax.WithRetry(func() gax.Retryer { 112 return gax.OnCodes([]codes.Code{ 113 codes.Unavailable, 114 codes.DeadlineExceeded, 115 }, gax.Backoff{ 116 Initial: 100 * time.Millisecond, 117 Max: 60000 * time.Millisecond, 118 Multiplier: 1.30, 119 }) 120 }), 121 }, 122 ListTransferConfigs: []gax.CallOption{ 123 gax.WithRetry(func() gax.Retryer { 124 return gax.OnCodes([]codes.Code{ 125 codes.Unavailable, 126 codes.DeadlineExceeded, 127 }, gax.Backoff{ 128 Initial: 100 * time.Millisecond, 129 Max: 60000 * time.Millisecond, 130 Multiplier: 1.30, 131 }) 132 }), 133 }, 134 ScheduleTransferRuns: []gax.CallOption{}, 135 StartManualTransferRuns: []gax.CallOption{}, 136 GetTransferRun: []gax.CallOption{ 137 gax.WithRetry(func() gax.Retryer { 138 return gax.OnCodes([]codes.Code{ 139 codes.Unavailable, 140 codes.DeadlineExceeded, 141 }, gax.Backoff{ 142 Initial: 100 * time.Millisecond, 143 Max: 60000 * time.Millisecond, 144 Multiplier: 1.30, 145 }) 146 }), 147 }, 148 DeleteTransferRun: []gax.CallOption{ 149 gax.WithRetry(func() gax.Retryer { 150 return gax.OnCodes([]codes.Code{ 151 codes.Unavailable, 152 codes.DeadlineExceeded, 153 }, gax.Backoff{ 154 Initial: 100 * time.Millisecond, 155 Max: 60000 * time.Millisecond, 156 Multiplier: 1.30, 157 }) 158 }), 159 }, 160 ListTransferRuns: []gax.CallOption{ 161 gax.WithRetry(func() gax.Retryer { 162 return gax.OnCodes([]codes.Code{ 163 codes.Unavailable, 164 codes.DeadlineExceeded, 165 }, gax.Backoff{ 166 Initial: 100 * time.Millisecond, 167 Max: 60000 * time.Millisecond, 168 Multiplier: 1.30, 169 }) 170 }), 171 }, 172 ListTransferLogs: []gax.CallOption{ 173 gax.WithRetry(func() gax.Retryer { 174 return gax.OnCodes([]codes.Code{ 175 codes.Unavailable, 176 codes.DeadlineExceeded, 177 }, gax.Backoff{ 178 Initial: 100 * time.Millisecond, 179 Max: 60000 * time.Millisecond, 180 Multiplier: 1.30, 181 }) 182 }), 183 }, 184 CheckValidCreds: []gax.CallOption{ 185 gax.WithRetry(func() gax.Retryer { 186 return gax.OnCodes([]codes.Code{ 187 codes.Unavailable, 188 codes.DeadlineExceeded, 189 }, gax.Backoff{ 190 Initial: 100 * time.Millisecond, 191 Max: 60000 * time.Millisecond, 192 Multiplier: 1.30, 193 }) 194 }), 195 }, 196 } 197} 198 199// Client is a client for interacting with BigQuery Data Transfer API. 200// 201// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. 202type Client struct { 203 // Connection pool of gRPC connections to the service. 204 connPool gtransport.ConnPool 205 206 // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE 207 disableDeadlines bool 208 209 // The gRPC API client. 210 client datatransferpb.DataTransferServiceClient 211 212 // The call options for this service. 213 CallOptions *CallOptions 214 215 // The x-goog-* metadata to be sent with each request. 216 xGoogMetadata metadata.MD 217} 218 219// NewClient creates a new data transfer service client. 220// 221// The Google BigQuery Data Transfer Service API enables BigQuery users to 222// configure the transfer of their data from other Google Products into 223// BigQuery. This service contains methods that are end user exposed. It backs 224// up the frontend. 225func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { 226 clientOpts := defaultClientOptions() 227 228 if newClientHook != nil { 229 hookOpts, err := newClientHook(ctx, clientHookParams{}) 230 if err != nil { 231 return nil, err 232 } 233 clientOpts = append(clientOpts, hookOpts...) 234 } 235 236 disableDeadlines, err := checkDisableDeadlines() 237 if err != nil { 238 return nil, err 239 } 240 241 connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) 242 if err != nil { 243 return nil, err 244 } 245 c := &Client{ 246 connPool: connPool, 247 disableDeadlines: disableDeadlines, 248 CallOptions: defaultCallOptions(), 249 250 client: datatransferpb.NewDataTransferServiceClient(connPool), 251 } 252 c.setGoogleClientInfo() 253 254 return c, nil 255} 256 257// Connection returns a connection to the API service. 258// 259// Deprecated. 260func (c *Client) Connection() *grpc.ClientConn { 261 return c.connPool.Conn() 262} 263 264// Close closes the connection to the API service. The user should invoke this when 265// the client is no longer required. 266func (c *Client) Close() error { 267 return c.connPool.Close() 268} 269 270// setGoogleClientInfo sets the name and version of the application in 271// the `x-goog-api-client` header passed on each request. Intended for 272// use by Google-written clients. 273func (c *Client) setGoogleClientInfo(keyval ...string) { 274 kv := append([]string{"gl-go", versionGo()}, keyval...) 275 kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) 276 c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) 277} 278 279// GetDataSource retrieves a supported data source and returns its settings, 280// which can be used for UI rendering. 281func (c *Client) GetDataSource(ctx context.Context, req *datatransferpb.GetDataSourceRequest, opts ...gax.CallOption) (*datatransferpb.DataSource, error) { 282 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 283 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 284 defer cancel() 285 ctx = cctx 286 } 287 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 288 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 289 opts = append(c.CallOptions.GetDataSource[0:len(c.CallOptions.GetDataSource):len(c.CallOptions.GetDataSource)], opts...) 290 var resp *datatransferpb.DataSource 291 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 292 var err error 293 resp, err = c.client.GetDataSource(ctx, req, settings.GRPC...) 294 return err 295 }, opts...) 296 if err != nil { 297 return nil, err 298 } 299 return resp, nil 300} 301 302// ListDataSources lists supported data sources and returns their settings, 303// which can be used for UI rendering. 304func (c *Client) ListDataSources(ctx context.Context, req *datatransferpb.ListDataSourcesRequest, opts ...gax.CallOption) *DataSourceIterator { 305 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 306 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 307 opts = append(c.CallOptions.ListDataSources[0:len(c.CallOptions.ListDataSources):len(c.CallOptions.ListDataSources)], opts...) 308 it := &DataSourceIterator{} 309 req = proto.Clone(req).(*datatransferpb.ListDataSourcesRequest) 310 it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.DataSource, string, error) { 311 var resp *datatransferpb.ListDataSourcesResponse 312 req.PageToken = pageToken 313 if pageSize > math.MaxInt32 { 314 req.PageSize = math.MaxInt32 315 } else { 316 req.PageSize = int32(pageSize) 317 } 318 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 319 var err error 320 resp, err = c.client.ListDataSources(ctx, req, settings.GRPC...) 321 return err 322 }, opts...) 323 if err != nil { 324 return nil, "", err 325 } 326 327 it.Response = resp 328 return resp.GetDataSources(), resp.GetNextPageToken(), nil 329 } 330 fetch := func(pageSize int, pageToken string) (string, error) { 331 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 332 if err != nil { 333 return "", err 334 } 335 it.items = append(it.items, items...) 336 return nextPageToken, nil 337 } 338 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 339 it.pageInfo.MaxSize = int(req.GetPageSize()) 340 it.pageInfo.Token = req.GetPageToken() 341 return it 342} 343 344// CreateTransferConfig creates a new data transfer configuration. 345func (c *Client) CreateTransferConfig(ctx context.Context, req *datatransferpb.CreateTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) { 346 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 347 cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond) 348 defer cancel() 349 ctx = cctx 350 } 351 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 352 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 353 opts = append(c.CallOptions.CreateTransferConfig[0:len(c.CallOptions.CreateTransferConfig):len(c.CallOptions.CreateTransferConfig)], opts...) 354 var resp *datatransferpb.TransferConfig 355 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 356 var err error 357 resp, err = c.client.CreateTransferConfig(ctx, req, settings.GRPC...) 358 return err 359 }, opts...) 360 if err != nil { 361 return nil, err 362 } 363 return resp, nil 364} 365 366// UpdateTransferConfig updates a data transfer configuration. 367// All fields must be set, even if they are not updated. 368func (c *Client) UpdateTransferConfig(ctx context.Context, req *datatransferpb.UpdateTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) { 369 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 370 cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond) 371 defer cancel() 372 ctx = cctx 373 } 374 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "transfer_config.name", url.QueryEscape(req.GetTransferConfig().GetName()))) 375 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 376 opts = append(c.CallOptions.UpdateTransferConfig[0:len(c.CallOptions.UpdateTransferConfig):len(c.CallOptions.UpdateTransferConfig)], opts...) 377 var resp *datatransferpb.TransferConfig 378 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 379 var err error 380 resp, err = c.client.UpdateTransferConfig(ctx, req, settings.GRPC...) 381 return err 382 }, opts...) 383 if err != nil { 384 return nil, err 385 } 386 return resp, nil 387} 388 389// DeleteTransferConfig deletes a data transfer configuration, 390// including any associated transfer runs and logs. 391func (c *Client) DeleteTransferConfig(ctx context.Context, req *datatransferpb.DeleteTransferConfigRequest, opts ...gax.CallOption) error { 392 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 393 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 394 defer cancel() 395 ctx = cctx 396 } 397 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 398 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 399 opts = append(c.CallOptions.DeleteTransferConfig[0:len(c.CallOptions.DeleteTransferConfig):len(c.CallOptions.DeleteTransferConfig)], opts...) 400 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 401 var err error 402 _, err = c.client.DeleteTransferConfig(ctx, req, settings.GRPC...) 403 return err 404 }, opts...) 405 return err 406} 407 408// GetTransferConfig returns information about a data transfer config. 409func (c *Client) GetTransferConfig(ctx context.Context, req *datatransferpb.GetTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) { 410 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 411 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 412 defer cancel() 413 ctx = cctx 414 } 415 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 416 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 417 opts = append(c.CallOptions.GetTransferConfig[0:len(c.CallOptions.GetTransferConfig):len(c.CallOptions.GetTransferConfig)], opts...) 418 var resp *datatransferpb.TransferConfig 419 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 420 var err error 421 resp, err = c.client.GetTransferConfig(ctx, req, settings.GRPC...) 422 return err 423 }, opts...) 424 if err != nil { 425 return nil, err 426 } 427 return resp, nil 428} 429 430// ListTransferConfigs returns information about all data transfers in the project. 431func (c *Client) ListTransferConfigs(ctx context.Context, req *datatransferpb.ListTransferConfigsRequest, opts ...gax.CallOption) *TransferConfigIterator { 432 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 433 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 434 opts = append(c.CallOptions.ListTransferConfigs[0:len(c.CallOptions.ListTransferConfigs):len(c.CallOptions.ListTransferConfigs)], opts...) 435 it := &TransferConfigIterator{} 436 req = proto.Clone(req).(*datatransferpb.ListTransferConfigsRequest) 437 it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferConfig, string, error) { 438 var resp *datatransferpb.ListTransferConfigsResponse 439 req.PageToken = pageToken 440 if pageSize > math.MaxInt32 { 441 req.PageSize = math.MaxInt32 442 } else { 443 req.PageSize = int32(pageSize) 444 } 445 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 446 var err error 447 resp, err = c.client.ListTransferConfigs(ctx, req, settings.GRPC...) 448 return err 449 }, opts...) 450 if err != nil { 451 return nil, "", err 452 } 453 454 it.Response = resp 455 return resp.GetTransferConfigs(), resp.GetNextPageToken(), nil 456 } 457 fetch := func(pageSize int, pageToken string) (string, error) { 458 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 459 if err != nil { 460 return "", err 461 } 462 it.items = append(it.items, items...) 463 return nextPageToken, nil 464 } 465 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 466 it.pageInfo.MaxSize = int(req.GetPageSize()) 467 it.pageInfo.Token = req.GetPageToken() 468 return it 469} 470 471// ScheduleTransferRuns creates transfer runs for a time range [start_time, end_time]. 472// For each date - or whatever granularity the data source supports - in the 473// range, one transfer run is created. 474// Note that runs are created per UTC time in the time range. 475// DEPRECATED: use StartManualTransferRuns instead. 476func (c *Client) ScheduleTransferRuns(ctx context.Context, req *datatransferpb.ScheduleTransferRunsRequest, opts ...gax.CallOption) (*datatransferpb.ScheduleTransferRunsResponse, error) { 477 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 478 cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond) 479 defer cancel() 480 ctx = cctx 481 } 482 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 483 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 484 opts = append(c.CallOptions.ScheduleTransferRuns[0:len(c.CallOptions.ScheduleTransferRuns):len(c.CallOptions.ScheduleTransferRuns)], opts...) 485 var resp *datatransferpb.ScheduleTransferRunsResponse 486 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 487 var err error 488 resp, err = c.client.ScheduleTransferRuns(ctx, req, settings.GRPC...) 489 return err 490 }, opts...) 491 if err != nil { 492 return nil, err 493 } 494 return resp, nil 495} 496 497// StartManualTransferRuns start manual transfer runs to be executed now with schedule_time equal to 498// current time. The transfer runs can be created for a time range where the 499// run_time is between start_time (inclusive) and end_time (exclusive), or for 500// a specific run_time. 501func (c *Client) StartManualTransferRuns(ctx context.Context, req *datatransferpb.StartManualTransferRunsRequest, opts ...gax.CallOption) (*datatransferpb.StartManualTransferRunsResponse, error) { 502 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 503 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 504 opts = append(c.CallOptions.StartManualTransferRuns[0:len(c.CallOptions.StartManualTransferRuns):len(c.CallOptions.StartManualTransferRuns)], opts...) 505 var resp *datatransferpb.StartManualTransferRunsResponse 506 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 507 var err error 508 resp, err = c.client.StartManualTransferRuns(ctx, req, settings.GRPC...) 509 return err 510 }, opts...) 511 if err != nil { 512 return nil, err 513 } 514 return resp, nil 515} 516 517// GetTransferRun returns information about the particular transfer run. 518func (c *Client) GetTransferRun(ctx context.Context, req *datatransferpb.GetTransferRunRequest, opts ...gax.CallOption) (*datatransferpb.TransferRun, error) { 519 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 520 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 521 defer cancel() 522 ctx = cctx 523 } 524 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 525 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 526 opts = append(c.CallOptions.GetTransferRun[0:len(c.CallOptions.GetTransferRun):len(c.CallOptions.GetTransferRun)], opts...) 527 var resp *datatransferpb.TransferRun 528 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 529 var err error 530 resp, err = c.client.GetTransferRun(ctx, req, settings.GRPC...) 531 return err 532 }, opts...) 533 if err != nil { 534 return nil, err 535 } 536 return resp, nil 537} 538 539// DeleteTransferRun deletes the specified transfer run. 540func (c *Client) DeleteTransferRun(ctx context.Context, req *datatransferpb.DeleteTransferRunRequest, opts ...gax.CallOption) error { 541 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 542 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 543 defer cancel() 544 ctx = cctx 545 } 546 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 547 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 548 opts = append(c.CallOptions.DeleteTransferRun[0:len(c.CallOptions.DeleteTransferRun):len(c.CallOptions.DeleteTransferRun)], opts...) 549 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 550 var err error 551 _, err = c.client.DeleteTransferRun(ctx, req, settings.GRPC...) 552 return err 553 }, opts...) 554 return err 555} 556 557// ListTransferRuns returns information about running and completed jobs. 558func (c *Client) ListTransferRuns(ctx context.Context, req *datatransferpb.ListTransferRunsRequest, opts ...gax.CallOption) *TransferRunIterator { 559 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 560 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 561 opts = append(c.CallOptions.ListTransferRuns[0:len(c.CallOptions.ListTransferRuns):len(c.CallOptions.ListTransferRuns)], opts...) 562 it := &TransferRunIterator{} 563 req = proto.Clone(req).(*datatransferpb.ListTransferRunsRequest) 564 it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferRun, string, error) { 565 var resp *datatransferpb.ListTransferRunsResponse 566 req.PageToken = pageToken 567 if pageSize > math.MaxInt32 { 568 req.PageSize = math.MaxInt32 569 } else { 570 req.PageSize = int32(pageSize) 571 } 572 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 573 var err error 574 resp, err = c.client.ListTransferRuns(ctx, req, settings.GRPC...) 575 return err 576 }, opts...) 577 if err != nil { 578 return nil, "", err 579 } 580 581 it.Response = resp 582 return resp.GetTransferRuns(), resp.GetNextPageToken(), nil 583 } 584 fetch := func(pageSize int, pageToken string) (string, error) { 585 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 586 if err != nil { 587 return "", err 588 } 589 it.items = append(it.items, items...) 590 return nextPageToken, nil 591 } 592 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 593 it.pageInfo.MaxSize = int(req.GetPageSize()) 594 it.pageInfo.Token = req.GetPageToken() 595 return it 596} 597 598// ListTransferLogs returns user facing log messages for the data transfer run. 599func (c *Client) ListTransferLogs(ctx context.Context, req *datatransferpb.ListTransferLogsRequest, opts ...gax.CallOption) *TransferMessageIterator { 600 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 601 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 602 opts = append(c.CallOptions.ListTransferLogs[0:len(c.CallOptions.ListTransferLogs):len(c.CallOptions.ListTransferLogs)], opts...) 603 it := &TransferMessageIterator{} 604 req = proto.Clone(req).(*datatransferpb.ListTransferLogsRequest) 605 it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferMessage, string, error) { 606 var resp *datatransferpb.ListTransferLogsResponse 607 req.PageToken = pageToken 608 if pageSize > math.MaxInt32 { 609 req.PageSize = math.MaxInt32 610 } else { 611 req.PageSize = int32(pageSize) 612 } 613 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 614 var err error 615 resp, err = c.client.ListTransferLogs(ctx, req, settings.GRPC...) 616 return err 617 }, opts...) 618 if err != nil { 619 return nil, "", err 620 } 621 622 it.Response = resp 623 return resp.GetTransferMessages(), resp.GetNextPageToken(), nil 624 } 625 fetch := func(pageSize int, pageToken string) (string, error) { 626 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 627 if err != nil { 628 return "", err 629 } 630 it.items = append(it.items, items...) 631 return nextPageToken, nil 632 } 633 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 634 it.pageInfo.MaxSize = int(req.GetPageSize()) 635 it.pageInfo.Token = req.GetPageToken() 636 return it 637} 638 639// CheckValidCreds returns true if valid credentials exist for the given data source and 640// requesting user. 641// Some data sources doesn’t support service account, so we need to talk to 642// them on behalf of the end user. This API just checks whether we have OAuth 643// token for the particular user, which is a pre-requisite before user can 644// create a transfer config. 645func (c *Client) CheckValidCreds(ctx context.Context, req *datatransferpb.CheckValidCredsRequest, opts ...gax.CallOption) (*datatransferpb.CheckValidCredsResponse, error) { 646 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 647 cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond) 648 defer cancel() 649 ctx = cctx 650 } 651 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 652 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 653 opts = append(c.CallOptions.CheckValidCreds[0:len(c.CallOptions.CheckValidCreds):len(c.CallOptions.CheckValidCreds)], opts...) 654 var resp *datatransferpb.CheckValidCredsResponse 655 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 656 var err error 657 resp, err = c.client.CheckValidCreds(ctx, req, settings.GRPC...) 658 return err 659 }, opts...) 660 if err != nil { 661 return nil, err 662 } 663 return resp, nil 664} 665 666// DataSourceIterator manages a stream of *datatransferpb.DataSource. 667type DataSourceIterator struct { 668 items []*datatransferpb.DataSource 669 pageInfo *iterator.PageInfo 670 nextFunc func() error 671 672 // Response is the raw response for the current page. 673 // It must be cast to the RPC response type. 674 // Calling Next() or InternalFetch() updates this value. 675 Response interface{} 676 677 // InternalFetch is for use by the Google Cloud Libraries only. 678 // It is not part of the stable interface of this package. 679 // 680 // InternalFetch returns results from a single call to the underlying RPC. 681 // The number of results is no greater than pageSize. 682 // If there are no more results, nextPageToken is empty and err is nil. 683 InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.DataSource, nextPageToken string, err error) 684} 685 686// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 687func (it *DataSourceIterator) PageInfo() *iterator.PageInfo { 688 return it.pageInfo 689} 690 691// Next returns the next result. Its second return value is iterator.Done if there are no more 692// results. Once Next returns Done, all subsequent calls will return Done. 693func (it *DataSourceIterator) Next() (*datatransferpb.DataSource, error) { 694 var item *datatransferpb.DataSource 695 if err := it.nextFunc(); err != nil { 696 return item, err 697 } 698 item = it.items[0] 699 it.items = it.items[1:] 700 return item, nil 701} 702 703func (it *DataSourceIterator) bufLen() int { 704 return len(it.items) 705} 706 707func (it *DataSourceIterator) takeBuf() interface{} { 708 b := it.items 709 it.items = nil 710 return b 711} 712 713// TransferConfigIterator manages a stream of *datatransferpb.TransferConfig. 714type TransferConfigIterator struct { 715 items []*datatransferpb.TransferConfig 716 pageInfo *iterator.PageInfo 717 nextFunc func() error 718 719 // Response is the raw response for the current page. 720 // It must be cast to the RPC response type. 721 // Calling Next() or InternalFetch() updates this value. 722 Response interface{} 723 724 // InternalFetch is for use by the Google Cloud Libraries only. 725 // It is not part of the stable interface of this package. 726 // 727 // InternalFetch returns results from a single call to the underlying RPC. 728 // The number of results is no greater than pageSize. 729 // If there are no more results, nextPageToken is empty and err is nil. 730 InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferConfig, nextPageToken string, err error) 731} 732 733// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 734func (it *TransferConfigIterator) PageInfo() *iterator.PageInfo { 735 return it.pageInfo 736} 737 738// Next returns the next result. Its second return value is iterator.Done if there are no more 739// results. Once Next returns Done, all subsequent calls will return Done. 740func (it *TransferConfigIterator) Next() (*datatransferpb.TransferConfig, error) { 741 var item *datatransferpb.TransferConfig 742 if err := it.nextFunc(); err != nil { 743 return item, err 744 } 745 item = it.items[0] 746 it.items = it.items[1:] 747 return item, nil 748} 749 750func (it *TransferConfigIterator) bufLen() int { 751 return len(it.items) 752} 753 754func (it *TransferConfigIterator) takeBuf() interface{} { 755 b := it.items 756 it.items = nil 757 return b 758} 759 760// TransferMessageIterator manages a stream of *datatransferpb.TransferMessage. 761type TransferMessageIterator struct { 762 items []*datatransferpb.TransferMessage 763 pageInfo *iterator.PageInfo 764 nextFunc func() error 765 766 // Response is the raw response for the current page. 767 // It must be cast to the RPC response type. 768 // Calling Next() or InternalFetch() updates this value. 769 Response interface{} 770 771 // InternalFetch is for use by the Google Cloud Libraries only. 772 // It is not part of the stable interface of this package. 773 // 774 // InternalFetch returns results from a single call to the underlying RPC. 775 // The number of results is no greater than pageSize. 776 // If there are no more results, nextPageToken is empty and err is nil. 777 InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferMessage, nextPageToken string, err error) 778} 779 780// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 781func (it *TransferMessageIterator) PageInfo() *iterator.PageInfo { 782 return it.pageInfo 783} 784 785// Next returns the next result. Its second return value is iterator.Done if there are no more 786// results. Once Next returns Done, all subsequent calls will return Done. 787func (it *TransferMessageIterator) Next() (*datatransferpb.TransferMessage, error) { 788 var item *datatransferpb.TransferMessage 789 if err := it.nextFunc(); err != nil { 790 return item, err 791 } 792 item = it.items[0] 793 it.items = it.items[1:] 794 return item, nil 795} 796 797func (it *TransferMessageIterator) bufLen() int { 798 return len(it.items) 799} 800 801func (it *TransferMessageIterator) takeBuf() interface{} { 802 b := it.items 803 it.items = nil 804 return b 805} 806 807// TransferRunIterator manages a stream of *datatransferpb.TransferRun. 808type TransferRunIterator struct { 809 items []*datatransferpb.TransferRun 810 pageInfo *iterator.PageInfo 811 nextFunc func() error 812 813 // Response is the raw response for the current page. 814 // It must be cast to the RPC response type. 815 // Calling Next() or InternalFetch() updates this value. 816 Response interface{} 817 818 // InternalFetch is for use by the Google Cloud Libraries only. 819 // It is not part of the stable interface of this package. 820 // 821 // InternalFetch returns results from a single call to the underlying RPC. 822 // The number of results is no greater than pageSize. 823 // If there are no more results, nextPageToken is empty and err is nil. 824 InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferRun, nextPageToken string, err error) 825} 826 827// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 828func (it *TransferRunIterator) PageInfo() *iterator.PageInfo { 829 return it.pageInfo 830} 831 832// Next returns the next result. Its second return value is iterator.Done if there are no more 833// results. Once Next returns Done, all subsequent calls will return Done. 834func (it *TransferRunIterator) Next() (*datatransferpb.TransferRun, error) { 835 var item *datatransferpb.TransferRun 836 if err := it.nextFunc(); err != nil { 837 return item, err 838 } 839 item = it.items[0] 840 it.items = it.items[1:] 841 return item, nil 842} 843 844func (it *TransferRunIterator) bufLen() int { 845 return len(it.items) 846} 847 848func (it *TransferRunIterator) takeBuf() interface{} { 849 b := it.items 850 it.items = nil 851 return b 852} 853