mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-15 10:22:20 +08:00
200k simulation: check stream sequence; delay in GetMore loop
This commit is contained in:
parent
2a88033800
commit
ae2268f9f2
@ -333,6 +333,7 @@ ACTOR Future<Void> serverPeekStreamGetMore(ILogSystem::ServerPeekCursor* self, T
|
|||||||
|
|
||||||
loop {
|
loop {
|
||||||
try {
|
try {
|
||||||
|
state Version expectedBegin = self->messageVersion.version;
|
||||||
state Future<TLogPeekReply> fPeekReply = self->peekReplyStream.present()
|
state Future<TLogPeekReply> fPeekReply = self->peekReplyStream.present()
|
||||||
? map(waitAndForward(self->peekReplyStream.get().getFuture()),
|
? map(waitAndForward(self->peekReplyStream.get().getFuture()),
|
||||||
[](const TLogPeekStreamReply& r) { return r.rep; })
|
[](const TLogPeekStreamReply& r) { return r.rep; })
|
||||||
@ -350,7 +351,11 @@ ACTOR Future<Void> serverPeekStreamGetMore(ILogSystem::ServerPeekCursor* self, T
|
|||||||
self->interf->get().interf().peekStreamMessages.getEndpoint().getPrimaryAddress(),
|
self->interf->get().interf().peekStreamMessages.getEndpoint().getPrimaryAddress(),
|
||||||
fPeekReply)
|
fPeekReply)
|
||||||
: Never())) {
|
: Never())) {
|
||||||
|
if (res.begin.get() != expectedBegin) {
|
||||||
|
throw operation_obsolete();
|
||||||
|
}
|
||||||
updateCursorWithReply(self, res);
|
updateCursorWithReply(self, res);
|
||||||
|
expectedBegin = res.end;
|
||||||
TraceEvent("SPC_GetMoreB", self->randomID)
|
TraceEvent("SPC_GetMoreB", self->randomID)
|
||||||
.detail("Has", self->hasMessage())
|
.detail("Has", self->hasMessage())
|
||||||
.detail("End", res.end)
|
.detail("End", res.end)
|
||||||
@ -364,8 +369,11 @@ ACTOR Future<Void> serverPeekStreamGetMore(ILogSystem::ServerPeekCursor* self, T
|
|||||||
}
|
}
|
||||||
} catch (Error& e) {
|
} catch (Error& e) {
|
||||||
TraceEvent(SevDebug, "SPC_GetMoreB_Error", self->randomID).detail("Error", e.what());
|
TraceEvent(SevDebug, "SPC_GetMoreB_Error", self->randomID).detail("Error", e.what());
|
||||||
if (e.code() == error_code_connection_failed || e.code() == error_code_operation_obsolete) {
|
|
||||||
self->peekReplyStream.reset();
|
self->peekReplyStream.reset();
|
||||||
|
if (e.code() == error_code_connection_failed || e.code() == error_code_operation_obsolete) {
|
||||||
|
// NOTE: delay in order to avoid the endless retry loop block other tasks
|
||||||
|
wait(delay(0));
|
||||||
} else if (e.code() == error_code_end_of_stream) {
|
} else if (e.code() == error_code_end_of_stream) {
|
||||||
self->end.reset(self->messageVersion.version);
|
self->end.reset(self->messageVersion.version);
|
||||||
return Void();
|
return Void();
|
||||||
@ -418,7 +426,7 @@ Future<Void> ILogSystem::ServerPeekCursor::getMore(TaskPriority taskID) {
|
|||||||
return Void();
|
return Void();
|
||||||
if (!more.isValid() || more.isReady()) {
|
if (!more.isValid() || more.isReady()) {
|
||||||
// TODO: remove locality check when log router support streaming peek
|
// TODO: remove locality check when log router support streaming peek
|
||||||
if (false && usePeekStream && tag.locality >= 0) {
|
if (usePeekStream && tag.locality >= 0) {
|
||||||
more = serverPeekStreamGetMore(this, taskID);
|
more = serverPeekStreamGetMore(this, taskID);
|
||||||
} else if (parallelGetMore || onlySpilled || futureResults.size()) {
|
} else if (parallelGetMore || onlySpilled || futureResults.size()) {
|
||||||
more = serverPeekParallelGetMore(this, taskID);
|
more = serverPeekParallelGetMore(this, taskID);
|
||||||
|
@ -1157,6 +1157,7 @@ ACTOR Future<Void> tLogPeekStream(TLogData* self, TLogPeekStreamRequest req, Ref
|
|||||||
}
|
}
|
||||||
|
|
||||||
reply.rep = future.get();
|
reply.rep = future.get();
|
||||||
|
reply.rep.begin = begin;
|
||||||
req.reply.send(reply);
|
req.reply.send(reply);
|
||||||
begin = reply.rep.end;
|
begin = reply.rep.end;
|
||||||
onlySpilled = reply.rep.onlySpilled;
|
onlySpilled = reply.rep.onlySpilled;
|
||||||
|
@ -1469,6 +1469,7 @@ ACTOR Future<Void> tLogPeekStream(TLogData* self, TLogPeekStreamRequest req, Ref
|
|||||||
}
|
}
|
||||||
|
|
||||||
reply.rep = future.get();
|
reply.rep = future.get();
|
||||||
|
reply.rep.begin = begin;
|
||||||
req.reply.send(reply);
|
req.reply.send(reply);
|
||||||
begin = reply.rep.end;
|
begin = reply.rep.end;
|
||||||
onlySpilled = reply.rep.onlySpilled;
|
onlySpilled = reply.rep.onlySpilled;
|
||||||
|
@ -1898,6 +1898,7 @@ ACTOR Future<Void> tLogPeekStream(TLogData* self, TLogPeekStreamRequest req, Ref
|
|||||||
}
|
}
|
||||||
|
|
||||||
reply.rep = future.get();
|
reply.rep = future.get();
|
||||||
|
reply.rep.begin = begin;
|
||||||
req.reply.send(reply);
|
req.reply.send(reply);
|
||||||
begin = reply.rep.end;
|
begin = reply.rep.end;
|
||||||
onlySpilled = reply.rep.onlySpilled;
|
onlySpilled = reply.rep.onlySpilled;
|
||||||
|
@ -1951,6 +1951,7 @@ ACTOR Future<Void> tLogPeekStream(TLogData* self, TLogPeekStreamRequest req, Ref
|
|||||||
}
|
}
|
||||||
|
|
||||||
reply.rep = future.get();
|
reply.rep = future.get();
|
||||||
|
reply.rep.begin = begin;
|
||||||
req.reply.send(reply);
|
req.reply.send(reply);
|
||||||
begin = reply.rep.end;
|
begin = reply.rep.end;
|
||||||
onlySpilled = reply.rep.onlySpilled;
|
onlySpilled = reply.rep.onlySpilled;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user