/// <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(); }
/// <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(); }
/// <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)); }