Ejemplo n.º 1
0
        public void PinResultMissFromMemoization()
        {
            PinResult pinResult = PinResult.ContentNotFound;
            CasHash   hash      = RandomHelpers.CreateRandomCasHash();
            Possible <string, Failure> maybe = pinResult.FromMemoization(hash, CacheId);

            Assert.False(maybe.Succeeded);
            NoCasEntryFailure failure = maybe.Failure as NoCasEntryFailure;

            Assert.False(failure == null);

            string failureMessage = failure.Describe();

            Assert.Contains(hash.ToString(), failureMessage);
            Assert.Contains(CacheId, failureMessage);
        }
Ejemplo n.º 2
0
        public Task <Possible <string, Failure> > PinToCasAsync(CasHash hash, UrgencyHint urgencyHint, Guid activityId)
        {
            Contract.Requires(!IsClosed);

            return(Task.Run <Possible <string, Failure> >(() =>
            {
                using (var counter = m_counters.PinToCasCounter())
                {
                    using (var eventing = new PinToCasActivity(BasicFilesystemCache.EventSource, activityId, this))
                    {
                        eventing.Start(hash, urgencyHint);

                        if (!m_pinnedToCas.ContainsKey(hash))
                        {
                            if (!m_cache.CasExists(hash))
                            {
                                counter.PinMiss();
                                var result = new NoCasEntryFailure(m_cache.CacheId, hash);
                                return eventing.Returns(result);
                            }

                            if (!m_pinnedToCas.TryAdd(hash, 0))
                            {
                                counter.PinRaced();
                            }
                        }
                        else
                        {
                            counter.PinDup();
                        }

                        return eventing.Returns(m_cache.CacheId);
                    }
                }
            }));
        }