private async Task CreateContextAsync(IBackupReader reader) { var userMapping = new UserMapping(CurrentJob.Actor); using (Profiler.Trace("CreateUsers")) { Log("Creating Users"); await userMapping.RestoreAsync(reader, userResolver); Log("Created Users"); } restoreContext = new RestoreContext(CurrentJob.AppId.Id, userMapping, reader); }
private async Task ProcessAsync(BackupJob job, RefToken actor, CancellationToken ct) { var handlers = CreateHandlers(); var lastTimestamp = job.Started; try { var appId = DomainId.Create(Key); using (var stream = backupArchiveLocation.OpenStream(job.Id)) { using (var writer = await backupArchiveLocation.OpenWriterAsync(stream)) { await writer.WriteVersionAsync(); var userMapping = new UserMapping(actor); var context = new BackupContext(appId, userMapping, writer); await eventStore.QueryAsync(async storedEvent => { var @event = eventDataFormatter.Parse(storedEvent); if (@event.Payload is SquidexEvent squidexEvent && squidexEvent.Actor != null) { context.UserMapping.Backup(squidexEvent.Actor); } foreach (var handler in handlers) { await handler.BackupEventAsync(@event, context); } writer.WriteEvent(storedEvent); job.HandledEvents = writer.WrittenEvents; job.HandledAssets = writer.WrittenAttachments; lastTimestamp = await WritePeriodically(lastTimestamp); }, GetFilter(), null, ct); foreach (var handler in handlers) { ct.ThrowIfCancellationRequested(); await handler.BackupAsync(context); } foreach (var handler in handlers) { ct.ThrowIfCancellationRequested(); await handler.CompleteBackupAsync(context); } await userMapping.StoreAsync(writer, userResolver); } stream.Position = 0; ct.ThrowIfCancellationRequested(); await backupArchiveStore.UploadAsync(job.Id, stream, ct); } job.Status = JobStatus.Completed; } catch (OperationCanceledException) { await RemoveAsync(job); } catch (Exception ex) { log.LogError(ex, job.Id.ToString(), (ctx, w) => w .WriteProperty("action", "makeBackup") .WriteProperty("status", "failed") .WriteProperty("backupId", ctx)); job.Status = JobStatus.Failed; } finally { job.Stopped = clock.GetCurrentInstant(); await state.WriteAsync(); currentJobToken?.Dispose(); currentJobToken = null; currentJob = null; } }
public UserMappingTests() { sut = new UserMapping(initiator); }
public UserMappingTests() { ct = cts.Token; sut = new UserMapping(initiator); }