private string ResolveEventText(string link) { var stream = SystemEventTypes.StreamReferenceEventToStreamId(SystemEventTypes.LinkTo, link); var eventNumber = SystemEventTypes.EventLinkToEventNumber(link); return(_streams[stream][eventNumber].EventType + ":" + Encoding.UTF8.GetString(_streams[stream][eventNumber].Data)); }
private string TransformCatalogEvent(CheckpointTag position, ResolvedEvent resolvedEvent) { if (_definesCatalogTransform) { return(_container.TransformCatalogEvent(position, resolvedEvent)); } return(SystemEventTypes.StreamReferenceEventToStreamId(resolvedEvent.EventType, resolvedEvent.Data)); }
public void BeginRead() { _streamId = SystemEventTypes.StreamReferenceEventToStreamId(_event.EventType, _event.Data); var requestId = _ioDispatcher.ReadBackward( SystemStreams.MetastreamOf(_streamId), -1, 1, false, Reader.ReadAs, ReadCompleted); if (requestId != Guid.Empty) { Reader._activeReads.Add(requestId); } }
private void EnqueueStreamForProcessing(EventStore.Core.Data.ResolvedEvent resolvedEvent) { //TODO: consider catalog referring to earlier written events (should we check here?) if (resolvedEvent.OriginalEvent.LogPosition > _limitingCommitPosition) { return; } var streamId = SystemEventTypes.StreamReferenceEventToStreamId(resolvedEvent.Event.EventType, resolvedEvent.Event.Data); _pendingStreams.Enqueue(streamId); _catalogNextSequenceNumber = resolvedEvent.OriginalEventNumber; }
protected override void ProcessEvent() { var channelGroup = _slaves.Channels["slave"]; var resolvedEvent = _message.Data; var streamId = SystemEventTypes.StreamReferenceEventToStreamId(resolvedEvent.EventType, resolvedEvent.Data); _loadBalancer.ScheduleTask( streamId, (streamId_, workerIndex) => { var channel = channelGroup[workerIndex]; _spoolRequestId = _spoolProcessingResponseDispatcher.PublishSubscribe( channel.PublishEnvelope, new ReaderSubscriptionManagement.SpoolStreamReading( channel.SubscriptionId, Guid.NewGuid(), streamId_, resolvedEvent.PositionSequenceNumber, _limitingCommitPosition), this); }); }
public ResolvedEvent(EventStore.Core.Data.ResolvedEvent resolvedEvent, byte[] streamMetadata) { var positionEvent = resolvedEvent.Link ?? resolvedEvent.Event; _linkOrEventPosition = resolvedEvent.OriginalPosition.GetValueOrDefault(); var @event = resolvedEvent.Event; _positionStreamId = positionEvent.EventStreamId; _positionSequenceNumber = positionEvent.EventNumber; _eventStreamId = @event != null ? @event.EventStreamId : null; _eventSequenceNumber = @event != null ? @event.EventNumber : -1; _resolvedLinkTo = positionEvent != @event; _position = resolvedEvent.OriginalPosition ?? new TFPos(-1, positionEvent.LogPosition); EventId = @event != null ? @event.EventId : Guid.Empty; EventType = @event != null ? @event.EventType : null; IsJson = @event != null && (@event.Flags & PrepareFlags.IsJson) != 0; Timestamp = positionEvent.TimeStamp; //TODO: handle utf-8 conversion exception Data = @event != null && @event.Data != null?Helper.UTF8NoBom.GetString(@event.Data) : null; Metadata = @event != null && @event.Metadata != null?Helper.UTF8NoBom.GetString(@event.Metadata) : null; PositionMetadata = _resolvedLinkTo ? (positionEvent.Metadata != null ? Helper.UTF8NoBom.GetString(positionEvent.Metadata) : null) : null; StreamMetadata = streamMetadata != null?Helper.UTF8NoBom.GetString(streamMetadata) : null; TFPos eventOrLinkTargetPosition; if (_resolvedLinkTo) { Dictionary <string, JToken> extraMetadata = null; if (positionEvent.Metadata != null && positionEvent.Metadata.Length > 0) { //TODO: parse JSON only when unresolved link and just tag otherwise CheckpointTag tag; if (resolvedEvent.Link != null && resolvedEvent.Event == null) { var checkpointTagJson = positionEvent.Metadata.ParseCheckpointTagVersionExtraJson(default(ProjectionVersion)); tag = checkpointTagJson.Tag; extraMetadata = checkpointTagJson.ExtraMetadata; var parsedPosition = tag.Position; eventOrLinkTargetPosition = parsedPosition != new TFPos(long.MinValue, long.MinValue) ? parsedPosition : new TFPos(-1, positionEvent.LogPosition); } else { tag = positionEvent.Metadata.ParseCheckpointTagJson(); var parsedPosition = tag.Position; if (parsedPosition == new TFPos(long.MinValue, long.MinValue) && @event.Metadata.IsValidJson()) { tag = @event.Metadata.ParseCheckpointTagJson(); if (tag != null) { parsedPosition = tag.Position; } } eventOrLinkTargetPosition = parsedPosition != new TFPos(long.MinValue, long.MinValue) ? parsedPosition : new TFPos(-1, resolvedEvent.Event.LogPosition); } } else { eventOrLinkTargetPosition = @event != null ? new TFPos(-1, @event.LogPosition) : new TFPos(-1, positionEvent.LogPosition); } JToken deletedValue; IsLinkToDeletedStreamTombstone = extraMetadata != null && extraMetadata.TryGetValue("$deleted", out deletedValue); if (resolvedEvent.ResolveResult == ReadEventResult.NoStream || resolvedEvent.ResolveResult == ReadEventResult.StreamDeleted || IsLinkToDeletedStreamTombstone) { IsLinkToDeletedStream = true; var streamId = SystemEventTypes.StreamReferenceEventToStreamId( SystemEventTypes.LinkTo, resolvedEvent.Link.Data); _eventStreamId = streamId; } } else { // not a link eventOrLinkTargetPosition = resolvedEvent.OriginalPosition ?? new TFPos(-1, positionEvent.LogPosition); } _eventOrLinkTargetPosition = eventOrLinkTargetPosition; }