| 3372 | return output; |
| 3373 | } |
| 3374 | struct RestoreLogDataTaskFunc : RestoreFileTaskFuncBase { |
| 3375 | static StringRef name; |
| 3376 | static constexpr uint32_t version = 1; |
| 3377 | StringRef getName() const override { return name; }; |
| 3378 | |
| 3379 | static struct : InputParams { |
| 3380 | } Params; |
| 3381 | |
| 3382 | ACTOR static Future<Void> _execute(Database cx, |
| 3383 | Reference<TaskBucket> taskBucket, |
| 3384 | Reference<FutureBucket> futureBucket, |
| 3385 | Reference<Task> task) { |
| 3386 | state RestoreConfig restore(task); |
| 3387 | |
| 3388 | state RestoreFile logFile = Params.inputFile().get(task); |
| 3389 | state int64_t readOffset = Params.readOffset().get(task); |
| 3390 | state int64_t readLen = Params.readLen().get(task); |
| 3391 | |
| 3392 | TraceEvent("FileRestoreLogStart") |
| 3393 | .suppressFor(60) |
| 3394 | .detail("RestoreUID", restore.getUid()) |
| 3395 | .detail("FileName", logFile.fileName) |
| 3396 | .detail("FileBeginVersion", logFile.version) |
| 3397 | .detail("FileEndVersion", logFile.endVersion) |
| 3398 | .detail("FileSize", logFile.fileSize) |
| 3399 | .detail("ReadOffset", readOffset) |
| 3400 | .detail("ReadLen", readLen) |
| 3401 | .detail("TaskInstance", THIS_ADDR); |
| 3402 | |
| 3403 | state Reference<ReadYourWritesTransaction> tr(new ReadYourWritesTransaction(cx)); |
| 3404 | state Reference<IBackupContainer> bc; |
| 3405 | state std::vector<KeyRange> ranges; |
| 3406 | |
| 3407 | loop { |
| 3408 | try { |
| 3409 | tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); |
| 3410 | tr->setOption(FDBTransactionOptions::LOCK_AWARE); |
| 3411 | |
| 3412 | Reference<IBackupContainer> _bc = wait(restore.sourceContainer().getOrThrow(tr)); |
| 3413 | bc = _bc; |
| 3414 | |
| 3415 | wait(store(ranges, restore.getRestoreRangesOrDefault(tr))); |
| 3416 | |
| 3417 | wait(checkTaskVersion(tr->getDatabase(), task, name, version)); |
| 3418 | wait(taskBucket->keepRunning(tr, task)); |
| 3419 | |
| 3420 | break; |
| 3421 | } catch (Error& e) { |
| 3422 | wait(tr->onError(e)); |
| 3423 | } |
| 3424 | } |
| 3425 | |
| 3426 | state Key mutationLogPrefix = restore.mutationLogPrefix(); |
| 3427 | state Reference<IAsyncFile> inFile = wait(bc->readFile(logFile.fileName)); |
| 3428 | state Standalone<VectorRef<KeyValueRef>> dataOriginal = |
| 3429 | wait(decodeMutationLogFileBlock(inFile, readOffset, readLen)); |
| 3430 | |
| 3431 | // Filter the KV pairs extracted from the log file block to remove any records known to not be needed for this |
nothing calls this directly
no test coverage detected