Fdbbackup restore will now default to the latest usable version in a backup if a specific restore version was not given. Expire will make sure a cluster is provided if either of its timestamp options are given.

This commit is contained in:
Stephen Atherton 2018-01-19 12:19:32 -08:00
parent 6e96d3c30c
commit 93a7eb7474
1 changed files with 14 additions and 3 deletions

View File

@ -1724,9 +1724,18 @@ ACTOR Future<Void> runRestore(Database db, std::string tagName, std::string cont
throw restore_error();
}
KeyRange range = (ranges.size() == 0) ? normalKeys : ranges.front();
state KeyRange range = (ranges.size() == 0) ? normalKeys : ranges.front();
if (performRestore) {
if(dbVersion == invalidVersion) {
BackupDescription desc = wait(IBackupContainer::openContainer(container)->describeBackup());
if(!desc.maxRestorableVersion.present()) {
fprintf(stderr, "The specified backup is not restorable to any version.\n");
throw restore_error();
}
dbVersion = desc.maxRestorableVersion.get();
}
Version _restoreVersion = wait(backupAgent.restore(db, KeyRef(tagName), KeyRef(container), waitForDone, dbVersion, verbose, range, KeyRef(addPrefix), KeyRef(removePrefix)));
restoreVersion = _restoreVersion;
}
@ -2279,7 +2288,7 @@ int main(int argc, char* argv[]) {
std::string removePrefix;
Standalone<VectorRef<KeyRangeRef>> backupKeys;
int maxErrors = 20;
Version dbVersion = 0;
Version dbVersion = invalidVersion;
bool waitForDone = false;
bool stopWhenDone = true;
bool forceAction = false;
@ -2824,7 +2833,8 @@ int main(int argc, char* argv[]) {
break;
case BACKUP_EXPIRE:
if(!expireDatetime.empty())
// Must have a usable cluster if either expire DateTime options were used
if(!expireDatetime.empty() || !expireRestorableAfterDatetime.empty())
if(!initCluster())
return FDB_EXIT_ERROR;
f = stopAfter( expireBackupData(argv[0], destinationContainer, expireVersion, expireDatetime, db, forceAction, expireRestorableAfterVersion, expireRestorableAfterDatetime) );
@ -2835,6 +2845,7 @@ int main(int argc, char* argv[]) {
break;
case BACKUP_DESCRIBE:
// Describe will lookup version timestamps if a cluster file was given, but quietly skip them if not.
f = stopAfter( describeBackup(argv[0], destinationContainer, describeDeep, initCluster(true) ? db : Optional<Database>()) );
break;