Ejemplo n.º 1
0
        public void Parse_Mutation_Cas_Field(string cas, long expected)
        {
            var parsed = AtrEntry.ParseMutationCasField(cas);

            Assert.NotNull(parsed);
            Assert.Equal(DateTimeOffset.FromUnixTimeMilliseconds(expected), parsed);
        }
Ejemplo n.º 2
0
        public Task MutateAtrPending(ulong exp, DurabilityLevel durabilityLevel)
        {
            var atrEntry = new AtrEntry()
            {
                State           = Support.AttemptStates.PENDING,
                DurabilityLevel = new ShortStringDurabilityLevel(durabilityLevel).ToString()
            };

            Atrs[FullId] = atrEntry;
            return(Task.CompletedTask);
        }
Ejemplo n.º 3
0
        public static async Task <AtrEntry?> FindEntryForTransaction(
            ICouchbaseCollection atrCollection,
            string atrId,
            string attemptId,
            TimeSpan?keyValueTimeout = null
            )
        {
            _ = atrCollection ?? throw new ArgumentNullException(nameof(atrCollection));
            _ = atrId ?? throw new ArgumentNullException(nameof(atrId));

            var lookupInResult = await atrCollection.LookupInAsync(atrId,
                                                                   specs => specs.Get(TransactionFields.AtrFieldAttempts, isXattr: true),
                                                                   opts => opts.Defaults(keyValueTimeout).AccessDeleted(true)).CAF();

            if (!lookupInResult.Exists(0))
            {
                return(null);
            }

            var asJson = lookupInResult.ContentAs <JObject>(0);

            if (asJson.TryGetValue(attemptId, out var entry))
            {
                var atrEntry = AtrEntry.CreateFrom(entry);
                if (atrEntry?.Cas == null && atrEntry?.State == default)
                {
                    throw new InvalidOperationException("ATR could not be parsed.");
                }

                return(atrEntry);
            }
            else
            {
                return(null);
            }
        }