private ClientMessage.ReadAllEventsBackwardCompleted NoData(ClientMessage.ReadAllEventsBackward msg, ReadAllResult result, TFPos pos, long lastCommitPosition, string error = null) { return(new ClientMessage.ReadAllEventsBackwardCompleted( msg.CorrelationId, result, error, ResolvedEvent.EmptyArray, null, false, msg.MaxCount, pos, TFPos.Invalid, TFPos.Invalid, lastCommitPosition)); }
public static ClientMessage.ReadAllEventsBackwardCompleted ReadAllEventsBackward(MiniClusterNode node, long position) { ClientMessage.ReadAllEventsBackwardCompleted readResult = null; var resetEvent = new ManualResetEventSlim(); var done = false; while (!done) { resetEvent.Reset(); var read = new ClientMessage.ReadAllEventsBackward(Guid.NewGuid(), Guid.NewGuid(), new CallbackEnvelope( msg => { readResult = (ClientMessage.ReadAllEventsBackwardCompleted)msg; resetEvent.Set(); }), -1, -1, 100, false, false, null, SystemAccount.Principal); node.Node.MainQueue.Publish(read); if (!resetEvent.Wait(_timeout)) { Assert.Fail("Timed out waiting for events to be read backward"); return(null); } if (readResult.Result == ReadAllResult.Error) { Assert.Fail("Failed to read backwards. Read result error: {0}", readResult.Error); return(null); } done = readResult.NextPos.CommitPosition < position; } return(readResult); }
void IHandle <ClientMessage.ReadAllEventsBackward> .Handle(ClientMessage.ReadAllEventsBackward msg) { if (msg.Expires < DateTime.Now) { return; } msg.Envelope.ReplyWith(ReadAllEventsBackward(msg)); }
void IHandle <ClientMessage.ReadAllEventsBackward> .Handle(ClientMessage.ReadAllEventsBackward msg) { if (msg.Expires < DateTime.UtcNow) { Log.Debug("Read All Stream Events Backward operation has expired for C:{0}/P:{1}. Operation Expired at {2}", msg.CommitPosition, msg.PreparePosition, msg.Expires); return; } msg.Envelope.ReplyWith(ReadAllEventsBackward(msg)); }
public TcpPackage CreateNetworkPackage() { lock (_corrIdLock) { var dto = new ClientMessage.ReadAllEventsBackward(_position.CommitPosition, _position.PreparePosition, _maxCount, _resolveLinkTos); return(new TcpPackage(TcpCommand.ReadAllEventsBackward, _corrId, dto.Serialize())); } }
private ClientMessage.ReadAllEventsBackwardCompleted ReadAllEventsBackward(ClientMessage.ReadAllEventsBackward msg) { using (HistogramService.Measure(_readerAllRangeHistogram)) { var pos = new TFPos(msg.CommitPosition, msg.PreparePosition); var lastCommitPosition = _readIndex.LastReplicatedPosition; try { if (msg.MaxCount > MaxPageSize) { throw new ArgumentException(string.Format("Read size too big, should be less than {0} items", MaxPageSize)); } if (pos == TFPos.HeadOfTf) { var checkpoint = _writerCheckpoint.Read(); pos = new TFPos(checkpoint, checkpoint); } if (pos.CommitPosition < 0 || pos.PreparePosition < 0) { return(NoData(msg, ReadAllResult.Error, pos, lastCommitPosition, "Invalid position.")); } if (msg.ValidationTfLastCommitPosition == lastCommitPosition) { return(NoData(msg, ReadAllResult.NotModified, pos, lastCommitPosition)); } var access = _readIndex.CheckStreamAccess(SystemStreams.AllStream, StreamAccessType.Read, msg.User); if (!access.Granted) { return(NoData(msg, ReadAllResult.AccessDenied, pos, lastCommitPosition)); } var res = _readIndex.ReadAllEventsBackward(pos, msg.MaxCount); var resolved = ResolveReadAllResult(res.Records, msg.ResolveLinkTos, msg.User); if (resolved == null) { return(NoData(msg, ReadAllResult.AccessDenied, pos, lastCommitPosition)); } var metadata = _readIndex.GetStreamMetadata(SystemStreams.AllStream); return(new ClientMessage.ReadAllEventsBackwardCompleted( msg.CorrelationId, ReadAllResult.Success, null, resolved, metadata, access.Public, msg.MaxCount, res.CurrentPos, res.NextPos, res.PrevPos, lastCommitPosition)); } catch (Exception exc) { Log.ErrorException(exc, "Error during processing ReadAllEventsBackward request."); return(NoData(msg, ReadAllResult.Error, pos, lastCommitPosition, exc.Message)); } } }
void IHandle <ClientMessage.ReadAllEventsBackward> .Handle(ClientMessage.ReadAllEventsBackward message) { var pos = new TFPos(message.CommitPosition, message.PreparePosition); if (pos == new TFPos(-1, -1)) { var checkpoint = _writerCheckpoint.Read(); pos = new TFPos(checkpoint, checkpoint); } var result = _readIndex.ReadAllEventsBackward(pos, message.MaxCount, message.ResolveLinks); message.Envelope.ReplyWith(new ClientMessage.ReadAllEventsBackwardCompleted(message.CorrelationId, result)); }
public Task <AllEventsSlice> ReadAllEventsBackwardAsync(Position position, int maxCount, bool resolveLinkTos, UserCredentials userCredentials = null) { Ensure.Positive(maxCount, "maxCount"); var source = new TaskCompletionSource <AllEventsSlice>(); var envelope = new EmbeddedResponseEnvelope(new EmbeddedResponders.ReadAllEventsBackward(source)); Guid corrId = Guid.NewGuid(); var message = new ClientMessage.ReadAllEventsBackward(corrId, corrId, envelope, position.CommitPosition, position.PreparePosition, maxCount, resolveLinkTos, false, null, SystemAccount.Principal); _publisher.Publish(message); return(source.Task); }
private void HandleAsNonMaster(ClientMessage.ReadAllEventsBackward message) { if (message.RequireMaster) { if (_master == null) { DenyRequestBecauseNotReady(message.Envelope, message.CorrelationId); } else { DenyRequestBecauseNotMaster(message.CorrelationId, message.Envelope); } } else { _outputBus.Publish(message); } }
private ClientMessage.ReadAllEventsBackwardCompleted ReadAllEventsBackward(ClientMessage.ReadAllEventsBackward msg) { var pos = new TFPos(msg.CommitPosition, msg.PreparePosition); try { if (pos == TFPos.HeadOfTf) { var checkpoint = _writerCheckpoint.Read(); pos = new TFPos(checkpoint, checkpoint); } if (pos.CommitPosition < 0 || pos.PreparePosition < 0) { return(NoData(msg, ReadAllResult.Error, pos, "Invalid position.")); } if (msg.ValidationTfEofPosition.HasValue && _readIndex.LastCommitPosition == msg.ValidationTfEofPosition.Value) { return(NoData(msg, ReadAllResult.NotModified, pos)); } var access = _readIndex.CheckStreamAccess(SystemStreams.AllStream, StreamAccessType.Read, msg.User); if (!access.Granted) { return(NoData(msg, ReadAllResult.AccessDenied, pos)); } var res = _readIndex.ReadAllEventsBackward(pos, msg.MaxCount); var resolved = ResolveReadAllResult(res.Records, msg.ResolveLinkTos, msg.User); if (resolved == null) { return(NoData(msg, ReadAllResult.AccessDenied, pos)); } return(new ClientMessage.ReadAllEventsBackwardCompleted( msg.CorrelationId, ReadAllResult.Success, null, resolved, res.Metadata, access.Public, msg.MaxCount, res.CurrentPos, res.NextPos, res.PrevPos, res.TfEofPosition)); } catch (Exception exc) { Log.ErrorException(exc, "Error during processing ReadAllEventsBackward request."); return(NoData(msg, ReadAllResult.Error, pos, exc.Message)); } }
void IHandle <ClientMessage.ReadAllEventsBackward> .Handle(ClientMessage.ReadAllEventsBackward msg) { msg.Envelope.ReplyWith(ReadAllEventsBackward(msg)); }