diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index e45adc57b4..e9420ce19d 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -206,6 +206,7 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { Void _ = wait(self->minPopped.whenAtLeast(std::min(self->version.get(), ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS))); commitMessages(self, ver, messages); self->version.set( ver ); + Void _ = wait(yield(TaskTLogCommit)); //TraceEvent("LogRouterVersion").detail("Ver",ver); } lastVer = ver; @@ -217,6 +218,7 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { if(ver > self->version.get()) { Void _ = wait(self->minPopped.whenAtLeast(std::min(self->version.get(), ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS))); self->version.set( ver ); + Void _ = wait(yield(TaskTLogCommit)); } break; } diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 36c0175f2d..984ec603df 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1477,14 +1477,14 @@ ACTOR Future pullAsyncData( TLogData* self, Reference logData, st Void _ = wait( delayJittered(.005, TaskTLogCommit) ); } - if(logData->stopped) { - return Void(); - } + state Version ver = 0; + state std::vector messages; + loop { + if(logData->stopped) { + return Void(); + } - Version ver = 0; - std::vector messages; - while (true) { - bool foundMessage = r->hasMessage(); + state bool foundMessage = r->hasMessage(); if (!foundMessage || r->version().version != ver) { ASSERT(r->version().version > lastVer); if (ver) { @@ -1519,6 +1519,7 @@ ACTOR Future pullAsyncData( TLogData* self, Reference logData, st //FIXME: could we just use the ver and lastVer variables, or replace them with this? self->prevVersion = logData->version.get(); logData->version.set( ver ); + Void _ = wait( yield(TaskTLogCommit) ); } lastVer = ver; ver = r->version().version; @@ -1556,6 +1557,7 @@ ACTOR Future pullAsyncData( TLogData* self, Reference logData, st //FIXME: could we just use the ver and lastVer variables, or replace them with this? self->prevVersion = logData->version.get(); logData->version.set( ver ); + Void _ = wait( yield(TaskTLogCommit) ); } break; }