| 610 | REGISTER_TASKFUNC(FinishFullBackupTaskFunc); |
| 611 | |
| 612 | struct EraseLogRangeTaskFunc : TaskFuncBase { |
| 613 | static StringRef name; |
| 614 | static constexpr uint32_t version = 1; |
| 615 | |
| 616 | StringRef getName() const override { return name; }; |
| 617 | |
| 618 | Future<Void> execute(Database cx, |
| 619 | Reference<TaskBucket> tb, |
| 620 | Reference<FutureBucket> fb, |
| 621 | Reference<Task> task) override { |
| 622 | return _execute(cx, tb, fb, task); |
| 623 | }; |
| 624 | Future<Void> finish(Reference<ReadYourWritesTransaction> tr, |
| 625 | Reference<TaskBucket> tb, |
| 626 | Reference<FutureBucket> fb, |
| 627 | Reference<Task> task) override { |
| 628 | return _finish(tr, tb, fb, task); |
| 629 | }; |
| 630 | |
| 631 | ACTOR static Future<Void> _execute(Database cx, |
| 632 | Reference<TaskBucket> taskBucket, |
| 633 | Reference<FutureBucket> futureBucket, |
| 634 | Reference<Task> task) { |
| 635 | state FlowLock lock(CLIENT_KNOBS->BACKUP_LOCK_BYTES); |
| 636 | |
| 637 | wait(checkTaskVersion(cx, task, EraseLogRangeTaskFunc::name, EraseLogRangeTaskFunc::version)); |
| 638 | |
| 639 | state Reference<ReadYourWritesTransaction> tr(new ReadYourWritesTransaction(taskBucket->src)); |
| 640 | loop { |
| 641 | try { |
| 642 | Version endVersion = BinaryReader::fromStringRef<Version>( |
| 643 | task->params[DatabaseBackupAgent::keyEndVersion], Unversioned()); |
| 644 | wait(eraseLogData( |
| 645 | tr, |
| 646 | task->params[BackupAgentBase::keyConfigLogUid], |
| 647 | task->params[BackupAgentBase::destUid], |
| 648 | Optional<Version>(endVersion), |
| 649 | CheckBackupUID::True, |
| 650 | BinaryReader::fromStringRef<Version>(task->params[BackupAgentBase::keyFolderId], Unversioned()))); |
| 651 | wait(tr->commit()); |
| 652 | return Void(); |
| 653 | } catch (Error& e) { |
| 654 | wait(tr->onError(e)); |
| 655 | } |
| 656 | } |
| 657 | } |
| 658 | |
| 659 | ACTOR static Future<Key> addTask(Reference<ReadYourWritesTransaction> tr, |
| 660 | Reference<TaskBucket> taskBucket, |
| 661 | Reference<Task> parentTask, |
| 662 | Version endVersion, |
| 663 | TaskCompletionKey completionKey, |
| 664 | Reference<TaskFuture> waitFor = Reference<TaskFuture>()) { |
| 665 | Key doneKey = wait(completionKey.get(tr, taskBucket)); |
| 666 | auto task = makeReference<Task>(EraseLogRangeTaskFunc::name, EraseLogRangeTaskFunc::version, doneKey, 1); |
| 667 | |
| 668 | copyDefaultParameters(parentTask, task); |
| 669 |
no test coverage detected