| 1964 | REGISTER_TASKFUNC(BackupSnapshotDispatchTask); |
| 1965 | |
| 1966 | struct BackupLogRangeTaskFunc : BackupTaskFuncBase { |
| 1967 | static StringRef name; |
| 1968 | static constexpr uint32_t version = 1; |
| 1969 | |
| 1970 | static struct { |
| 1971 | static TaskParam<bool> addBackupLogRangeTasks() { return LiteralStringRef(__FUNCTION__); } |
| 1972 | static TaskParam<int64_t> fileSize() { return LiteralStringRef(__FUNCTION__); } |
| 1973 | static TaskParam<Version> beginVersion() { return LiteralStringRef(__FUNCTION__); } |
| 1974 | static TaskParam<Version> endVersion() { return LiteralStringRef(__FUNCTION__); } |
| 1975 | } Params; |
| 1976 | |
| 1977 | StringRef getName() const override { return name; }; |
| 1978 | |
| 1979 | Future<Void> execute(Database cx, |
| 1980 | Reference<TaskBucket> tb, |
| 1981 | Reference<FutureBucket> fb, |
| 1982 | Reference<Task> task) override { |
| 1983 | return _execute(cx, tb, fb, task); |
| 1984 | }; |
| 1985 | Future<Void> finish(Reference<ReadYourWritesTransaction> tr, |
| 1986 | Reference<TaskBucket> tb, |
| 1987 | Reference<FutureBucket> fb, |
| 1988 | Reference<Task> task) override { |
| 1989 | return _finish(tr, tb, fb, task); |
| 1990 | }; |
| 1991 | |
| 1992 | ACTOR static Future<Void> _execute(Database cx, |
| 1993 | Reference<TaskBucket> taskBucket, |
| 1994 | Reference<FutureBucket> futureBucket, |
| 1995 | Reference<Task> task) { |
| 1996 | state Reference<FlowLock> lock(new FlowLock(CLIENT_KNOBS->BACKUP_LOCK_BYTES)); |
| 1997 | |
| 1998 | wait(checkTaskVersion(cx, task, BackupLogRangeTaskFunc::name, BackupLogRangeTaskFunc::version)); |
| 1999 | |
| 2000 | state Version beginVersion = Params.beginVersion().get(task); |
| 2001 | state Version endVersion = Params.endVersion().get(task); |
| 2002 | |
| 2003 | state BackupConfig config(task); |
| 2004 | state Reference<IBackupContainer> bc; |
| 2005 | |
| 2006 | state Reference<ReadYourWritesTransaction> tr(new ReadYourWritesTransaction(cx)); |
| 2007 | loop { |
| 2008 | tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); |
| 2009 | tr->setOption(FDBTransactionOptions::LOCK_AWARE); |
| 2010 | // Wait for the read version to pass endVersion |
| 2011 | try { |
| 2012 | wait(taskBucket->keepRunning(tr, task)); |
| 2013 | |
| 2014 | if (!bc) { |
| 2015 | // Backup container must be present if we're still here |
| 2016 | Reference<IBackupContainer> _bc = wait(config.backupContainer().getOrThrow(tr)); |
| 2017 | bc = _bc; |
| 2018 | } |
| 2019 | |
| 2020 | Version currentVersion = tr->getReadVersion().get(); |
| 2021 | if (endVersion < currentVersion) |
| 2022 | break; |
| 2023 |
nothing calls this directly
no test coverage detected