Exemplo n.º 1
0
        private VersionedItem ReadMetadata(string id)
        {
            ConcurrentMetadata innerItem = _innerStore.ReadMetadata(id);

            if (innerItem == null)
            {
                return(null);
            }

            return(new VersionedItem(innerItem.ETag, GetVersion(innerItem.Metadata)));
        }
        private void DeleteIfLatest(IConcurrentMetadataTextStore store, ConcurrentMetadata blob)
        {
            bool deleted = false;
            string previousETag = null;
            ConcurrentMetadata currentItem;

            for (currentItem = blob;
                !deleted && currentItem != null;
                currentItem = store.ReadMetadata(blob.Id))
            {
                string currentETag = currentItem.ETag;

                // Prevent an infinite loop if _innerStore erroneously returns false from TryDelete when a retry won't
                // help. (The inner store should throw rather than return false in that case.)
                if (currentETag == previousETag)
                {
                    throw new InvalidOperationException("The operation stopped making progress.");
                }

                previousETag = currentETag;
                deleted = _functionsStore.TryDelete(blob.Id, blob.ETag);
            }
        }