public void Dispose() { GC.SuppressFinalize(this); _journalWriter = null; }
public TplDataflowEngine(M model, int batchSize, IJournalWriter journalWriter) { var kernel = new Kernel(model); _executionPipeline = new ExecutionPipeline(kernel); _journaler = new TplBatchingJournaler(journalWriter, _executionPipeline, batchSize); }
public void Dispose() { DisposeWithoutClosingPager(); _journalWriter?.Dispose(); _journalWriter = null; }
public void Dispose() { _unusedPagesHashSetPool.Clear(); _unusedPages.Clear(); _pageTranslationTable.Clear(); _journalWriter = null; }
//wire up the disruptor ring buffers and handlers public DisruptorEngine(M model, int batchSize, IJournalWriter journalWriter) { _journalWriter = journalWriter; var kernel = new Kernel(model); _transactionHandler = new Disruptor <Request>( () => new Request(), new MultiThreadedClaimStrategy(1024 * 64), new YieldingWaitStrategy(), TaskScheduler.Default); _commandJournaler = new Disruptor <Request>( () => new Request(), new MultiThreadedClaimStrategy(1024 * 64), new YieldingWaitStrategy(), TaskScheduler.Default); _transactionHandler.HandleEventsWith(new SerializedTransactionHandler(kernel)); _commandJournaler.HandleEventsWith(new Journaler(_journalWriter, batchSize)) .Then(new CommandDispatcher(_transactionHandler)); _transactionHandler.Start(); _commandJournaler.Start(); }
public JournalFile(StorageEnvironment env, IJournalWriter journalWriter, long journalNumber) { Number = journalNumber; _env = env; _journalWriter = journalWriter; _writePage = 0; _unusedPages = new List <PagePosition>(); }
public virtual IJournalWriter CreateJournalWriter(ulong lastEntryId) { IJournalWriter writer = CreateStoreSpecificJournalWriter(); return(_config.AsynchronousJournaling ? new AsynchronousJournalWriter(writer) : writer); }
public AsynchronousJournalWriter(IJournalWriter writer) { _decoratedWriter = writer; _writerThread = new Thread(WriteBackground) { IsBackground = false }; _queue = new BlockingCollection <JournalEntry>(new ConcurrentQueue <JournalEntry>()); _writerThread.Start(); }
public TplNetEngine(M model, int batchSize, IJournalWriter journalWriter) { var kernel = new Kernel(model); _executor = new TplNetExecutor(kernel); _journaler = new TplNetJournaler(batchSize, journalWriter, _executor); _journaler.Start(); _executor.Start(); }
public TplBatchingJournaler(IJournalWriter journalWriter, ExecutionPipeline dispatcher, int batchSize) { Interval = TimeSpan.FromMilliseconds(16); _journalWriter = journalWriter; _dispatcher = dispatcher; _writerBlock = new ActionBlock <CommandRequest[]>(batch => Go(batch)); _requestQueue = new BatchBlock <CommandRequest>(batchSize); _requestQueue.LinkTo(_writerBlock); }
public TplBatchingJournaler(IJournalWriter journalWriter, ExecutionPipeline dispatcher, int batchSize) { Interval = TimeSpan.FromMilliseconds(16); _journalWriter = journalWriter; _dispatcher = dispatcher; _writerBlock = new ActionBlock<CommandRequest[]>(batch => Go(batch)); _requestQueue = new BatchBlock<CommandRequest>(batchSize); _requestQueue.LinkTo(_writerBlock); }
public JournalFile(StorageEnvironment env, IJournalWriter journalWriter, long journalNumber) { Number = journalNumber; _env = env; _transactionHeaders = new List <TransactionHeader>(); _journalWriter = journalWriter; _writePosIn4Kb = 0; _unusedPages = new FastList <PagePosition>(); _logger = LoggingSource.Instance.GetLogger <JournalFile>(JournalWriter.FileName.FullPath); _locker2 = new ContentionLoggingLocker(_logger, JournalWriter.FileName.FullPath); }
public AkkaJournaler(ActorRef executor, int batchSize, IJournalWriter journalWriter) { _journalWriter = journalWriter; BatchSize = batchSize; _executor = executor; Receive <RequestContext>(t => Accept(t)); Receive <ReceiveTimeout>(_ => Go()); Receive <JournalAcknowledgement>(_ => _executor.Tell(_waitingForJournalAck.Dequeue())); SetReceiveTimeout(Interval); }
public AkkaJournaler(ActorRef executor, int batchSize, IJournalWriter journalWriter) { _journalWriter = journalWriter; BatchSize = batchSize; _executor = executor; Receive<RequestContext>(t => Accept(t)); Receive<ReceiveTimeout>(_ => Go()); Receive<JournalAcknowledgement>(_ => _executor.Tell(_waitingForJournalAck.Dequeue())); SetReceiveTimeout(Interval); }
public void Dispose() { if (_transactionHeaders != null) { ArrayPool <TransactionHeader> .Shared.Return(_transactionHeaders); } _transactionHeaders = null; _unusedPagesHashSetPool.Clear(); _unusedPages.Clear(); _pageTranslationTable.Clear(); _journalWriter = null; }
public JournalReaderTests() { var settings = new MemstateSettings().WithRandomSuffixAppendedToStreamName(); _provider = new PostgresqlProvider(settings); _provider.Initialize(); _journalReader = _provider.CreateJournalReader(); _journalWriter = _provider.CreateJournalWriter(0); _serializer = settings.CreateSerializer(); }
public JournalReaderTests() { var settings = new MemstateSettings(); _provider = new PostgresqlProvider(settings); _provider.Initialize(); _journalReader = _provider.CreateJournalReader(); _journalWriter = _provider.CreateJournalWriter(0); _serializer = settings.CreateSerializer(); }
public Engine( MemstateSettings config, TModel model, IJournalSubscriptionSource subscriptionSource, IJournalWriter journalWriter, long nextRecord) { _lastRecordNumber = nextRecord - 1; _logger = config.CreateLogger <Engine <TModel> >(); _kernel = new Kernel(config, model); _journalWriter = journalWriter; _pendingLocalCommands = new ConcurrentDictionary <Guid, TaskCompletionSource <object> >(); _commandSubscription = subscriptionSource.Subscribe(nextRecord, ApplyRecord); }
public void Setup() { _fakeSubscriptionSource = A.Fake <IJournalSubscriptionSource>(); _fakeSubscription = A.Fake <IJournalSubscription>(); _fakeJournalWriter = A.Fake <IJournalWriter>(); _nextRecordNumber = DateTime.Now.Millisecond; A.CallTo(() => _fakeSubscriptionSource.Subscribe(_nextRecordNumber, A <Action <JournalRecord> > ._)) .Returns(_fakeSubscription); var config = new MemstateSettings(); _engine = new Engine <Object>(config, new Object(), _fakeSubscriptionSource, _fakeJournalWriter, _nextRecordNumber); }
public void Setup() { var cfg = Config.Reset(); cfg.GetSettings <EngineSettings>() .WithRandomSuffixAppendedToStreamName(); _provider = new PostgresProvider(); _provider.Initialize(); _journalReader = _provider.CreateJournalReader(); _journalWriter = _provider.CreateJournalWriter(0); _serializer = Config.Current.CreateSerializer(); }
public void Setup() { SqlStreamStore.Logging.LogProvider.IsDisabled = true; var config = Config.Current; _streamName = "test-" + DateTime.Now.ToFileTimeUtc(); config.GetSettings <EngineSettings>().StreamName = _streamName; config.SerializerName = Serializers.NewtonsoftJson; //ConfigurePostgres(); ConfigureMssql2019(); _provider = new SqlStreamStoreProvider(_streamStore); _writer = _provider.CreateJournalWriter(0); }
public Engine( MemstateSettings settings, TModel model, IJournalSubscriptionSource subscriptionSource, IJournalWriter journalWriter, long nextRecord) { _lastRecordNumber = nextRecord - 1; _logger = settings.CreateLogger <Engine <TModel> >(); _kernel = new Kernel(settings, model); _settings = settings; _journalWriter = journalWriter; _pendingLocalCommands = new ConcurrentDictionary <Guid, TaskCompletionSource <object> >(); _commandSubscription = subscriptionSource.Subscribe(nextRecord, OnRecordReceived); _metrics = new EngineMetrics(settings); }
public Engine( EngineSettings settings, TModel model, IJournalSubscriptionSource subscriptionSource, IJournalWriter journalWriter, long nextRecord) { _lastRecordNumber = nextRecord - 1; _logger = LogProvider.GetCurrentClassLogger(); _kernel = new Kernel(settings, model); _settings = settings; _journalWriter = journalWriter; _pendingLocalCommands = new ConcurrentDictionary <Guid, TaskCompletionSource <object> >(); _commandSubscription = subscriptionSource.Subscribe(nextRecord, OnRecordReceived); _metrics = Metrics.Provider.GetEngineMetrics(); ExecutionContext.Current = new ExecutionContext(nextRecord); }
public AkkaEngine(M model, int batchSize, IJournalWriter journalWriter) { // the kernel is an origodb component which // synchronizes reads and writes to the model // will be shared by var kernel = new Kernel(model); //var journalWriter = new NullJournalWriter(); //build the chain of actors backwards _actorSystem = ActorSystem.Create("prevayler"); //executor executes commands //it could also handle queries but would allow either a single query or command at time. //better to add a group of actors that can execute queries concurrently var executor = _actorSystem.ActorOf(Props.Create(() => new Executor(kernel))); //journaler writes commands to the journal in batches or at specific intervals //before passing to the executor var journaler = _actorSystem.ActorOf(Props.Create(() => new AkkaJournaler(executor, batchSize, journalWriter))); //dispatcher prepares initial message and passes to journaler _dispatcher = _actorSystem.ActorOf(Props.Create(() => new Dispatcher(journaler, executor))); }
/// <summary> /// Constructor /// </summary> /// <param name="nextEntryId"></param> /// <param name="writer">The underlying writer</param> public JournalAppender(ulong nextEntryId, IJournalWriter writer) { _nextEntryId = nextEntryId; _writer = writer; }
public AsynchronousJournalWriter(IJournalWriter writer) { _decoratedWriter = writer; Init(); }
public JournalFile(IJournalWriter journalWriter, long journalNumber, long lastSyncedPage) : this(journalWriter, journalNumber) { _writePage = lastSyncedPage + 1; }
public TplNetJournaler(int batchSize, IJournalWriter journalWriter, TplNetExecutor executor) { _batchSize = batchSize; _journalWriter = journalWriter; _executor = executor; }
public void SetUp() { _blockWriterMock = new Mock<IBlockWriter>(); _writer = new JournalWriter(BufferSize, _blockWriterMock.Object); }
public PostJournal(IJournalWriter journalGateway) { _journalGateway = journalGateway; }
public static JournalAppender Create(ulong nextEntryId, IJournalWriter writer) { return(new JournalAppender(nextEntryId, writer)); }
public JournalFile(IJournalWriter journalWriter, long journalNumber) { Number = journalNumber; _journalWriter = journalWriter; _writePage = 0; }
public void SetUp() { _blockWriterMock = new Mock <IBlockWriter>(); _writer = new JournalWriter(BufferSize, _blockWriterMock.Object); }