public void SerializeAndDeserialize_MergedPutCommandTest() { using (Server.ServerStore.ContextPool.AllocateOperationContext(out JsonOperationContext context)) { //Arrange var data = new { ParentProperty = new { NestedProperty = "Some Value" } }; var document = EntityToBlittable.ConvertCommandToBlittable(data, context); var changeVector = context.GetLazyString("Some Lazy String"); var expected = new MergedPutCommand(document, "user/", changeVector, null); //Action var jsonSerializer = GetJsonSerializer(); BlittableJsonReaderObject blitCommand; using (var writer = new BlittableJsonWriter(context)) { var dto = expected.ToDto(context); jsonSerializer.Serialize(writer, dto); writer.FinalizeDocument(); blitCommand = writer.CreateReader(); } var fromStream = SerializeTestHelper.SimulateSavingToFileAndLoading(context, blitCommand); MergedPutCommand actual; using (var reader = new BlittableJsonReader(context)) { reader.Init(fromStream); var dto = jsonSerializer.Deserialize <MergedPutCommand.MergedPutCommandDto>(reader); actual = dto.ToCommand(null, null); } //Assert Assert.Equal(expected, actual, new CustomComparer <MergedPutCommand>(context)); } }
protected async Task SaveLastOperationState(BlittableJsonReaderObject blittable) { using (var cmd = new MergedPutCommand(blittable, MigrationStateKey, null, Database)) { await Database.TxMerger.Enqueue(cmd); } }
private async Task SaveLastState(long operationId) { var retries = 0; using (Database.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) { while (retries++ < 15) { var operationState = await GetOperationState(DatabaseName, operationId, context); if (operationState == null) { return; } if (operationState.TryGet("Status", out OperationStatus operationStatus) == false) { return; } if (operationStatus == OperationStatus.InProgress) { await Task.Delay(1000, CancelToken.Token); continue; } if (operationStatus == OperationStatus.Canceled || operationStatus == OperationStatus.Faulted) { throw new InvalidOperationException("Couldn't get last operation state because the " + $"operation state is {operationStatus.ToString()} " + "although the operation was completed successfully"); } if (operationState.TryGet("Result", out BlittableJsonReaderObject smugglerResultBlittable) == false) { return; } var smugglerResult = JsonDeserializationClient.SmugglerResult(smugglerResultBlittable); if (smugglerResult == null) { return; } var importInfo = new ImportInfo { LastEtag = smugglerResult.GetLastEtag() }; var importInfoBlittable = EntityToBlittable.ConvertEntityToBlittable(importInfo, DocumentConventions.Default, context); var cmd = new MergedPutCommand(importInfoBlittable, _migrationStateKey, null, Database); await Database.TxMerger.Enqueue(cmd); return; } } }
private async Task SaveLastState(long operationId) { var retries = 0; using (Database.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) { while (retries++ < 15) { var operationStatus = await GetOperationStatus(DatabaseName, operationId, context); if (operationStatus == null) { return; } if (operationStatus.TryGet("Completed", out bool completed) == false) { return; } if (completed == false) { await Task.Delay(1000, CancelToken.Token); continue; } if (operationStatus.TryGet("OperationState", out BlittableJsonReaderObject operationStateBlittable) == false) { // OperationState was added in the latest release of v3.5 return; } var blittableCopy = context.ReadObject(operationStateBlittable, _migrationStateKey); var cmd = new MergedPutCommand(blittableCopy, _migrationStateKey, null, Database); await Database.TxMerger.Enqueue(cmd); return; } } }