Beispiel #1
0
        public void Dispose()
        {
            GC.SuppressFinalize(this);


            _journalWriter = null;
        }
Beispiel #2
0
        public TplDataflowEngine(M model, int batchSize, IJournalWriter journalWriter)
        {
            var kernel = new Kernel(model);

            _executionPipeline = new ExecutionPipeline(kernel);
            _journaler         = new TplBatchingJournaler(journalWriter, _executionPipeline, batchSize);
        }
Beispiel #3
0
        public void Dispose()
        {
            DisposeWithoutClosingPager();

            _journalWriter?.Dispose();
            _journalWriter = null;
        }
Beispiel #4
0
 public void Dispose()
 {
     _unusedPagesHashSetPool.Clear();
     _unusedPages.Clear();
     _pageTranslationTable.Clear();
     _journalWriter = null;
 }
Beispiel #5
0
        //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();
        }
Beispiel #6
0
 public JournalFile(StorageEnvironment env, IJournalWriter journalWriter, long journalNumber)
 {
     Number         = journalNumber;
     _env           = env;
     _journalWriter = journalWriter;
     _writePage     = 0;
     _unusedPages   = new List <PagePosition>();
 }
Beispiel #7
0
        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();
 }
Beispiel #9
0
        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();
        }
Beispiel #10
0
        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);
        }
Beispiel #12
0
 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);
 }
Beispiel #13
0
        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);
        }
Beispiel #15
0
 public void Dispose()
 {
     if (_transactionHeaders != null)
     {
         ArrayPool <TransactionHeader> .Shared.Return(_transactionHeaders);
     }
     _transactionHeaders = null;
     _unusedPagesHashSetPool.Clear();
     _unusedPages.Clear();
     _pageTranslationTable.Clear();
     _journalWriter = null;
 }
Beispiel #16
0
        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();
        }
Beispiel #18
0
 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);
 }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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();
        }
Beispiel #21
0
        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);
        }
Beispiel #22
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);
 }
Beispiel #23
0
 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);
 }
Beispiel #24
0
        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)));
        }
Beispiel #25
0
 /// <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();
 }
Beispiel #27
0
 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;
 }
Beispiel #29
0
 public JournalFile(IJournalWriter journalWriter, long journalNumber, long lastSyncedPage)
     : this(journalWriter, journalNumber)
 {
     _writePage = lastSyncedPage + 1;
 }
 public void SetUp()
 {
     _blockWriterMock = new Mock<IBlockWriter>();
     _writer = new JournalWriter(BufferSize, _blockWriterMock.Object);
 }
 public PostJournal(IJournalWriter journalGateway)
 {
     _journalGateway = journalGateway;
 }
Beispiel #32
0
 public static JournalAppender Create(ulong nextEntryId, IJournalWriter writer)
 {
     return(new JournalAppender(nextEntryId, writer));
 }
Beispiel #33
0
 public JournalFile(IJournalWriter journalWriter, long journalNumber)
 {
     Number         = journalNumber;
     _journalWriter = journalWriter;
     _writePage     = 0;
 }
Beispiel #34
0
 public void SetUp()
 {
     _blockWriterMock = new Mock <IBlockWriter>();
     _writer          = new JournalWriter(BufferSize, _blockWriterMock.Object);
 }
Beispiel #35
0
 public TplNetJournaler(int batchSize, IJournalWriter journalWriter, TplNetExecutor executor)
 {
     _batchSize     = batchSize;
     _journalWriter = journalWriter;
     _executor      = executor;
 }
Beispiel #36
0
 public JournalFile(IJournalWriter journalWriter, long journalNumber)
 {
     Number = journalNumber;
     _journalWriter = journalWriter;
     _writePage = 0;
 }