Add logging to LogRouter's waitForVersion function (#11359)

* Add logging to waitForVersion

* Respond to review comments.

---------

Co-authored-by: Dan Lambright <hlambright@apple.com>
This commit is contained in:
Dan Lambright 2024-05-03 17:04:51 -04:00 committed by GitHub
parent 3f8fcf5d0f
commit 5d6333fab9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 23 additions and 2 deletions

View File

@ -256,6 +256,7 @@ ACTOR Future<Void> waitForVersion(LogRouterData* self, Version ver) {
// The only time the log router should allow a gap in versions larger than MAX_READ_TRANSACTION_LIFE_VERSIONS is
// when processing epoch end. Since one set of log routers is created per generation of transaction logs, the gap
// caused by epoch end will be within MAX_VERSIONS_IN_FLIGHT of the log routers start version.
state double startTime = now();
if (self->version.get() < self->startVersion) {
// Log router needs to wait for remote tLogs to process data, whose version is less than self->startVersion,
@ -297,6 +298,26 @@ ACTOR Future<Void> waitForVersion(LogRouterData* self, Version ver) {
return Void();
}
ACTOR Future<Void> waitForVersionAndLog(LogRouterData* self, Version ver) {
state Future<Void> f = waitForVersion(self, ver);
state double emitInterval = 60.0;
loop {
choose {
when(wait(f)) {
return Void();
}
when(wait(delay(emitInterval))) {
TraceEvent("LogRouterWaitForVersionLongDelay", self->dbgid)
.detail("WaitForVersion", ver)
.detail("StartVersion", self->startVersion)
.detail("Version", self->version.get())
.detail("MinPopped", self->minPopped.get())
.detail("FoundEpochEnd", self->foundEpochEnd);
}
}
}
}
ACTOR Future<Reference<ILogSystem::IPeekCursor>> getPeekCursorData(LogRouterData* self,
Reference<ILogSystem::IPeekCursor> r,
Version startVersion) {
@ -379,7 +400,7 @@ ACTOR Future<Void> pullAsyncData(LogRouterData* self) {
if (!foundMessage || r->version().version != ver) {
ASSERT(r->version().version > lastVer);
if (ver) {
wait(waitForVersion(self, ver));
wait(waitForVersionAndLog(self, ver));
commitMessages(self, ver, messages);
self->version.set(ver);
@ -394,7 +415,7 @@ ACTOR Future<Void> pullAsyncData(LogRouterData* self) {
if (!foundMessage) {
ver--; // ver is the next possible version we will get data for
if (ver > self->version.get() && ver >= r->popped()) {
wait(waitForVersion(self, ver));
wait(waitForVersionAndLog(self, ver));
self->version.set(ver);
wait(yield(TaskPriority::TLogCommit));