public IndexReadEventResult(ReadEventResult result, EventRecord record, StreamMetadata metadata, int lastEventNumber) { Result = result; Record = record; Metadata = metadata; LastEventNumber = lastEventNumber; }
public IndexReadEventResult(ReadEventResult result) { if (result == ReadEventResult.Success) throw new ArgumentException(string.Format("Wrong ReadEventResult provided for failure constructor: {0}.", result), "result"); Result = result; Record = null; }
public IndexReadEventResult(ReadEventResult result, EventRecord record, StreamMetadata metadata, long lastEventNumber, bool originalStreamExists) { Result = result; Record = record; Metadata = metadata; LastEventNumber = lastEventNumber; OriginalStreamExists = originalStreamExists; }
public IndexReadEventResult(ReadEventResult result, EventRecord record, StreamMetadata metadata, int lastEventNumber, bool originalStreamExists) { Result = result; Record = record; Metadata = metadata; LastEventNumber = lastEventNumber; OriginalStreamExists = originalStreamExists; }
public IndexReadEventResult(ReadEventResult result, StreamMetadata metadata, int lastEventNumber) { if (result == ReadEventResult.Success) throw new ArgumentException(string.Format("Wrong ReadEventResult provided for failure constructor: {0}.", result), "result"); Result = result; Record = null; Metadata = metadata; LastEventNumber = lastEventNumber; }
public IndexReadEventResult(ReadEventResult result, StreamMetadata metadata) { if (result == ReadEventResult.Success) { throw new ArgumentException(string.Format("Wrong ReadEventResult provided for failure constructor: {0}.", result), "result"); } Result = result; Record = null; Metadata = metadata; }
public IndexReadEventResult(ReadEventResult result, StreamMetadata metadata, long lastEventNumber, bool originalStreamExists) { if (result == ReadEventResult.Success) { throw new ArgumentException(string.Format("Wrong ReadEventResult provided for failure constructor: {0}.", result), "result"); } Result = result; Record = null; Metadata = metadata; LastEventNumber = lastEventNumber; OriginalStreamExists = originalStreamExists; }
public IndexReadEventResult(ReadEventResult result, EventRecord record, StreamMetadata metadata) { Result = result; Record = record; Metadata = metadata; }
public ReadEventCompleted(Guid correlationId, string eventStreamId, ReadEventResult result, ResolvedEvent record) { Ensure.NotNullOrEmpty(eventStreamId, "eventStreamId"); if (result == ReadEventResult.Success) Ensure.NotNull(record.Event, "record.Event"); CorrelationId = correlationId; EventStreamId = eventStreamId; Result = result; Record = record; }
public IndexReadEventResult(ReadEventResult result, EventRecord record) { Result = result; Record = record; }
public void Commit(CommitLogRecord commit) { var lastCommitPosition = Interlocked.Read(ref _lastCommitPosition); if (commit.LogPosition < lastCommitPosition || (commit.LogPosition == lastCommitPosition && !_indexRebuild)) { return; // already committed } bool first = true; int eventNumber = -1; uint streamHash = 0; string streamId = null; foreach (var prepare in GetTransactionPrepares(commit.TransactionPosition)) { if (first) { streamHash = _hasher.Hash(prepare.EventStreamId); streamId = prepare.EventStreamId; first = false; } else { Debug.Assert(prepare.EventStreamId == streamId); } bool addToIndex = false; if ((prepare.Flags & PrepareFlags.StreamDelete) != 0) { eventNumber = EventNumber.DeletedStream; _committedEvents.PutRecord(prepare.EventId, Tuple.Create(streamId, eventNumber), throwOnDuplicate: false); addToIndex = commit.LogPosition > _persistedCommitCheckpoint || commit.LogPosition == _persistedCommitCheckpoint && prepare.LogPosition > _persistedPrepareCheckpoint; } else if ((prepare.Flags & PrepareFlags.Data) != 0) { eventNumber = commit.EventNumber + prepare.TransactionOffset; _committedEvents.PutRecord(prepare.EventId, Tuple.Create(streamId, eventNumber), throwOnDuplicate: false); addToIndex = commit.LogPosition > _persistedCommitCheckpoint || commit.LogPosition == _persistedCommitCheckpoint && prepare.LogPosition > _persistedPrepareCheckpoint; } // could be just empty prepares for TransactionBegin and TransactionEnd, for instance // or records which are rebuilt but are already in PTables if (addToIndex) { #if CHECK_COMMIT_DUPLICATES long pos; if (_tableIndex.TryGetOneValue(streamHash, eventNumber, out pos)) { ReadEventResult res = ((IReadIndex)this).ReadEvent(eventStreamId, eventNumber); if (res.Result == SingleReadResult.Success) { Debugger.Break(); throw new Exception( string.Format( "Trying to add duplicate event #{0} for stream {1}(hash {2})\nCommit: {3}\nPrepare: {4}.", eventNumber, eventStreamId, streamHash, commit, prepare)); } } #endif _tableIndex.Add(commit.LogPosition, streamHash, eventNumber, prepare.LogPosition); _bus.Publish(new StorageMessage.EventCommited(commit.LogPosition, eventNumber, prepare)); } } if (first) { throw new Exception("No prepares for commit found!"); } var newLastCommitPosition = commit.LogPosition > lastCommitPosition ? commit.LogPosition : lastCommitPosition; if (Interlocked.CompareExchange(ref _lastCommitPosition, newLastCommitPosition, lastCommitPosition) != lastCommitPosition) { throw new Exception("Concurrency error in ReadIndex.Commit: _lastCommitPosition was modified during Commit execution!"); } _streamInfoCache.Put(streamId, key => new StreamCacheInfo(eventNumber, null), (key, old) => new StreamCacheInfo(eventNumber, old.Metadata)); }