public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { newSharedState = null; emittedEvents = null; newState = null; if (data.EventStreamId != data.PositionStreamId) return false; var indexedEventType = data.EventType; if (indexedEventType == "$>") return false; string positionStreamId; var isStreamDeletedEvent = StreamDeletedHelper.IsStreamDeletedEvent( data.PositionStreamId, data.EventType, data.Data, out positionStreamId); if (isStreamDeletedEvent) indexedEventType = "$deleted"; emittedEvents = new[] { new EmittedEventEnvelope( new EmittedDataEvent( _indexStreamPrefix + indexedEventType, Guid.NewGuid(), "$>", false, data.EventSequenceNumber + "@" + positionStreamId, isStreamDeletedEvent ? new ExtraMetaData(new Dictionary<string, JRaw> {{"$deleted", new JRaw(-1)}}) : null, eventPosition, expectedTag: null)) }; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEventEnvelope[] emittedEvents) { emittedEvents = null; newState = null; if (data.PositionSequenceNumber != 0) return false; // not our event if (data.EventStreamId.StartsWith("$")) return false; var lastSlashPos = data.EventStreamId.LastIndexOf(_separator); if (lastSlashPos < 0) return true; // handled but not interesting to us var category = data.EventStreamId.Substring(0, lastSlashPos); emittedEvents = new[] { new EmittedEventEnvelope( new EmittedDataEvent( "$category" + _separator + category, Guid.NewGuid(), SystemEventTypes.StreamReference, false, data.EventStreamId, null, eventPosition, expectedTag: null)) }; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEventEnvelope[] emittedEvents) { emittedEvents = null; newState = null; if (data.PositionStreamId.StartsWith("$")) return false; var lastSlashPos = data.PositionStreamId.LastIndexOf(_separator); if (lastSlashPos < 0) return true; // handled but not interesting to us var category = data.PositionStreamId.Substring(0, lastSlashPos); string linkTarget; if (data.EventType == SystemEventTypes.LinkTo) linkTarget = data.Data; else linkTarget = data.EventSequenceNumber + "@" + data.EventStreamId; emittedEvents = new[] { new EmittedEventEnvelope( new EmittedLinkToWithRecategorization( _categoryStreamPrefix + category, Guid.NewGuid(), linkTarget, eventPosition, expectedTag: null, originalStreamId: data.PositionStreamId)) }; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { newSharedState = null; if (!data.EventStreamId.StartsWith(UserStreamPrefix)) throw new InvalidOperationException( string.Format( "Invalid stream name: '{0}' The IndexUsersProjectionHandler cannot handle events from other streams than named after the '$user-' pattern", data.EventStreamId)); var loginName = data.EventStreamId.Substring(UserStreamPrefix.Length); var userData = data.Data.ParseJson<UserData>(); if (userData.LoginName != loginName) throw new InvalidOperationException( string.Format( "Invalid $UserCreated event found. '{0}' login name expected, but '{1}' found", loginName, userData.LoginName)); emittedEvents = new[] { new EmittedEventEnvelope( new EmittedDataEvent( UsersStream, Guid.NewGuid(), UserEventType, false, loginName, null, eventPosition, null)) }; newState = ""; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { newSharedState = null; emittedEvents = null; newState = null; if (data.PositionSequenceNumber != 0) return false; // not our event var category = _streamCategoryExtractor.GetCategoryByStreamId(data.PositionStreamId); if (category == null) return true; // handled but not interesting emittedEvents = new[] { new EmittedEventEnvelope( new EmittedDataEvent( "$category" + "-" + category, Guid.NewGuid(), SystemEventTypes.StreamReference, false, data.PositionStreamId, null, eventPosition, expectedTag: null)) }; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { newSharedState = null; emittedEvents = null; newState = null; var category = _streamCategoryExtractor.GetCategoryByStreamId(data.PositionStreamId); if (category == null) return true; // handled but not interesting string linkTarget; if (data.EventType == SystemEventTypes.LinkTo) linkTarget = data.Data; else linkTarget = data.EventSequenceNumber + "@" + data.EventStreamId; emittedEvents = new[] { new EmittedEventEnvelope( new EmittedLinkToWithRecategorization( _categoryStreamPrefix + category, Guid.NewGuid(), linkTarget, eventPosition, expectedTag: null, originalStreamId: data.PositionStreamId)) }; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEventEnvelope[] emittedEvents) { emittedEvents = null; newState = null; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEvent[] emittedEvents) { if (data.EventType == "fail" || _query == "fail") throw new Exception("failed"); _logger("ProcessEvent(" + "..." + ")"); newState = "{\"data\": " + _state + data + "}"; emittedEvents = null; return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { newSharedState = null; if (data.EventType == "fail" || _query == "fail") throw new Exception("failed"); Log("ProcessEvent(" + "..." + ")"); newState = "{\"data\": 1}"; emittedEvents = null; return true; }
public void returns_emitted_events() { var e = new ResolvedEvent( "stream", 0, "stream", 0, false, new TFPos(1000, 900), Guid.NewGuid(), "event", true, "{}", "{\"m\":1}"); EmittedEventEnvelope[] emittedEvents; _stateHandler.ProcessPartitionCreated( "partition", CheckpointTag.FromPosition(0, 10, 5), e, out emittedEvents); Assert.IsNotNull(emittedEvents); Assert.AreEqual(1, emittedEvents.Length); Assert.AreEqual("stream1", emittedEvents[0].Event.StreamId); Assert.AreEqual("event1", emittedEvents[0].Event.EventType); Assert.AreEqual("{\"a\":1}", emittedEvents[0].Event.Data); }
protected override void Given() { base.Given(); _streams = new[] {"pa", "pb"}; ExistingEvent("a", "test1", "{}", "{}"); ExistingEvent("b", "test1", "{}", "{}"); ExistingEvent("pa", "$>", "1@a", "{$o:\"oa\"}"); ExistingEvent("pb", "$>", "1@b", "{$o:\"ob\"}"); _event1 = new ResolvedEvent("pa", 1, "a", 1, true, new TFPos(200, 150), Guid.NewGuid(), "test1", true, "{}", "{}", "{$o:\"oa\""); _event2 = new ResolvedEvent("pb", 1, "b", 1, true, new TFPos(300, 250), Guid.NewGuid(), "test1", true, "{}", "{}", "{$o:\"ob\""); NoOtherStreams(); AllWritesSucceed(); }
public void invokes_created_handler() { var e = new ResolvedEvent( "stream", 0, "stream", 0, false, new TFPos(1000, 900), Guid.NewGuid(), "event", true, "{}", "{\"m\":1}"); EmittedEventEnvelope[] emittedEvents; _stateHandler.ProcessPartitionCreated( "partition", CheckpointTag.FromPosition(0, 10, 5), e, out emittedEvents); Assert.AreEqual(5, _logged.Count); Assert.AreEqual(@"handler-invoked", _logged[0]); Assert.AreEqual(@"stream", _logged[1]); Assert.AreEqual(@"event", _logged[2]); Assert.AreEqual(@"{}", _logged[3]); Assert.AreEqual(@"{""m"":1}", _logged[4]); }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEvent[] emittedEvents) { emittedEvents = null; newState = null; if (data.EventSequenceNumber != 0) return false; // not our event emittedEvents = new[] { new EmittedDataEvent( SystemStreams.StreamsStream, Guid.NewGuid(), SystemEventTypes.LinkTo, data.EventSequenceNumber + "@" + data.EventStreamId, null, eventPosition, expectedTag: null) }; return true; }
public string GetStatePartition( CheckpointTag eventPosition, string category, ResolvedEvent @event) { CheckDisposed(); if (@event == null) throw new ArgumentNullException("event"); var partition = _query.GetPartition( @event.Data.Trim(), // trimming data passed to a JS new string[] { @event.EventStreamId, @event.IsJson ? "1" : "", @event.EventType, category ?? "", @event.EventSequenceNumber.ToString(CultureInfo.InvariantCulture), @event.Metadata ?? "", @event.PositionMetadata ?? "" }); if (partition == "") return null; else return partition; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data, out string newState, out EmittedEvent[] emittedEvents) { emittedEvents = null; newState = null; if (data.EventStreamId != data.PositionStreamId) return false; if (data.EventType == "$>") return false; emittedEvents = new[] { new EmittedDataEvent( _indexStreamPrefix + data.EventType, Guid.NewGuid(), "$>", data.EventSequenceNumber + "@" + data.EventStreamId, null, eventPosition, expectedTag: null) }; return true; }
public static CommittedEventReceived Sample( ResolvedEvent data, CheckpointTag checkpointTag, Guid subscriptionId, long subscriptionMessageSequenceNumber) { return new CommittedEventReceived( subscriptionId, checkpointTag, null, data, 77.7f, subscriptionMessageSequenceNumber, null); }
public string TransformCatalogEvent(CheckpointTag eventPosition, ResolvedEvent data) { throw new NotImplementedException(); }
public CommittedEventDistributed(Guid correlationId, ResolvedEvent data, CheckpointTag preTagged = null) : this(correlationId, data, data.Position.PreparePosition, 11.1f, preTagged) { }
public string GetStatePartition(CheckpointTag eventPosition, string category, ResolvedEvent data) { throw new NotImplementedException(); }
public string TransformCatalogEvent(CheckpointTag position, ResolvedEvent @event) { return(_stateHandler.TransformCatalogEvent(position, @event)); }
public abstract void RecordEventOrder(ResolvedEvent resolvedEvent, CheckpointTag orderCheckpointTag, Action committed);
public bool ProcessPartitionCreated(string partition, CheckpointTag createPosition, ResolvedEvent data, out EmittedEventEnvelope[] emittedEvents) { CheckDisposed(); _eventPosition = createPosition; _emittedEvents = null; var newStates = _query.NotifyCreated( data.Data.Trim(), // trimming data passed to a JS new[] { data.IsJson ? "1" : "", data.EventStreamId, data.EventType, "", data.EventSequenceNumber.ToString(CultureInfo.InvariantCulture), data.Metadata ?? "", data.PositionMetadata ?? "", partition, "" }); emittedEvents = _emittedEvents == null ? null : _emittedEvents.ToArray(); return true; }
public bool ProcessEvent( string partition, CheckpointTag eventPosition, string category, ResolvedEvent data, out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents) { CheckDisposed(); if (data == null) throw new ArgumentNullException("data"); _eventPosition = eventPosition; _emittedEvents = null; var newStates = _query.Push( data.Data.Trim(), // trimming data passed to a JS new[] { data.IsJson ? "1" : "", data.EventStreamId, data.EventType, category ?? "", data.EventSequenceNumber.ToString(CultureInfo.InvariantCulture), data.Metadata ?? "", data.PositionMetadata ?? "", partition, "" }); newState = newStates.Item1; newSharedState = newStates.Item2; /* try { if (!string.IsNullOrEmpty(newState)) { var jo = newState.ParseJson<JObject>(); } } catch (InvalidCastException) { Console.Error.WriteLine(newState); } catch (JsonException) { Console.Error.WriteLine(newState); }*/ emittedEvents = _emittedEvents == null ? null : _emittedEvents.ToArray(); return true; }
public string TransformCatalogEvent(CheckpointTag eventPosition, ResolvedEvent data) { CheckDisposed(); if (data == null) throw new ArgumentNullException("data"); return _query.TransformCatalogEvent( (data.Data ?? "").Trim(), // trimming data passed to a JS new[] { data.IsJson ? "1" : "", data.EventStreamId, data.EventType ?? "", "", data.EventSequenceNumber.ToString(CultureInfo.InvariantCulture), data.Metadata ?? "", data.PositionMetadata ?? "", data.EventStreamId, data.StreamMetadata ?? "" }); }
public override void RecordEventOrder( ResolvedEvent resolvedEvent, CheckpointTag orderCheckpointTag, Action committed) { committed(); }
public bool ProcessPartitionCreated(string partition, CheckpointTag createPosition, ResolvedEvent data, out EmittedEventEnvelope[] emittedEvents) { emittedEvents = null; return(false); }
private CommittedEventReceived( Guid subscriptionId, CheckpointTag checkpointTag, string eventCategory, ResolvedEvent data, float progress, long subscriptionMessageSequenceNumber, object source) : base(subscriptionId, checkpointTag, progress, subscriptionMessageSequenceNumber, source) { if (data == null) throw new ArgumentNullException("data"); _data = data; _eventCategory = eventCategory; }
private CommittedEventReceived( Guid subscriptionId, int phase, string eventCategory, ResolvedEvent data, float progress, long subscriptionMessageSequenceNumber) : this( subscriptionId, CheckpointTag.FromPosition(phase, data.Position.CommitPosition, data.Position.PreparePosition), eventCategory, data, progress, subscriptionMessageSequenceNumber, null) { }
public static IEnumerable <object[]> GetTestCases() { var assembly = typeof(SpecRunner).Assembly; var specs = assembly.GetManifestResourceNames().Where(x => x.EndsWith("-spec.json")); foreach (var spec in specs) { JsonDocument doc; using (var stream = assembly.GetManifestResourceStream(spec)) { doc = JsonDocument.Parse(stream !); } var projection = doc.RootElement.GetProperty("projection").GetString(); Assert.False(string.IsNullOrWhiteSpace(projection)); var projectionSourceName = assembly.GetManifestResourceNames() .SingleOrDefault(x => x.EndsWith($"{projection}.js")); Assert.NotNull(projectionSourceName); string source; using (var stream = assembly.GetManifestResourceStream(projectionSourceName !)) { Assert.NotNull(stream); using (var sr = new StreamReader(stream !)) { source = sr.ReadToEnd(); } } List <InputEventSequence> sequences = new(); foreach (var inputEvent in doc.RootElement.GetProperty("input").EnumerateArray()) { var stream = inputEvent.GetProperty("streamId").GetString(); Assert.NotNull(stream); var sequence = new InputEventSequence(stream !); sequences.Add(sequence); foreach (var e in inputEvent.GetProperty("events").EnumerateArray()) { var et = e.GetProperty("eventType").GetString(); Assert.NotNull(et); bool skip = false; if (e.TryGetProperty("skip", out var skipElement)) { skip = skipElement.GetBoolean(); } var initializedPartitions = new List <string>(); if (e.TryGetProperty("initializedPartitions", out var partitions)) { foreach (var element in partitions.EnumerateArray()) { initializedPartitions.Add(element.GetString() !); } } var expectedStates = new Dictionary <string, string?>(); int stateCount = 0; if (e.TryGetProperty("states", out var states)) { foreach (var state in states.EnumerateArray()) { stateCount++; var expectedStateNode = state.GetProperty("state"); var expectedState = expectedStateNode.ValueKind == JsonValueKind.Null ? null : expectedStateNode.GetRawText(); if (!expectedStates.TryAdd(state.GetProperty("partition").GetString() !, expectedState)) { throw new InvalidOperationException("Duplicate state"); } } } if (stateCount > 2) { throw new InvalidOperationException("Cannot specify more than 2 states"); } sequence.Events.Add(new InputEvent(et !, e.GetProperty("data").GetRawText(), e.TryGetProperty("metadata", out var metadata) ? metadata.GetRawText() : null, initializedPartitions, expectedStates, skip, e.TryGetProperty("eventId", out var idElement) && idElement.TryGetGuid(out var id) ? id: Guid.NewGuid())); } } var output = doc.RootElement.GetProperty("output"); var sdb = new SourceDefinitionBuilder(); var config = output.GetProperty("config"); foreach (var item in config.EnumerateObject()) { switch (item.Name) { case "definesStateTransform": if (item.Value.GetBoolean()) { sdb.SetDefinesStateTransform(); } break; case "handlesDeletedNotifications": sdb.SetHandlesStreamDeletedNotifications(item.Value.GetBoolean()); break; case "producesResults": if (item.Value.GetBoolean()) { sdb.SetOutputState(); } break; case "definesFold": if (item.Value.GetBoolean()) { sdb.SetDefinesFold(); } break; case "resultStreamName": sdb.SetResultStreamNameOption(item.Value.GetString()); break; case "partitionResultStreamNamePattern": sdb.SetPartitionResultStreamNamePatternOption(item.Value.GetString()); break; case "$includeLinks": sdb.SetIncludeLinks(item.Value.GetBoolean()); break; case "reorderEvents": sdb.SetReorderEvents(item.Value.GetBoolean()); break; case "processingLag": sdb.SetProcessingLag(item.Value.GetInt32()); break; case "biState": sdb.SetIsBiState(item.Value.GetBoolean()); break; case "categories": foreach (var c in item.Value.EnumerateArray()) { sdb.FromCategory(c.GetString()); } break; case "partitioned": if (item.Value.GetBoolean()) { sdb.SetByCustomPartitions(); } break; case "events": foreach (var e in item.Value.EnumerateArray()) { sdb.IncludeEvent(e.GetString()); } break; case "allEvents": if (item.Value.GetBoolean()) { sdb.AllEvents(); } else { sdb.NotAllEvents(); } break; case "allStreams": if (item.Value.GetBoolean()) { sdb.FromAll(); } break; default: throw new Exception($"unexpected property in expected config {item.Name}"); } } #nullable disable List <OutputEvent> expectedEmittedEvents = new(); if (output.TryGetProperty("emitted", out var expectedEmittedElement)) { foreach (var element in expectedEmittedElement.EnumerateObject()) { var stream = element.Name; foreach (var eventElement in element.Value.EnumerateArray()) { if (eventElement.ValueKind == JsonValueKind.String) { expectedEmittedEvents.Add( new OutputEvent(stream, "$>", eventElement.GetString(), null)); } } } } JintProjectionStateHandler runner = null; IQuerySources definition = null; IQuerySources expectedDefinition = sdb.Build(); yield return(WithOutput($"{projection} compiles", o => { runner = new JintProjectionStateHandler(source, true, TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(100)); })); yield return(For($"{projection} getDefinition", () => { definition = runner.GetSourceDefinition(); })); yield return(For($"{projection} qs.AllStreams", () => Assert.Equal(expectedDefinition.AllStreams, definition.AllStreams))); yield return(For($"{projection} qs.Categories", () => Assert.Equal(expectedDefinition.Categories, definition.Categories))); yield return(For($"{projection} qs.Streams", () => Assert.Equal(expectedDefinition.Streams, definition.Streams))); yield return(For($"{projection} qs.AllEvents", () => Assert.Equal(expectedDefinition.AllEvents, definition.AllEvents))); yield return(For($"{projection} qs.Events", () => Assert.Equal(expectedDefinition.Events, definition.Events))); yield return(For($"{projection} qs.ByStreams", () => Assert.Equal(expectedDefinition.ByStreams, definition.ByStreams))); yield return(For($"{projection} qs.ByCustomPartitions", () => Assert.Equal(expectedDefinition.ByCustomPartitions, definition.ByCustomPartitions))); yield return(For($"{projection} qs.DefinesStateTransform", () => Assert.Equal(expectedDefinition.DefinesStateTransform, definition.DefinesStateTransform))); yield return(For($"{projection} qs.DefinesFold", () => Assert.Equal(expectedDefinition.DefinesFold, definition.DefinesFold))); yield return(For($"{projection} qs.HandlesDeletedNotifications", () => Assert.Equal(expectedDefinition.HandlesDeletedNotifications, definition.HandlesDeletedNotifications))); yield return(For($"{projection} qs.ProducesResults", () => Assert.Equal(expectedDefinition.ProducesResults, definition.ProducesResults))); yield return(For($"{projection} qs.IsBiState", () => Assert.Equal(expectedDefinition.IsBiState, definition.IsBiState))); yield return(For($"{projection} qs.IncludeLinksOption", () => Assert.Equal(expectedDefinition.IncludeLinksOption, definition.IncludeLinksOption))); yield return(For($"{projection} qs.ResultStreamNameOption", () => Assert.Equal(expectedDefinition.ResultStreamNameOption, definition.ResultStreamNameOption))); yield return(For($"{projection} qs.PartitionResultStreamNamePatternOption", () => Assert.Equal(expectedDefinition.PartitionResultStreamNamePatternOption, definition.PartitionResultStreamNamePatternOption))); yield return(For($"{projection} qs.ReorderEventsOption", () => Assert.Equal(expectedDefinition.ReorderEventsOption, definition.ReorderEventsOption))); yield return(For($"{projection} qs.ProcessingLagOption", () => Assert.Equal(expectedDefinition.ProcessingLagOption, definition.ProcessingLagOption))); yield return(For($"{projection} qs.LimitingCommitPosition", () => Assert.Equal(expectedDefinition.LimitingCommitPosition, definition.LimitingCommitPosition))); var partitionedState = new Dictionary <string, string>(); var sharedStateInitialized = false; var revision = new Dictionary <string, long>(); List <EmittedEventEnvelope> actualEmittedEvents = new(); for (int i = 0; i < sequences.Count; i++) { var sequence = sequences[i]; if (!revision.TryGetValue(sequence.Stream, out _)) { revision[sequence.Stream] = 0; } for (int j = 0; j < sequences[i].Events.Count; j++) { var logPosition = i * 100 + j; var flags = PrepareFlags.IsJson | PrepareFlags.Data; if (j == 0) { flags |= PrepareFlags.TransactionBegin; } if (j == sequence.Events.Count - 1) { flags |= PrepareFlags.TransactionEnd; } /*Sequence: * Get partition if bycustom partition or by stream * if the partition is null or an empty string skip this event (NB: need to indicate that an event should be skipped) * load the state if it doesn't exist or tell the projection to init state * init shared if it doesn't exist * if init was state was called, call created * if processing a delete, call partition deleted (NB: bistate partitions do not support deletes) * process the event * save any shared state if it isn't null * save any state * save emitted events to verify later */ var @event = sequence.Events[j]; var body = JObject.Parse(@event.Body).ToString(Formatting.Indented); var metadata = Array.Empty <byte>(); if (@event.Metadata != null) { metadata = Utf8NoBom.GetBytes(JObject.Parse(@event.Metadata).ToString(Formatting.Indented)); } var er = new EventRecord( revision[sequence.Stream], logPosition, Guid.NewGuid(), @event.EventId, i, j, sequence.Stream, i, DateTime.Now, flags, @event.EventType, Utf8NoBom.GetBytes(body), metadata); var e = new ResolvedEvent(EventStore.Core.Data.ResolvedEvent.ForUnresolvedEvent(er, logPosition), Array.Empty <byte>()); if (@event.Skip) { yield return(For($"{projection} skips {er.EventNumber}@{sequence.Stream}", () => Assert.Null(runner.GetStatePartition(CheckpointTag.Empty, "", e)))); } else { var expectedPartition = ""; if (expectedDefinition.DefinesFold) { if (@event.ExpectedStates.Any()) { expectedPartition = @event.ExpectedStates .SingleOrDefault(x => string.Empty != x.Key).Key ?? string.Empty; if (expectedPartition != string.Empty) { yield return(For( $"{projection} {er.EventNumber}@{sequence.Stream} returns expected partition", () => Assert.Equal(expectedPartition, runner.GetStatePartition(CheckpointTag.Empty, "", e)))); foreach (var initializedState in @event.InitializedPartitions) { yield return(For( $"should not have already initialized \"{initializedState}\" at {er.EventNumber}@{sequence.Stream}", () => Assert.DoesNotContain(initializedState, (IReadOnlyDictionary <string, string>)partitionedState))); } } if (expectedDefinition.IsBiState && !sharedStateInitialized) { sharedStateInitialized = true; yield return(For("initializes shared state without error", () => { runner.InitializeShared(); })); } if ([email protected](expectedPartition)) { yield return(For( $"can load current state at {er.EventNumber}@{sequence.Stream}", () => { Assert.True( partitionedState.TryGetValue(expectedPartition, out var value), $"did not find expected state for partition{expectedPartition}"); runner.Load(value); }));
public string GetStatePartition(CheckpointTag eventPosition, string category, ResolvedEvent data) { _logger("GetStatePartition(" + "..." + ")"); throw new NotImplementedException(); }
public string GetStatePartition(CheckpointTag eventPosition, string category, ResolvedEvent data) { _logger("GetStatePartition(" + "..." + ")"); return @data.EventStreamId; }
private CommittedEventReceived( Guid correlationId, Guid subscriptionId, EventPosition position, CheckpointTag checkpointTag, string positionStreamId, int positionSequenceNumber, string eventStreamId, int eventSequenceNumber, string eventCategory, bool resolvedLinkTo, ResolvedEvent data, float progress, long subscriptionMessageSequenceNumber) : base(subscriptionId, checkpointTag, progress, subscriptionMessageSequenceNumber) { if (data == null) throw new ArgumentNullException("data"); _data = data; _position = position; _positionStreamId = positionStreamId; _positionSequenceNumber = positionSequenceNumber; _eventStreamId = eventStreamId; _eventSequenceNumber = eventSequenceNumber; _eventCategory = eventCategory; _resolvedLinkTo = resolvedLinkTo; }
private CommittedEventReceived( Guid correlationId, Guid subscriptionId, EventPosition position, string eventStreamId, int eventSequenceNumber, string eventCategory, bool resolvedLinkTo, ResolvedEvent data, float progress, long subscriptionMessageSequenceNumber) : this( correlationId, subscriptionId, position, CheckpointTag.FromPosition(position.CommitPosition, position.PreparePosition), eventStreamId, eventSequenceNumber, eventStreamId, eventSequenceNumber, eventCategory, resolvedLinkTo, data, progress, subscriptionMessageSequenceNumber) { }
public bool ProcessPartitionCreated(string partition, CheckpointTag createPosition, ResolvedEvent data, out EmittedEventEnvelope[] emittedEvents) { emittedEvents = null; return false; }
public static CommittedEventReceived Sample( Guid correlationId, Guid subscriptionId, EventPosition position, string eventStreamId, int eventSequenceNumber, bool resolvedLinkTo, ResolvedEvent data, long subscriptionMessageSequenceNumber) { return new CommittedEventReceived( correlationId, subscriptionId, position, eventStreamId, eventSequenceNumber, null, resolvedLinkTo, data, 77.7f, subscriptionMessageSequenceNumber); }
private void DeliverEventRetrievedFromTf(EventStore.Core.Data.ResolvedEvent pair, float progress, TFPos position) { var resolvedEvent = new ResolvedEvent(pair, null); DeliverEvent(progress, resolvedEvent, position); }