コード例 #1
0
 protected override Snapshot WriteSnapshotImpl(Model model)
 {
     var bytes = _formatter.ToByteArray(model);
     var snapshot = new Snapshot(DateTime.Now, model.Revision);
     _state.Snapshots.Add(snapshot, bytes);
     return snapshot;
 }
コード例 #2
0
 protected override Snapshot WriteSnapshotImpl(Model model)
 {
     var fileSnapshot = new FileSnapshot(DateTime.Now, model.Revision);
     var fileName = Path.Combine(_config.Location.OfSnapshots, fileSnapshot.Name);
     using (Stream stream =  new FileStream(fileName, FileMode.Create, FileAccess.Write))
     {
         _formatter.Serialize(stream, model);
     }
     return fileSnapshot;
 }
コード例 #3
0
ファイル: RoyalFoodTaster.cs プロジェクト: avgx/OrigoDB
        /// <summary>
        /// Apply the command to the food taster. If it succeeds, apply to the real model.
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        public override object ExecuteCommand(Command command)
        {
            try
            {
                command.PrepareStub(_foodTaster);
                command.ExecuteStub(_foodTaster); //outofmemory,commandaborted, unhandled user
            }
            catch (CommandAbortedException)
            {
                throw;
            }
            catch (OutOfMemoryException)
            {
                throw;
            }
            catch (Exception ex)
            {
                _foodTaster = _formatter.Clone(Model); //reset
                throw new CommandAbortedException("Royal taster died of food poisoning, see inner exception for details", ex);
            }

            return base.ExecuteCommand(command);
        }
コード例 #4
0
ファイル: Command.cs プロジェクト: avgx/OrigoDB
 internal virtual void Redo(ref Model model)
 {
     PrepareStub(model);
     ExecuteStub(model);
 }
コード例 #5
0
ファイル: Command.cs プロジェクト: avgx/OrigoDB
 /// <summary>
 /// Perform read operations before the write lock is obtained.
 /// </summary>
 /// <param name="model"></param>
 internal abstract void PrepareStub(Model model);
コード例 #6
0
ファイル: Command.cs プロジェクト: avgx/OrigoDB
 internal abstract object ExecuteStub(Model model);
コード例 #7
0
ファイル: RoyalFoodTaster.cs プロジェクト: avgx/OrigoDB
 public RoyalFoodTaster(EngineConfiguration config, Model model)
     : base(config, model)
 {
     _formatter = config.CreateFormatter(FormatterUsage.Snapshot);
     _foodTaster = _formatter.Clone(Model);
 }
コード例 #8
0
ファイル: OptimisticKernel.cs プロジェクト: vfabregat/OrigoDB
 public OptimisticKernel(EngineConfiguration config, Model model)
     : base(config, model)
 {
 }
コード例 #9
0
ファイル: FileStore.cs プロジェクト: NerdPad/OrigoDB
 protected override Snapshot WriteSnapshotImpl(Model model, ulong lastAppliedEntryId)
 {
     var fileSnapshot = new FileSnapshot(DateTime.Now, lastAppliedEntryId);
     var fileName = Path.Combine(_config.Location.OfSnapshots, fileSnapshot.Name);
     using (Stream stream = GetWriteStream(fileName, append:false))
     {
         _snapshotFormatter.Serialize(stream, model);
     }
     return fileSnapshot;
 }
コード例 #10
0
ファイル: ImmutabilityKernel.cs プロジェクト: NerdPad/OrigoDB
 public ImmutabilityKernel(EngineConfiguration config, Model model)
     : base(config, model)
 {
 }
コード例 #11
0
ファイル: ImmutabilityKernel.cs プロジェクト: NerdPad/OrigoDB
 private void UnpackTuple(object tuple, out Model model, out object result)
 {
     var type = tuple.GetType();
     model = (Model)type.GetProperty("Item1").GetGetMethod().Invoke(tuple, null);
     result = type.GetProperty("Item2").GetGetMethod().Invoke(tuple, null);
 }
コード例 #12
0
 internal override void PrepareStub(Model model)
 {
     throw new NotImplementedException();
 }
コード例 #13
0
 internal override object ExecuteStub(Model model)
 {
     throw new NotImplementedException();
 }