コード例 #1
0
        public async Task DeleteCompareExchangeValue()
        {
            var key           = GetStringQueryString("key");
            var raftRequestId = GetRaftRequestIdFromQuery();

            // ReSharper disable once PossibleInvalidOperationException
            var index = GetLongQueryString("index", true).Value;

            await ServerStore.EnsureNotPassiveAsync();

            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
            {
                var command = new RemoveCompareExchangeCommand(Database.Name, key, index, context, raftRequestId);
                using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    (var raftIndex, var response) = await ServerStore.SendToLeaderAsync(context, command);

                    await ServerStore.Cluster.WaitForIndexNotification(raftIndex);

                    var result = (CompareExchangeCommandBase.CompareExchangeResult)response;
                    context.Write(writer, new DynamicJsonValue
                    {
                        [nameof(CompareExchangeResult <object> .Index)]      = result.Index,
                        [nameof(CompareExchangeResult <object> .Value)]      = result.Value,
                        [nameof(CompareExchangeResult <object> .Successful)] = result.Index == raftIndex
                    });
                }
            }
        }
コード例 #2
0
        public async Task DeleteCompareExchangeValue()
        {
            var prefix = Database.Name + "/";
            var key    = prefix + GetStringQueryString("key");

            // ReSharper disable once PossibleInvalidOperationException
            var index = GetLongQueryString("index", true).Value;

            ServerStore.EnsureNotPassive();

            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
            {
                var command = new RemoveCompareExchangeCommand(key, index, context);
                using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    (var raftIndex, var res) = await ServerStore.SendToLeaderAsync(command);

                    await ServerStore.Cluster.WaitForIndexNotification(raftIndex);

                    using (context.OpenReadTransaction())
                    {
                        var tuple = (AddOrUpdateCompareExchangeCommand.CompareExchangeResult)res;
                        context.Write(writer, new DynamicJsonValue
                        {
                            [nameof(CompareExchangeResult <object> .Index)]      = tuple.Index,
                            [nameof(CompareExchangeResult <object> .Value)]      = tuple.Value,
                            [nameof(CompareExchangeResult <object> .Successful)] = tuple.Index == raftIndex
                        });
                    }
                }
            }
        }