コード例 #1
0
 public void Dispose()
 {
     StreamStore?.Dispose();
     HttpClient?.Dispose();
     _server?.Dispose();
     _logCapture?.Dispose();
 }
 public Task <AppendResult> WriteNMessages(string streamId, int n)
 => StreamStore.AppendToStream(
     streamId,
     ExpectedVersion.Any,
     Enumerable.Range(0, n)
     .Select(_ => new NewStreamMessage(Guid.NewGuid(), "type", "{}", "{}"))
     .ToArray());
コード例 #3
0
            private Stream(StreamStore streamStore,
                           string bucketId,
                           string streamId,
                           ISnapshot snapshot,
                           IEnumerable <ICommit> commits,
                           bool isFixedRevision,
                           IDateTimeProvider dateTimeProvider,
                           ILogger logger)
            {
                if (streamStore == null)
                {
                    throw new ArgumentNullException(nameof(streamStore));
                }

                if (commits == null)
                {
                    throw new ArgumentNullException(nameof(commits));
                }

                _streamStore      = streamStore;
                BucketId          = bucketId;
                StreamId          = streamId;
                Snapshot          = snapshot;
                IsReadOnly        = isFixedRevision;
                _dateTimeProvider = dateTimeProvider;
                _logger           = logger;

                ExecuteExtensions(commits);
                _commits.AddRange(commits);
            }
コード例 #4
0
        public Task <OpenStreamResult> GetContentAsync(OperationContext context, string hash, string downloadUrl)
        {
            return(context.PerformOperationAsync(
                       Tracer,
                       async() =>
            {
                var contentHash = new ContentHash(hash);
                var openResult = await StreamStore.OpenStreamAsync(context, contentHash);
                if (openResult.Code == OpenStreamResult.ResultCode.ContentNotFound)
                {
                    await EnsureContentLocalAsync(context, hash, downloadUrl);
                    openResult = await StreamStore.OpenStreamAsync(context, contentHash);
                }

                return openResult;
            },
                       extraStartMessage: $"Hash={hash}",
                       extraEndMessage: r => $"Hash={hash}, Size={r.StreamWithLength?.Length ?? -1}"
                       ));
        }
コード例 #5
0
        private static IRandomAccessStore GetReaderForStrategy(AccessStrategy strategy, FileInfo fi)
        {
            IRandomAccessStore reader;

            switch (strategy)
            {
            case AccessStrategy.MemoryMapped:
                reader = new MemoryMappedStore(fi);
                break;

            case AccessStrategy.Streams:
                reader = new StreamStore(fi);
                break;

            default:
                throw new Exception("Unexpected access strategy: " + strategy);
            }

            return(reader);
        }
コード例 #6
0
            public static async Task <Stream> OpenAsync(StreamStore streamStore,
                                                        string bucketId,
                                                        string streamId,
                                                        long revision,
                                                        IDateTimeProvider dateTimeProvider,
                                                        ILogger logger,
                                                        CancellationToken cancellation)
            {
                if (streamStore == null)
                {
                    throw new ArgumentNullException(nameof(streamStore));
                }

                if (revision < 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(revision));
                }

                var snapshot = await streamStore._persistence.GetSnapshotAsync(bucketId, streamId, revision, cancellation);

                var commits = await streamStore._persistence.GetCommitsAsync(bucketId,
                                                                             streamId, (snapshot?.StreamRevision + 1) ?? default,
                                                                             revision,
                                                                             cancellation).ToList()
                              ?? Enumerable.Empty <ICommit>();

                var isFixedRevision = revision != default;

                var result = new Stream(streamStore, bucketId, streamId, snapshot, commits, isFixedRevision, dateTimeProvider, logger);

                if (isFixedRevision && result.StreamRevision != revision)
                {
                    throw new StorageException($"Unable to load stream in revision {revision}.");
                }

                return(result);
            }
コード例 #7
0
 public void Dispose()
 {
     HttpClient.Dispose();
     StreamStore.Dispose();
 }