diff --git a/fdbrpc/AsyncFileCached.actor.cpp b/fdbrpc/AsyncFileCached.actor.cpp index ef73c13bd0..ec5b6f6e73 100644 --- a/fdbrpc/AsyncFileCached.actor.cpp +++ b/fdbrpc/AsyncFileCached.actor.cpp @@ -19,7 +19,6 @@ */ #include "fdbrpc/AsyncFileCached.actor.h" -#include "flow/actorcompiler.h" // This must be the last #include. //Page caches used in non-simulated environments Optional> pc4k, pc64k; @@ -253,33 +252,23 @@ Future AsyncFileCached::changeFileSize( int64_t size ) { }); } -ACTOR static Future flushActor(AsyncFileCached* self) { - state std::vector> unflushed; - state int debug_count = self->getFlushable().size(); - state int i = 0; - state AFCPage* p; - - for (; i < self->getFlushable().size();) { - p = self->getFlushable()[i]; - // Wait for rate control if it is set - if (self->getRateControl()) wait(self->getRateControl()->getAllowance(1)); - auto f = p->flush(); - if (!f.isReady() || f.isError()) unflushed.push_back( f ); - ASSERT((i < self->getFlushable().size() && self->getFlushable()[i] == p) != f.isReady()); - if (!f.isReady()) i++; - } - - ASSERT(self->getFlushable().size() <= debug_count); - wait(waitForAll(unflushed)); - - return Void(); -} - Future AsyncFileCached::flush() { ++countFileCacheWrites; ++countCacheWrites; - return flushActor(this); + std::vector> unflushed; + + int debug_count = flushable.size(); + for(int i=0; iflush(); + if (!f.isReady() || f.isError()) unflushed.push_back( f ); + ASSERT( (i AsyncFileCached::quiesce() { diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 3b328944a2..95e694a9a2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -512,6 +512,10 @@ struct AFCPage : public EvictablePage, public FastAllocated { wait( self->notReading && self->notFlushing ); if (dirty) { + // Wait for rate control if it is set + if (self->owner->getRateControl()) + wait(self->owner->getRateControl()->getAllowance(1)); + if ( self->pageOffset + self->pageCache->pageSize > self->owner->length ) { ASSERT(self->pageOffset < self->owner->length); memset( static_cast(self->data) + self->owner->length - self->pageOffset, 0, self->pageCache->pageSize - (self->owner->length - self->pageOffset) );