Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
 protected async Task SaveLastOperationState(BlittableJsonReaderObject blittable)
 {
     using (var cmd = new MergedPutCommand(blittable, MigrationStateKey, null, Database))
     {
         await Database.TxMerger.Enqueue(cmd);
     }
 }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
        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;
                }
            }
        }