Skip to content

Commit

Permalink
RavenDB-20095 Restoring database should report what file it is workin…
Browse files Browse the repository at this point in the history
…g on
  • Loading branch information
ml054 committed Jun 30, 2023
1 parent b06bec2 commit 30345d3
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/Raven.Client/ServerWide/Operations/RestoreProgress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class RestoreProgress : SmugglerResult.SmugglerProgress
{
public Counts SnapshotRestore => ((RestoreResult)_result).SnapshotRestore;

public FileCounts SmugglerRestore => ((RestoreResult)_result).SmugglerRestore;
public FileCounts Files => ((RestoreResult)_result).Files;

public RestoreProgress(RestoreResult result) : base(result)
{
Expand All @@ -18,7 +18,7 @@ public override DynamicJsonValue ToJson()
{
var json = base.ToJson();
json[nameof(SnapshotRestore)] = SnapshotRestore.ToJson();
json[nameof(SmugglerRestore)] = SmugglerRestore.ToJson();
json[nameof(Files)] = Files.ToJson();
return json;
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/Raven.Client/ServerWide/Operations/RestoreResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ public class RestoreResult : SmugglerResult

public Counts SnapshotRestore { get; set; }

public FileCounts SmugglerRestore { get; set; }
public FileCounts Files { get; set; }

public RestoreResult()
{
_progress = new RestoreProgress(this);
SnapshotRestore = new Counts();
SmugglerRestore = new FileCounts();
Files = new FileCounts();
}

public override DynamicJsonValue ToJson()
Expand All @@ -26,7 +26,7 @@ public override DynamicJsonValue ToJson()
json[nameof(DataDirectory)] = DataDirectory;
json[nameof(JournalStoragePath)] = JournalStoragePath;
json[nameof(SnapshotRestore)] = SnapshotRestore.ToJson();
json[nameof(SmugglerRestore)] = SmugglerRestore.ToJson();
json[nameof(Files)] = Files.ToJson();
return json;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -337,11 +337,13 @@ public async Task<IOperationResult> Execute(Action<IOperationProgress> onProgres
database.ClusterTransactionId = databaseRecord.Topology.ClusterTransactionIdBase64;
database.DatabaseGroupId = databaseRecord.Topology.DatabaseTopologyIdBase64;

result.Files.FileCount = filesToRestore.Count + (snapshotRestore ? 1 : 0);

using (database.DocumentsStorage.ContextPool.AllocateOperationContext(out DocumentsOperationContext context))
{
if (snapshotRestore)
{
await RestoreFromSmugglerFile(onProgress, database, firstFile, context);
await RestoreFromSmugglerFile(onProgress, database, firstFile, context, result);
await SmugglerRestore(database, filesToRestore, context, databaseRecord, onProgress, result);

result.SnapshotRestore.Processed = true;
Expand Down Expand Up @@ -651,8 +653,6 @@ protected async Task SmugglerRestore(DocumentDatabase database, List<string> fil
if (filesToRestore.Count == 0)
return;

result.SmugglerRestore.FileCount = filesToRestore.Count;

// we do have at least one smuggler backup, we'll take the indexes from the last file
databaseRecord.AutoIndexes = new Dictionary<string, AutoIndexDefinition>();
databaseRecord.Indexes = new Dictionary<string, IndexDefinition>();
Expand All @@ -679,8 +679,8 @@ protected async Task SmugglerRestore(DocumentDatabase database, List<string> fil
result.AddInfo($"Restoring file {(i + 1):#,#;;0}/{filesToRestore.Count:#,#;;0}");

var fileName = filesToRestore[i];
result.SmugglerRestore.CurrentFileName = fileName;
result.SmugglerRestore.CurrentFile = i + 1;
result.Files.CurrentFileName = fileName;
result.Files.CurrentFile++;

onProgress.Invoke(result.Progress);

Expand All @@ -698,8 +698,8 @@ await ImportSingleBackupFile(database, onProgress, result, filePath, context, de
result.AddInfo($"Restoring file {filesToRestore.Count:#,#;;0}/{filesToRestore.Count:#,#;;0}");

var lastFileName = filesToRestore.Last();
result.SmugglerRestore.CurrentFileName = lastFileName;
result.SmugglerRestore.CurrentFile = filesToRestore.Count;
result.Files.CurrentFileName = lastFileName;
result.Files.CurrentFile++;

result.Indexes.Skipped = RestoreFromConfiguration.SkipIndexes;

Expand Down Expand Up @@ -769,7 +769,7 @@ await ImportSingleBackupFile(database, onProgress, result, lastFilePath, context
database.DocumentsStorage.RevisionsStorage.InitializeFromDatabaseRecord(smugglerDatabaseRecord);
});

result.SmugglerRestore.CurrentFileName = null;
result.Files.CurrentFileName = null;

long totalExecutedCommands = 0;

Expand Down Expand Up @@ -928,7 +928,9 @@ private async Task ImportSingleBackupFile(DocumentDatabase database,
/// <param name="database"></param>
/// <param name="smugglerFile"></param>
/// <param name="context"></param>
protected async Task RestoreFromSmugglerFile(Action<IOperationProgress> onProgress, DocumentDatabase database, string smugglerFile, DocumentsOperationContext context)
/// <param name="result"></param>
protected async Task RestoreFromSmugglerFile(Action<IOperationProgress> onProgress, DocumentDatabase database, string smugglerFile,
DocumentsOperationContext context, RestoreResult result)
{
var destination = new DatabaseDestination(database);

Expand All @@ -941,6 +943,10 @@ protected async Task RestoreFromSmugglerFile(Action<IOperationProgress> onProgre

var lastPath = GetSmugglerBackupPath(smugglerFile);

result.Files.CurrentFileName = smugglerFile;
result.Files.CurrentFile++;

onProgress.Invoke(result.Progress);
using (var zip = await GetZipArchiveForSnapshot(lastPath))
{
foreach (var entry in zip.Entries)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ class smugglerDatabaseDetails extends abstractOperationDetails {
messagesJoined: KnockoutComputed<string>;
previousProgressMessages: string[];
processingSpeed: KnockoutComputed<string>;

filesProcessed: KnockoutComputed<File>;

filesCount: KnockoutComputed<Raven.Client.Documents.Smuggler.SmugglerProgressBase.FileCounts>;

constructor(op: operation, notificationCenter: notificationCenter) {
super(op, notificationCenter);
Expand All @@ -62,6 +66,29 @@ class smugglerDatabaseDetails extends abstractOperationDetails {
protected initObservables() {
super.initObservables();

this.filesCount = ko.pureComputed(() => {
if (this.op.status() !== "InProgress") {
return null;
}

const status = this.op.progress();
if (!status) {
return null;
}

if ("Files" in status) {
const files = (status as Raven.Client.ServerWide.Operations.RestoreProgress).Files;

if (!files.FileCount) {
return null;
}

return files;
}

return null;
});

this.canDelay = ko.pureComputed(() => {
const completed = this.op.isCompleted();
const isBackup = this.op.taskType() === "DatabaseBackup";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,23 @@ <h4 data-bind="text: name, visible: isNested"></h4>
</div>
</div>
<br/>
<div class="export-list" data-bind="with: filesCount">
<div class="export-item">
<div class="name">
<h3>Current File</h3>
</div>
<div class="progress-overall" style="width: 600px">
<div class="flex-horizontal">
<h3 class="flex-grow"><span data-bind="text: CurrentFileName"></span></h3>
<div class="percentage">
<span data-bind="text: CurrentFile"></span>
/
<span data-bind="text: FileCount"></span>
</div>
</div>
</div>
</div>
</div>
<div class="export-list" data-bind="visible: uploadItems().length">
<div data-bind="foreach: uploadItems">
<div class="export-item">
Expand Down

0 comments on commit 30345d3

Please sign in to comment.