Beispiel #1
0
        /// <summary>
        /// Initializes new instance of <see cref="BinaryStorage"/> class.
        /// </summary>
        /// <param name="configuration">The configuration parameters for binary storage</param>
        public BinaryStorage(StorageConfiguration configuration)
        {
            binaryStorageFactory = new BinaryStorageFactory(configuration);

            cancellationOnDispose = new CancellationTokenSource();

            var blockProvider = binaryStorageFactory.CreateIndexFileBlockProvider();
            binaryStorageIndex = binaryStorageFactory.CreateBinaryStorageIndex(blockProvider);
            storageFileAppender = binaryStorageFactory.CreateStorageFileAppender(binaryStorageIndex);
            storageFileReader = binaryStorageFactory.CreateStorageFileReader();
        }
Beispiel #2
0
        /// <summary>
        /// Initializes new instance of <see cref="StorageFileAppender"/> class.
        /// </summary>
        /// <param name="configuration">The configuration parameters for binary storage components</param>
        /// <param name="streamFactory"><see cref="IStreamFactory"/> object used to create file streams</param>
        /// <param name="binaryStorageIndex">reference to binary storage index structure</param>
        /// <exception cref="ArgumentNullException">factory is null</exception>
        /// <exception cref="IOException">storage file could not be opened</exception>
        public StorageFileAppender(StorageConfiguration configuration, IStreamFactory streamFactory, IBinaryStorageIndex binaryStorageIndex)
        {
            this.configuration      = configuration.ThrowIfNull(nameof(configuration));
            this.binaryStorageIndex = binaryStorageIndex.ThrowIfNull(nameof(binaryStorageIndex));
            this.streamFactory      = streamFactory.ThrowIfNull(nameof(streamFactory));

            buffer     = streamFactory.CreateStreamedIOBuffer();
            fileStream = streamFactory.CreateStorageAppendingStream();
            ShrinkStorageFile();

            pendingCounter   = 0;
            processedCounter = 0;
            waitingList      = new ConcurrentQueue <Tuple <long, ManualResetEvent> >();

            cancellationOnDispose = new CancellationTokenSource();
            processingThread      = new Thread(DoBufferProcessing);
            processingThread.Start();

            writeLock = new object();
        }
Beispiel #3
0
 /// <summary>
 /// Creates <see cref="IStorageFileAppender"/> instance, responsible for appending data to global storage file.
 /// </summary>
 /// <param name="binaryStorageIndex">reference to binary storage index structure</param>
 /// <returns>New <see cref="IStorageFileAppender"/> instance</returns>
 public IStorageFileAppender CreateStorageFileAppender(IBinaryStorageIndex binaryStorageIndex)
 {
     return(new StorageFileAppender(configuration, streamFactory, binaryStorageIndex));
 }