go.temporal.io/server@v1.23.0/common/persistence/persistence_retryable_clients.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inp. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inp. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package persistence 26 27 import ( 28 "context" 29 30 commonpb "go.temporal.io/api/common/v1" 31 32 "go.temporal.io/server/common/backoff" 33 ) 34 35 type ( 36 shardRetryablePersistenceClient struct { 37 persistence ShardManager 38 policy backoff.RetryPolicy 39 isRetryable backoff.IsRetryable 40 } 41 42 executionRetryablePersistenceClient struct { 43 persistence ExecutionManager 44 policy backoff.RetryPolicy 45 isRetryable backoff.IsRetryable 46 } 47 48 taskRetryablePersistenceClient struct { 49 persistence TaskManager 50 policy backoff.RetryPolicy 51 isRetryable backoff.IsRetryable 52 } 53 54 metadataRetryablePersistenceClient struct { 55 persistence MetadataManager 56 policy backoff.RetryPolicy 57 isRetryable backoff.IsRetryable 58 } 59 60 clusterMetadataRetryablePersistenceClient struct { 61 persistence ClusterMetadataManager 62 policy backoff.RetryPolicy 63 isRetryable backoff.IsRetryable 64 } 65 66 queueRetryablePersistenceClient struct { 67 persistence Queue 68 policy backoff.RetryPolicy 69 isRetryable backoff.IsRetryable 70 } 71 ) 72 73 var _ ShardManager = (*shardRetryablePersistenceClient)(nil) 74 var _ ExecutionManager = (*executionRetryablePersistenceClient)(nil) 75 var _ TaskManager = (*taskRetryablePersistenceClient)(nil) 76 var _ MetadataManager = (*metadataRetryablePersistenceClient)(nil) 77 var _ ClusterMetadataManager = (*clusterMetadataRetryablePersistenceClient)(nil) 78 var _ Queue = (*queueRetryablePersistenceClient)(nil) 79 80 // NewShardPersistenceRetryableClient creates a client to manage shards 81 func NewShardPersistenceRetryableClient( 82 persistence ShardManager, 83 policy backoff.RetryPolicy, 84 isRetryable backoff.IsRetryable, 85 ) ShardManager { 86 return &shardRetryablePersistenceClient{ 87 persistence: persistence, 88 policy: policy, 89 isRetryable: isRetryable, 90 } 91 } 92 93 // NewExecutionPersistenceRetryableClient creates a client to manage executions 94 func NewExecutionPersistenceRetryableClient( 95 persistence ExecutionManager, 96 policy backoff.RetryPolicy, 97 isRetryable backoff.IsRetryable, 98 ) ExecutionManager { 99 return &executionRetryablePersistenceClient{ 100 persistence: persistence, 101 policy: policy, 102 isRetryable: isRetryable, 103 } 104 } 105 106 // NewTaskPersistenceRetryableClient creates a client to manage tasks 107 func NewTaskPersistenceRetryableClient( 108 persistence TaskManager, 109 policy backoff.RetryPolicy, 110 isRetryable backoff.IsRetryable, 111 ) TaskManager { 112 return &taskRetryablePersistenceClient{ 113 persistence: persistence, 114 policy: policy, 115 isRetryable: isRetryable, 116 } 117 } 118 119 // NewMetadataPersistenceRetryableClient creates a MetadataManager client to manage metadata 120 func NewMetadataPersistenceRetryableClient( 121 persistence MetadataManager, 122 policy backoff.RetryPolicy, 123 isRetryable backoff.IsRetryable, 124 ) MetadataManager { 125 return &metadataRetryablePersistenceClient{ 126 persistence: persistence, 127 policy: policy, 128 isRetryable: isRetryable, 129 } 130 } 131 132 // NewClusterMetadataPersistenceRetryableClient creates a MetadataManager client to manage metadata 133 func NewClusterMetadataPersistenceRetryableClient( 134 persistence ClusterMetadataManager, 135 policy backoff.RetryPolicy, 136 isRetryable backoff.IsRetryable, 137 ) ClusterMetadataManager { 138 return &clusterMetadataRetryablePersistenceClient{ 139 persistence: persistence, 140 policy: policy, 141 isRetryable: isRetryable, 142 } 143 } 144 145 // NewQueuePersistenceRetryableClient creates a client to manage queue 146 func NewQueuePersistenceRetryableClient( 147 persistence Queue, 148 policy backoff.RetryPolicy, 149 isRetryable backoff.IsRetryable, 150 ) Queue { 151 return &queueRetryablePersistenceClient{ 152 persistence: persistence, 153 policy: policy, 154 isRetryable: isRetryable, 155 } 156 } 157 158 func (p *shardRetryablePersistenceClient) GetName() string { 159 return p.persistence.GetName() 160 } 161 162 func (p *shardRetryablePersistenceClient) GetOrCreateShard( 163 ctx context.Context, 164 request *GetOrCreateShardRequest, 165 ) (*GetOrCreateShardResponse, error) { 166 var response *GetOrCreateShardResponse 167 op := func(ctx context.Context) error { 168 var err error 169 response, err = p.persistence.GetOrCreateShard(ctx, request) 170 return err 171 } 172 173 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 174 return response, err 175 } 176 177 func (p *shardRetryablePersistenceClient) UpdateShard( 178 ctx context.Context, 179 request *UpdateShardRequest, 180 ) error { 181 op := func(ctx context.Context) error { 182 return p.persistence.UpdateShard(ctx, request) 183 } 184 185 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 186 } 187 188 func (p *shardRetryablePersistenceClient) AssertShardOwnership( 189 ctx context.Context, 190 request *AssertShardOwnershipRequest, 191 ) error { 192 op := func(ctx context.Context) error { 193 return p.persistence.AssertShardOwnership(ctx, request) 194 } 195 196 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 197 } 198 199 func (p *shardRetryablePersistenceClient) Close() { 200 p.persistence.Close() 201 } 202 203 func (p *executionRetryablePersistenceClient) GetName() string { 204 return p.persistence.GetName() 205 } 206 207 func (p *executionRetryablePersistenceClient) GetHistoryBranchUtil() HistoryBranchUtil { 208 return p.persistence.GetHistoryBranchUtil() 209 } 210 211 func (p *executionRetryablePersistenceClient) CreateWorkflowExecution( 212 ctx context.Context, 213 request *CreateWorkflowExecutionRequest, 214 ) (*CreateWorkflowExecutionResponse, error) { 215 var response *CreateWorkflowExecutionResponse 216 op := func(ctx context.Context) error { 217 var err error 218 response, err = p.persistence.CreateWorkflowExecution(ctx, request) 219 return err 220 } 221 222 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 223 return response, err 224 } 225 226 func (p *executionRetryablePersistenceClient) GetWorkflowExecution( 227 ctx context.Context, 228 request *GetWorkflowExecutionRequest, 229 ) (*GetWorkflowExecutionResponse, error) { 230 var response *GetWorkflowExecutionResponse 231 op := func(ctx context.Context) error { 232 var err error 233 response, err = p.persistence.GetWorkflowExecution(ctx, request) 234 return err 235 } 236 237 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 238 return response, err 239 } 240 241 func (p *executionRetryablePersistenceClient) SetWorkflowExecution( 242 ctx context.Context, 243 request *SetWorkflowExecutionRequest, 244 ) (*SetWorkflowExecutionResponse, error) { 245 var response *SetWorkflowExecutionResponse 246 op := func(ctx context.Context) error { 247 var err error 248 response, err = p.persistence.SetWorkflowExecution(ctx, request) 249 return err 250 } 251 252 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 253 return response, err 254 } 255 256 func (p *executionRetryablePersistenceClient) UpdateWorkflowExecution( 257 ctx context.Context, 258 request *UpdateWorkflowExecutionRequest, 259 ) (*UpdateWorkflowExecutionResponse, error) { 260 var response *UpdateWorkflowExecutionResponse 261 op := func(ctx context.Context) error { 262 var err error 263 response, err = p.persistence.UpdateWorkflowExecution(ctx, request) 264 return err 265 } 266 267 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 268 return response, err 269 } 270 271 func (p *executionRetryablePersistenceClient) ConflictResolveWorkflowExecution( 272 ctx context.Context, 273 request *ConflictResolveWorkflowExecutionRequest, 274 ) (*ConflictResolveWorkflowExecutionResponse, error) { 275 var response *ConflictResolveWorkflowExecutionResponse 276 op := func(ctx context.Context) error { 277 var err error 278 response, err = p.persistence.ConflictResolveWorkflowExecution(ctx, request) 279 return err 280 } 281 282 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 283 return response, err 284 } 285 286 func (p *executionRetryablePersistenceClient) DeleteWorkflowExecution( 287 ctx context.Context, 288 request *DeleteWorkflowExecutionRequest, 289 ) error { 290 op := func(ctx context.Context) error { 291 return p.persistence.DeleteWorkflowExecution(ctx, request) 292 } 293 294 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 295 } 296 297 func (p *executionRetryablePersistenceClient) DeleteCurrentWorkflowExecution( 298 ctx context.Context, 299 request *DeleteCurrentWorkflowExecutionRequest, 300 ) error { 301 op := func(ctx context.Context) error { 302 return p.persistence.DeleteCurrentWorkflowExecution(ctx, request) 303 } 304 305 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 306 } 307 308 func (p *executionRetryablePersistenceClient) GetCurrentExecution( 309 ctx context.Context, 310 request *GetCurrentExecutionRequest, 311 ) (*GetCurrentExecutionResponse, error) { 312 var response *GetCurrentExecutionResponse 313 op := func(ctx context.Context) error { 314 var err error 315 response, err = p.persistence.GetCurrentExecution(ctx, request) 316 return err 317 } 318 319 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 320 return response, err 321 } 322 323 func (p *executionRetryablePersistenceClient) ListConcreteExecutions( 324 ctx context.Context, 325 request *ListConcreteExecutionsRequest, 326 ) (*ListConcreteExecutionsResponse, error) { 327 var response *ListConcreteExecutionsResponse 328 op := func(ctx context.Context) error { 329 var err error 330 response, err = p.persistence.ListConcreteExecutions(ctx, request) 331 return err 332 } 333 334 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 335 return response, err 336 } 337 338 func (p *executionRetryablePersistenceClient) RegisterHistoryTaskReader( 339 ctx context.Context, 340 request *RegisterHistoryTaskReaderRequest, 341 ) error { 342 // hint methods don't actually hint DB, retry won't help 343 return p.persistence.RegisterHistoryTaskReader(ctx, request) 344 } 345 346 func (p *executionRetryablePersistenceClient) UnregisterHistoryTaskReader( 347 ctx context.Context, 348 request *UnregisterHistoryTaskReaderRequest, 349 ) { 350 // hint methods don't actually hint DB, retry won't help 351 p.persistence.UnregisterHistoryTaskReader(ctx, request) 352 } 353 354 func (p *executionRetryablePersistenceClient) UpdateHistoryTaskReaderProgress( 355 ctx context.Context, 356 request *UpdateHistoryTaskReaderProgressRequest, 357 ) { 358 // hint methods don't actually hint DB, retry won't help 359 p.persistence.UpdateHistoryTaskReaderProgress(ctx, request) 360 } 361 362 func (p *executionRetryablePersistenceClient) AddHistoryTasks( 363 ctx context.Context, 364 request *AddHistoryTasksRequest, 365 ) error { 366 op := func(ctx context.Context) error { 367 return p.persistence.AddHistoryTasks(ctx, request) 368 } 369 370 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 371 } 372 373 func (p *executionRetryablePersistenceClient) GetHistoryTasks( 374 ctx context.Context, 375 request *GetHistoryTasksRequest, 376 ) (*GetHistoryTasksResponse, error) { 377 var response *GetHistoryTasksResponse 378 op := func(ctx context.Context) error { 379 var err error 380 response, err = p.persistence.GetHistoryTasks(ctx, request) 381 return err 382 } 383 384 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 385 return response, err 386 } 387 388 func (p *executionRetryablePersistenceClient) CompleteHistoryTask( 389 ctx context.Context, 390 request *CompleteHistoryTaskRequest, 391 ) error { 392 op := func(ctx context.Context) error { 393 return p.persistence.CompleteHistoryTask(ctx, request) 394 } 395 396 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 397 } 398 399 func (p *executionRetryablePersistenceClient) RangeCompleteHistoryTasks( 400 ctx context.Context, 401 request *RangeCompleteHistoryTasksRequest, 402 ) error { 403 op := func(ctx context.Context) error { 404 return p.persistence.RangeCompleteHistoryTasks(ctx, request) 405 } 406 407 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 408 } 409 410 func (p *executionRetryablePersistenceClient) PutReplicationTaskToDLQ( 411 ctx context.Context, 412 request *PutReplicationTaskToDLQRequest, 413 ) error { 414 op := func(ctx context.Context) error { 415 return p.persistence.PutReplicationTaskToDLQ(ctx, request) 416 } 417 418 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 419 } 420 421 func (p *executionRetryablePersistenceClient) GetReplicationTasksFromDLQ( 422 ctx context.Context, 423 request *GetReplicationTasksFromDLQRequest, 424 ) (*GetHistoryTasksResponse, error) { 425 var response *GetHistoryTasksResponse 426 op := func(ctx context.Context) error { 427 var err error 428 response, err = p.persistence.GetReplicationTasksFromDLQ(ctx, request) 429 return err 430 } 431 432 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 433 return response, err 434 } 435 436 func (p *executionRetryablePersistenceClient) DeleteReplicationTaskFromDLQ( 437 ctx context.Context, 438 request *DeleteReplicationTaskFromDLQRequest, 439 ) error { 440 op := func(ctx context.Context) error { 441 return p.persistence.DeleteReplicationTaskFromDLQ(ctx, request) 442 } 443 444 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 445 } 446 447 func (p *executionRetryablePersistenceClient) RangeDeleteReplicationTaskFromDLQ( 448 ctx context.Context, 449 request *RangeDeleteReplicationTaskFromDLQRequest, 450 ) error { 451 op := func(ctx context.Context) error { 452 return p.persistence.RangeDeleteReplicationTaskFromDLQ(ctx, request) 453 } 454 455 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 456 } 457 458 func (p *executionRetryablePersistenceClient) IsReplicationDLQEmpty( 459 ctx context.Context, 460 request *GetReplicationTasksFromDLQRequest, 461 ) (bool, error) { 462 var isEmpty bool 463 op := func(ctx context.Context) error { 464 var err error 465 isEmpty, err = p.persistence.IsReplicationDLQEmpty(ctx, request) 466 return err 467 } 468 469 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 470 return isEmpty, err 471 } 472 473 // AppendHistoryNodes add a node to history node table 474 func (p *executionRetryablePersistenceClient) AppendHistoryNodes( 475 ctx context.Context, 476 request *AppendHistoryNodesRequest, 477 ) (*AppendHistoryNodesResponse, error) { 478 var response *AppendHistoryNodesResponse 479 op := func(ctx context.Context) error { 480 var err error 481 response, err = p.persistence.AppendHistoryNodes(ctx, request) 482 return err 483 } 484 485 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 486 return response, err 487 } 488 489 // AppendRawHistoryNodes add a node to history node table 490 func (p *executionRetryablePersistenceClient) AppendRawHistoryNodes( 491 ctx context.Context, 492 request *AppendRawHistoryNodesRequest, 493 ) (*AppendHistoryNodesResponse, error) { 494 var response *AppendHistoryNodesResponse 495 op := func(ctx context.Context) error { 496 var err error 497 response, err = p.persistence.AppendRawHistoryNodes(ctx, request) 498 return err 499 } 500 501 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 502 return response, err 503 } 504 505 // ReadHistoryBranch returns history node data for a branch 506 func (p *executionRetryablePersistenceClient) ReadHistoryBranch( 507 ctx context.Context, 508 request *ReadHistoryBranchRequest, 509 ) (*ReadHistoryBranchResponse, error) { 510 var response *ReadHistoryBranchResponse 511 op := func(ctx context.Context) error { 512 var err error 513 response, err = p.persistence.ReadHistoryBranch(ctx, request) 514 return err 515 } 516 517 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 518 return response, err 519 } 520 521 // ReadHistoryBranch returns history node data for a branch 522 func (p *executionRetryablePersistenceClient) ReadHistoryBranchReverse( 523 ctx context.Context, 524 request *ReadHistoryBranchReverseRequest, 525 ) (*ReadHistoryBranchReverseResponse, error) { 526 var response *ReadHistoryBranchReverseResponse 527 op := func(ctx context.Context) error { 528 var err error 529 response, err = p.persistence.ReadHistoryBranchReverse(ctx, request) 530 return err 531 } 532 533 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 534 return response, err 535 } 536 537 // ReadHistoryBranchByBatch returns history node data for a branch 538 func (p *executionRetryablePersistenceClient) ReadHistoryBranchByBatch( 539 ctx context.Context, 540 request *ReadHistoryBranchRequest, 541 ) (*ReadHistoryBranchByBatchResponse, error) { 542 var response *ReadHistoryBranchByBatchResponse 543 op := func(ctx context.Context) error { 544 var err error 545 response, err = p.persistence.ReadHistoryBranchByBatch(ctx, request) 546 return err 547 } 548 549 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 550 return response, err 551 } 552 553 // ReadHistoryBranchByBatch returns history node data for a branch 554 func (p *executionRetryablePersistenceClient) ReadRawHistoryBranch( 555 ctx context.Context, 556 request *ReadHistoryBranchRequest, 557 ) (*ReadRawHistoryBranchResponse, error) { 558 var response *ReadRawHistoryBranchResponse 559 op := func(ctx context.Context) error { 560 var err error 561 response, err = p.persistence.ReadRawHistoryBranch(ctx, request) 562 return err 563 } 564 565 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 566 return response, err 567 } 568 569 // ForkHistoryBranch forks a new branch from a old branch 570 func (p *executionRetryablePersistenceClient) ForkHistoryBranch( 571 ctx context.Context, 572 request *ForkHistoryBranchRequest, 573 ) (*ForkHistoryBranchResponse, error) { 574 var response *ForkHistoryBranchResponse 575 op := func(ctx context.Context) error { 576 var err error 577 response, err = p.persistence.ForkHistoryBranch(ctx, request) 578 return err 579 } 580 581 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 582 return response, err 583 } 584 585 // DeleteHistoryBranch removes a branch 586 func (p *executionRetryablePersistenceClient) DeleteHistoryBranch( 587 ctx context.Context, 588 request *DeleteHistoryBranchRequest, 589 ) error { 590 op := func(ctx context.Context) error { 591 return p.persistence.DeleteHistoryBranch(ctx, request) 592 } 593 594 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 595 } 596 597 // TrimHistoryBranch trims a branch 598 func (p *executionRetryablePersistenceClient) TrimHistoryBranch( 599 ctx context.Context, 600 request *TrimHistoryBranchRequest, 601 ) (*TrimHistoryBranchResponse, error) { 602 var response *TrimHistoryBranchResponse 603 op := func(ctx context.Context) error { 604 var err error 605 response, err = p.persistence.TrimHistoryBranch(ctx, request) 606 return err 607 } 608 609 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 610 return response, err 611 } 612 613 // GetHistoryTree returns all branch information of a tree 614 func (p *executionRetryablePersistenceClient) GetHistoryTree( 615 ctx context.Context, 616 request *GetHistoryTreeRequest, 617 ) (*GetHistoryTreeResponse, error) { 618 var response *GetHistoryTreeResponse 619 op := func(ctx context.Context) error { 620 var err error 621 response, err = p.persistence.GetHistoryTree(ctx, request) 622 return err 623 } 624 625 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 626 return response, err 627 } 628 629 func (p *executionRetryablePersistenceClient) GetAllHistoryTreeBranches( 630 ctx context.Context, 631 request *GetAllHistoryTreeBranchesRequest, 632 ) (*GetAllHistoryTreeBranchesResponse, error) { 633 var response *GetAllHistoryTreeBranchesResponse 634 op := func(ctx context.Context) error { 635 var err error 636 response, err = p.persistence.GetAllHistoryTreeBranches(ctx, request) 637 return err 638 } 639 640 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 641 return response, err 642 } 643 644 func (p *executionRetryablePersistenceClient) Close() { 645 p.persistence.Close() 646 } 647 648 func (p *taskRetryablePersistenceClient) GetName() string { 649 return p.persistence.GetName() 650 } 651 652 func (p *taskRetryablePersistenceClient) CreateTasks( 653 ctx context.Context, 654 request *CreateTasksRequest, 655 ) (*CreateTasksResponse, error) { 656 var response *CreateTasksResponse 657 op := func(ctx context.Context) error { 658 var err error 659 response, err = p.persistence.CreateTasks(ctx, request) 660 return err 661 } 662 663 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 664 return response, err 665 } 666 667 func (p *taskRetryablePersistenceClient) GetTasks( 668 ctx context.Context, 669 request *GetTasksRequest, 670 ) (*GetTasksResponse, error) { 671 var response *GetTasksResponse 672 op := func(ctx context.Context) error { 673 var err error 674 response, err = p.persistence.GetTasks(ctx, request) 675 return err 676 } 677 678 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 679 return response, err 680 } 681 682 func (p *taskRetryablePersistenceClient) CompleteTask( 683 ctx context.Context, 684 request *CompleteTaskRequest, 685 ) error { 686 op := func(ctx context.Context) error { 687 return p.persistence.CompleteTask(ctx, request) 688 } 689 690 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 691 } 692 693 func (p *taskRetryablePersistenceClient) CompleteTasksLessThan( 694 ctx context.Context, 695 request *CompleteTasksLessThanRequest, 696 ) (int, error) { 697 var response int 698 op := func(ctx context.Context) error { 699 var err error 700 response, err = p.persistence.CompleteTasksLessThan(ctx, request) 701 return err 702 } 703 704 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 705 return response, err 706 } 707 708 func (p *taskRetryablePersistenceClient) CreateTaskQueue( 709 ctx context.Context, 710 request *CreateTaskQueueRequest, 711 ) (*CreateTaskQueueResponse, error) { 712 var response *CreateTaskQueueResponse 713 op := func(ctx context.Context) error { 714 var err error 715 response, err = p.persistence.CreateTaskQueue(ctx, request) 716 return err 717 } 718 719 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 720 return response, err 721 } 722 723 func (p *taskRetryablePersistenceClient) UpdateTaskQueue( 724 ctx context.Context, 725 request *UpdateTaskQueueRequest, 726 ) (*UpdateTaskQueueResponse, error) { 727 var response *UpdateTaskQueueResponse 728 op := func(ctx context.Context) error { 729 var err error 730 response, err = p.persistence.UpdateTaskQueue(ctx, request) 731 return err 732 } 733 734 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 735 return response, err 736 } 737 738 func (p *taskRetryablePersistenceClient) GetTaskQueue( 739 ctx context.Context, 740 request *GetTaskQueueRequest, 741 ) (*GetTaskQueueResponse, error) { 742 var response *GetTaskQueueResponse 743 op := func(ctx context.Context) error { 744 var err error 745 response, err = p.persistence.GetTaskQueue(ctx, request) 746 return err 747 } 748 749 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 750 return response, err 751 } 752 753 func (p *taskRetryablePersistenceClient) ListTaskQueue( 754 ctx context.Context, 755 request *ListTaskQueueRequest, 756 ) (*ListTaskQueueResponse, error) { 757 var response *ListTaskQueueResponse 758 op := func(ctx context.Context) error { 759 var err error 760 response, err = p.persistence.ListTaskQueue(ctx, request) 761 return err 762 } 763 764 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 765 return response, err 766 } 767 768 func (p *taskRetryablePersistenceClient) DeleteTaskQueue( 769 ctx context.Context, 770 request *DeleteTaskQueueRequest, 771 ) error { 772 op := func(ctx context.Context) error { 773 return p.persistence.DeleteTaskQueue(ctx, request) 774 } 775 776 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 777 } 778 779 func (p *taskRetryablePersistenceClient) GetTaskQueueUserData( 780 ctx context.Context, 781 request *GetTaskQueueUserDataRequest, 782 ) (*GetTaskQueueUserDataResponse, error) { 783 var response *GetTaskQueueUserDataResponse 784 op := func(ctx context.Context) error { 785 var err error 786 response, err = p.persistence.GetTaskQueueUserData(ctx, request) 787 return err 788 } 789 790 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 791 return response, err 792 } 793 794 func (p *taskRetryablePersistenceClient) UpdateTaskQueueUserData( 795 ctx context.Context, 796 request *UpdateTaskQueueUserDataRequest, 797 ) error { 798 op := func(ctx context.Context) error { 799 return p.persistence.UpdateTaskQueueUserData(ctx, request) 800 } 801 802 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 803 return err 804 } 805 806 func (p *taskRetryablePersistenceClient) ListTaskQueueUserDataEntries( 807 ctx context.Context, 808 request *ListTaskQueueUserDataEntriesRequest, 809 ) (*ListTaskQueueUserDataEntriesResponse, error) { 810 var response *ListTaskQueueUserDataEntriesResponse 811 op := func(ctx context.Context) error { 812 var err error 813 response, err = p.persistence.ListTaskQueueUserDataEntries(ctx, request) 814 return err 815 } 816 817 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 818 return response, err 819 } 820 821 func (p *taskRetryablePersistenceClient) GetTaskQueuesByBuildId(ctx context.Context, request *GetTaskQueuesByBuildIdRequest) ([]string, error) { 822 var response []string 823 op := func(ctx context.Context) error { 824 var err error 825 response, err = p.persistence.GetTaskQueuesByBuildId(ctx, request) 826 return err 827 } 828 829 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 830 return response, err 831 } 832 833 func (p *taskRetryablePersistenceClient) CountTaskQueuesByBuildId(ctx context.Context, request *CountTaskQueuesByBuildIdRequest) (int, error) { 834 var response int 835 op := func(ctx context.Context) error { 836 var err error 837 response, err = p.persistence.CountTaskQueuesByBuildId(ctx, request) 838 return err 839 } 840 841 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 842 return response, err 843 } 844 845 func (p *taskRetryablePersistenceClient) Close() { 846 p.persistence.Close() 847 } 848 849 func (p *metadataRetryablePersistenceClient) GetName() string { 850 return p.persistence.GetName() 851 } 852 853 func (p *metadataRetryablePersistenceClient) CreateNamespace( 854 ctx context.Context, 855 request *CreateNamespaceRequest, 856 ) (*CreateNamespaceResponse, error) { 857 var response *CreateNamespaceResponse 858 op := func(ctx context.Context) error { 859 var err error 860 response, err = p.persistence.CreateNamespace(ctx, request) 861 return err 862 } 863 864 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 865 return response, err 866 } 867 868 func (p *metadataRetryablePersistenceClient) GetNamespace( 869 ctx context.Context, 870 request *GetNamespaceRequest, 871 ) (*GetNamespaceResponse, error) { 872 var response *GetNamespaceResponse 873 op := func(ctx context.Context) error { 874 var err error 875 response, err = p.persistence.GetNamespace(ctx, request) 876 return err 877 } 878 879 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 880 return response, err 881 } 882 883 func (p *metadataRetryablePersistenceClient) UpdateNamespace( 884 ctx context.Context, 885 request *UpdateNamespaceRequest, 886 ) error { 887 op := func(ctx context.Context) error { 888 return p.persistence.UpdateNamespace(ctx, request) 889 } 890 891 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 892 } 893 894 func (p *metadataRetryablePersistenceClient) RenameNamespace( 895 ctx context.Context, 896 request *RenameNamespaceRequest, 897 ) error { 898 op := func(ctx context.Context) error { 899 return p.persistence.RenameNamespace(ctx, request) 900 } 901 902 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 903 } 904 905 func (p *metadataRetryablePersistenceClient) DeleteNamespace( 906 ctx context.Context, 907 request *DeleteNamespaceRequest, 908 ) error { 909 op := func(ctx context.Context) error { 910 return p.persistence.DeleteNamespace(ctx, request) 911 } 912 913 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 914 } 915 916 func (p *metadataRetryablePersistenceClient) DeleteNamespaceByName( 917 ctx context.Context, 918 request *DeleteNamespaceByNameRequest, 919 ) error { 920 op := func(ctx context.Context) error { 921 return p.persistence.DeleteNamespaceByName(ctx, request) 922 } 923 924 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 925 } 926 927 func (p *metadataRetryablePersistenceClient) ListNamespaces( 928 ctx context.Context, 929 request *ListNamespacesRequest, 930 ) (*ListNamespacesResponse, error) { 931 var response *ListNamespacesResponse 932 op := func(ctx context.Context) error { 933 var err error 934 response, err = p.persistence.ListNamespaces(ctx, request) 935 return err 936 } 937 938 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 939 return response, err 940 } 941 942 func (p *metadataRetryablePersistenceClient) GetMetadata( 943 ctx context.Context, 944 ) (*GetMetadataResponse, error) { 945 var response *GetMetadataResponse 946 op := func(ctx context.Context) error { 947 var err error 948 response, err = p.persistence.GetMetadata(ctx) 949 return err 950 } 951 952 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 953 return response, err 954 } 955 956 func (p *metadataRetryablePersistenceClient) InitializeSystemNamespaces( 957 ctx context.Context, 958 currentClusterName string, 959 ) error { 960 op := func(ctx context.Context) error { 961 return p.persistence.InitializeSystemNamespaces(ctx, currentClusterName) 962 } 963 964 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 965 } 966 967 func (p *metadataRetryablePersistenceClient) Close() { 968 p.persistence.Close() 969 } 970 971 func (p *clusterMetadataRetryablePersistenceClient) GetName() string { 972 return p.persistence.GetName() 973 } 974 975 func (p *clusterMetadataRetryablePersistenceClient) GetClusterMembers( 976 ctx context.Context, 977 request *GetClusterMembersRequest, 978 ) (*GetClusterMembersResponse, error) { 979 var response *GetClusterMembersResponse 980 op := func(ctx context.Context) error { 981 var err error 982 response, err = p.persistence.GetClusterMembers(ctx, request) 983 return err 984 } 985 986 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 987 return response, err 988 } 989 990 func (p *clusterMetadataRetryablePersistenceClient) UpsertClusterMembership( 991 ctx context.Context, 992 request *UpsertClusterMembershipRequest, 993 ) error { 994 op := func(ctx context.Context) error { 995 return p.persistence.UpsertClusterMembership(ctx, request) 996 } 997 998 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 999 } 1000 1001 func (p *clusterMetadataRetryablePersistenceClient) PruneClusterMembership( 1002 ctx context.Context, 1003 request *PruneClusterMembershipRequest, 1004 ) error { 1005 op := func(ctx context.Context) error { 1006 return p.persistence.PruneClusterMembership(ctx, request) 1007 } 1008 1009 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1010 } 1011 1012 func (p *clusterMetadataRetryablePersistenceClient) ListClusterMetadata( 1013 ctx context.Context, 1014 request *ListClusterMetadataRequest, 1015 ) (*ListClusterMetadataResponse, error) { 1016 var response *ListClusterMetadataResponse 1017 op := func(ctx context.Context) error { 1018 var err error 1019 response, err = p.persistence.ListClusterMetadata(ctx, request) 1020 return err 1021 } 1022 1023 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1024 return response, err 1025 } 1026 1027 func (p *clusterMetadataRetryablePersistenceClient) GetCurrentClusterMetadata( 1028 ctx context.Context, 1029 ) (*GetClusterMetadataResponse, error) { 1030 var response *GetClusterMetadataResponse 1031 op := func(ctx context.Context) error { 1032 var err error 1033 response, err = p.persistence.GetCurrentClusterMetadata(ctx) 1034 return err 1035 } 1036 1037 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1038 return response, err 1039 } 1040 1041 func (p *clusterMetadataRetryablePersistenceClient) GetClusterMetadata( 1042 ctx context.Context, 1043 request *GetClusterMetadataRequest, 1044 ) (*GetClusterMetadataResponse, error) { 1045 var response *GetClusterMetadataResponse 1046 op := func(ctx context.Context) error { 1047 var err error 1048 response, err = p.persistence.GetClusterMetadata(ctx, request) 1049 return err 1050 } 1051 1052 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1053 return response, err 1054 } 1055 1056 func (p *clusterMetadataRetryablePersistenceClient) SaveClusterMetadata( 1057 ctx context.Context, 1058 request *SaveClusterMetadataRequest, 1059 ) (bool, error) { 1060 var response bool 1061 op := func(ctx context.Context) error { 1062 var err error 1063 response, err = p.persistence.SaveClusterMetadata(ctx, request) 1064 return err 1065 } 1066 1067 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1068 return response, err 1069 } 1070 1071 func (p *clusterMetadataRetryablePersistenceClient) DeleteClusterMetadata( 1072 ctx context.Context, 1073 request *DeleteClusterMetadataRequest, 1074 ) error { 1075 op := func(ctx context.Context) error { 1076 return p.persistence.DeleteClusterMetadata(ctx, request) 1077 } 1078 1079 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1080 } 1081 1082 func (p *clusterMetadataRetryablePersistenceClient) Close() { 1083 p.persistence.Close() 1084 } 1085 1086 func (p *queueRetryablePersistenceClient) Init( 1087 ctx context.Context, 1088 blob *commonpb.DataBlob, 1089 ) error { 1090 op := func(ctx context.Context) error { 1091 return p.persistence.Init(ctx, blob) 1092 } 1093 1094 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1095 } 1096 1097 func (p *queueRetryablePersistenceClient) EnqueueMessage( 1098 ctx context.Context, 1099 blob *commonpb.DataBlob, 1100 ) error { 1101 op := func(ctx context.Context) error { 1102 return p.persistence.EnqueueMessage(ctx, blob) 1103 } 1104 1105 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1106 } 1107 1108 func (p *queueRetryablePersistenceClient) ReadMessages( 1109 ctx context.Context, 1110 lastMessageID int64, 1111 maxCount int, 1112 ) ([]*QueueMessage, error) { 1113 var response []*QueueMessage 1114 op := func(ctx context.Context) error { 1115 var err error 1116 response, err = p.persistence.ReadMessages(ctx, lastMessageID, maxCount) 1117 return err 1118 } 1119 1120 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1121 return response, err 1122 } 1123 1124 func (p *queueRetryablePersistenceClient) UpdateAckLevel( 1125 ctx context.Context, 1126 metadata *InternalQueueMetadata, 1127 ) error { 1128 op := func(ctx context.Context) error { 1129 return p.persistence.UpdateAckLevel(ctx, metadata) 1130 } 1131 1132 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1133 } 1134 1135 func (p *queueRetryablePersistenceClient) GetAckLevels( 1136 ctx context.Context, 1137 ) (*InternalQueueMetadata, error) { 1138 var response *InternalQueueMetadata 1139 op := func(ctx context.Context) error { 1140 var err error 1141 response, err = p.persistence.GetAckLevels(ctx) 1142 return err 1143 } 1144 1145 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1146 return response, err 1147 } 1148 1149 func (p *queueRetryablePersistenceClient) DeleteMessagesBefore( 1150 ctx context.Context, 1151 messageID int64, 1152 ) error { 1153 op := func(ctx context.Context) error { 1154 return p.persistence.DeleteMessagesBefore(ctx, messageID) 1155 } 1156 1157 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1158 } 1159 1160 func (p *queueRetryablePersistenceClient) EnqueueMessageToDLQ( 1161 ctx context.Context, 1162 blob *commonpb.DataBlob, 1163 ) (int64, error) { 1164 var response int64 1165 op := func(ctx context.Context) error { 1166 var err error 1167 response, err = p.persistence.EnqueueMessageToDLQ(ctx, blob) 1168 return err 1169 } 1170 1171 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1172 return response, err 1173 } 1174 1175 func (p *queueRetryablePersistenceClient) ReadMessagesFromDLQ( 1176 ctx context.Context, 1177 firstMessageID int64, 1178 lastMessageID int64, 1179 pageSize int, 1180 pageToken []byte, 1181 ) ([]*QueueMessage, []byte, error) { 1182 var messages []*QueueMessage 1183 var nextPageToken []byte 1184 op := func(ctx context.Context) error { 1185 var err error 1186 messages, nextPageToken, err = p.persistence.ReadMessagesFromDLQ(ctx, firstMessageID, lastMessageID, pageSize, pageToken) 1187 return err 1188 } 1189 1190 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1191 return messages, nextPageToken, err 1192 } 1193 1194 func (p *queueRetryablePersistenceClient) RangeDeleteMessagesFromDLQ( 1195 ctx context.Context, 1196 firstMessageID int64, 1197 lastMessageID int64, 1198 ) error { 1199 op := func(ctx context.Context) error { 1200 return p.persistence.RangeDeleteMessagesFromDLQ(ctx, firstMessageID, lastMessageID) 1201 } 1202 1203 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1204 } 1205 func (p *queueRetryablePersistenceClient) UpdateDLQAckLevel( 1206 ctx context.Context, 1207 metadata *InternalQueueMetadata, 1208 ) error { 1209 op := func(ctx context.Context) error { 1210 return p.persistence.UpdateDLQAckLevel(ctx, metadata) 1211 } 1212 1213 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1214 } 1215 1216 func (p *queueRetryablePersistenceClient) GetDLQAckLevels( 1217 ctx context.Context, 1218 ) (*InternalQueueMetadata, error) { 1219 var response *InternalQueueMetadata 1220 op := func(ctx context.Context) error { 1221 var err error 1222 response, err = p.persistence.GetDLQAckLevels(ctx) 1223 return err 1224 } 1225 1226 err := backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1227 return response, err 1228 } 1229 1230 func (p *queueRetryablePersistenceClient) DeleteMessageFromDLQ( 1231 ctx context.Context, 1232 messageID int64, 1233 ) error { 1234 op := func(ctx context.Context) error { 1235 return p.persistence.DeleteMessageFromDLQ(ctx, messageID) 1236 } 1237 1238 return backoff.ThrottleRetryContext(ctx, op, p.policy, p.isRetryable) 1239 } 1240 1241 func (p *queueRetryablePersistenceClient) Close() { 1242 p.persistence.Close() 1243 }