afs_int32 code;
int oldFlag;
afs_int32 fromDate;
+ afs_int32 dumpID = 0;
char *newExt, *timeString;
afs_int32 i;
afs_int32 *ports = NULL;
dontExecute = (as->parms[6].items ? 1 : 0); /* -n */
+ if (as->parms[7].items)
+ {
+ dumpID = atoi(as->parms[7].items->data);
+ if (dumpID <= 0)
+ dumpID = 0;
+ }
+
/*
* Perform the call to start the restore.
*/
code =
bc_StartDmpRst(bc_globalConfig, "volume", "restore", volsToRestore,
&destServ, destPartition, fromDate, newExt, oldFlag,
- /*parentDump */ 0, /*dumpLevel */ 0,
+ /*parentDump */ dumpID, /*dumpLevel */ 0,
bc_Restorer, ports, portCount,
/*dumpSched */ NULL, /*append */ 0, dontExecute);
if (code)
"date from which to restore");
cmd_AddParm(ts, "-portoffset", CMD_LIST, CMD_OPTIONAL, "TC port offsets");
cmd_AddParm(ts, "-n", CMD_FLAG, CMD_OPTIONAL, "don't really execute it");
+ cmd_AddParm(ts, "-usedump", CMD_SINGLE, CMD_OPTIONAL,
+ "specify the dumpID to restore from");
if (!interact)
add_std_args(ts);
for (tvol = dumpTaskPtr->volumes; tvol; tvol = tvol->next) { /*tvol */
strcpy(vname, tvol->name);
dumpDescr = &dumpDescr1;
- code = bcdb_FindDump(vname, dumpTaskPtr->fromDate, dumpDescr);
-
- if (!BackupName(vname)) { /* See if backup volume is there */
- strcat(vname, ".backup");
- dumpDescr = &dumpDescr2;
- tcode = code;
+ if (dumpTaskPtr->parentDumpID > 0) /* Told which dump to try */
+ {
+ /* Right now, this assumes that all volumes listed will be
+ * from the given dumpID. FIXME
+ */
+ code = bcdb_FindDumpByID(dumpTaskPtr->parentDumpID, dumpDescr);
+ if (code)
+ {
+ com_err(whoami, "Couldn't look up info for dump %d\n",
+ dumpTaskPtr->parentDumpID);
+ continue;
+ }
+ code = bcdb_FindVolumes(dumpTaskPtr->parentDumpID, vname, volumeEntries,
+ last, &next, MAXTAPESATONCE, &vecount);
+ if (code)
+ {
+ if (!BackupName(vname))
+ {
+ strcat(vname, ".backup");
+ code = bcdb_FindVolumes(dumpTaskPtr->parentDumpID, vname, volumeEntries,
+ last, &next, MAXTAPESATONCE, &vecount);
+ }
+ }
+ }
+ else
+ {
code = bcdb_FindDump(vname, dumpTaskPtr->fromDate, dumpDescr);
+ if (!BackupName(vname)) { /* See if backup volume is there */
+ strcat(vname, ".backup");
+ dumpDescr = &dumpDescr2;
+ tcode = code;
+ code = bcdb_FindDump(vname, dumpTaskPtr->fromDate, dumpDescr);
- if (code) { /* Can't find backup, go with first results */
+ if (code) { /* Can't find backup, go with first results */
strcpy(vname, tvol->name);
dumpDescr = &dumpDescr1;
code = tcode;
- } else if (!tcode) { /* Both found an entry, go with latest result */
+ } else if (!tcode) { /* Both found an entry, go with latest result */
if (dumpDescr1.created > dumpDescr2.created) {
- strcpy(vname, tvol->name);
- dumpDescr = &dumpDescr1;
- code = tcode;
+ strcpy(vname, tvol->name);
+ dumpDescr = &dumpDescr1;
+ code = tcode;
}
+ }
}
- }
+ }
if (code) { /* If FindDump took an error */
afs_com_err(whoami, code, "; Can't find any dump for volume %s",