This allows simpler code and cleaner separation between shared segment
creation and openning.
--- src/DiskIO/IpcIo/IpcIoFile.cc | 19 +++++++++++-------- src/MemStore.cc | 24 +++++++++++++++--------- src/fs/rock/RockSwapDir.cc | 23 ++++++++++++----------- src/ipc/mem/Pages.cc | 24 ++++++++++++++++++------ 4 files changed, 56 insertions(+), 34 deletions(-) diff --git src/DiskIO/IpcIo/IpcIoFile.cc src/DiskIO/IpcIo/IpcIoFile.cc index 9c59c11..13c0d00 100644 --- src/DiskIO/IpcIo/IpcIoFile.cc +++ src/DiskIO/IpcIo/IpcIoFile.cc @@ -767,14 +767,16 @@ DiskerClose(const String &path) /// initializes shared memory segments used by IpcIoFile -class IpcIoRr: public RegisteredRunner +class IpcIoRr: public Ipc::Mem::RegisteredRunner { public: /* RegisteredRunner API */ IpcIoRr(): owner(NULL) {} - virtual void run(const RunnerRegistry &); virtual ~IpcIoRr(); +protected: + virtual void create(const RunnerRegistry &); + private: Ipc::FewToFewBiQueue::Owner *owner; }; @@ -782,16 +784,17 @@ private: RunnerRegistrationEntry(rrAfterConfig, IpcIoRr); -void IpcIoRr::run(const RunnerRegistry &) +void IpcIoRr::create(const RunnerRegistry &) { if (!UsingSmp()) return; - if (IamMasterProcess()) { - Must(!owner); - // XXX: make capacity configurable - owner = Ipc::FewToFewBiQueue::Init(ShmLabel, Config.workers, 1, Config.cacheSwap.n_configured, 1 + Config.workers, sizeof(IpcIoMsg), 1024); - } + Must(!owner); + // XXX: make capacity configurable + owner = Ipc::FewToFewBiQueue::Init(ShmLabel, Config.workers, 1, + Config.cacheSwap.n_configured, + 1 + Config.workers, sizeof(IpcIoMsg), + 1024); } IpcIoRr::~IpcIoRr() diff --git src/MemStore.cc src/MemStore.cc index 4fa5575..aece423 100644 --- src/MemStore.cc +++ src/MemStore.cc @@ -343,7 +343,7 @@ MemStore::EntryLimit() /// initializes shared memory segments used by MemStore -class MemStoreRr: public RegisteredRunner +class MemStoreRr: public Ipc::Mem::RegisteredRunner { public: /* RegisteredRunner API */ @@ -351,6 +351,9 @@ public: virtual void run(const RunnerRegistry &); virtual ~MemStoreRr(); +protected: + virtual void create(const RunnerRegistry &); + private: MemStoreMap::Owner *owner; }; @@ -358,7 +361,7 @@ private: RunnerRegistrationEntry(rrAfterConfig, MemStoreRr); -void MemStoreRr::run(const RunnerRegistry &) +void MemStoreRr::run(const RunnerRegistry &r) { // decide whether to use a shared memory cache if the user did not specify if (!Config.memShared.configured()) { @@ -375,16 +378,19 @@ void MemStoreRr::run(const RunnerRegistry &) " a single worker is running"); } + Ipc::Mem::RegisteredRunner::run(r); +} + +void MemStoreRr::create(const RunnerRegistry &) +{ if (!Config.memShared) return; - if (IamMasterProcess()) { - Must(!owner); - const int64_t entryLimit = MemStore::EntryLimit(); - if (entryLimit <= 0) - return; // no memory cache configured or a misconfiguration - owner = MemStoreMap::Init(ShmLabel, entryLimit); - } + Must(!owner); + const int64_t entryLimit = MemStore::EntryLimit(); + if (entryLimit <= 0) + return; // no memory cache configured or a misconfiguration + owner = MemStoreMap::Init(ShmLabel, entryLimit); } MemStoreRr::~MemStoreRr() diff --git src/fs/rock/RockSwapDir.cc src/fs/rock/RockSwapDir.cc index 8b17ec3..d500ce4 100644 --- src/fs/rock/RockSwapDir.cc +++ src/fs/rock/RockSwapDir.cc @@ -766,13 +766,15 @@ Rock::SwapDir::statfs(StoreEntry &e) const /// initializes shared memory segments used by Rock::SwapDir -class RockSwapDirRr: public RegisteredRunner +class RockSwapDirRr: public Ipc::Mem::RegisteredRunner { public: /* RegisteredRunner API */ - virtual void run(const RunnerRegistry &); virtual ~RockSwapDirRr(); +protected: + virtual void create(const RunnerRegistry &); + private: Vector<Rock::SwapDir::DirMap::Owner *> owners; }; @@ -780,16 +782,15 @@ private: RunnerRegistrationEntry(rrAfterConfig, RockSwapDirRr); -void RockSwapDirRr::run(const RunnerRegistry &) +void RockSwapDirRr::create(const RunnerRegistry &) { - if (IamMasterProcess()) { - Must(owners.empty()); - for (int i = 0; i < Config.cacheSwap.n_configured; ++i) { - if (const Rock::SwapDir *const sd = dynamic_cast<Rock::SwapDir *>(INDEXSD(i))) { - // TODO: check whether entryLimitAllowed() has map here - Rock::SwapDir::DirMap::Owner *const owner = Rock::SwapDir::DirMap::Init(sd->path, sd->entryLimitAllowed()); - owners.push_back(owner); - } + Must(owners.empty()); + for (int i = 0; i < Config.cacheSwap.n_configured; ++i) { + if (const Rock::SwapDir *const sd = dynamic_cast<Rock::SwapDir *>(INDEXSD(i))) { + // TODO: check whether entryLimitAllowed() has map here + Rock::SwapDir::DirMap::Owner *const owner = + Rock::SwapDir::DirMap::Init(sd->path, sd->entryLimitAllowed()); + owners.push_back(owner); } } } diff --git src/ipc/mem/Pages.cc src/ipc/mem/Pages.cc index deecbf9..054938b 100644 --- src/ipc/mem/Pages.cc +++ src/ipc/mem/Pages.cc @@ -85,12 +85,14 @@ Ipc::Mem::PageLevel(const int purpose) } /// initializes shared memory pages -class SharedMemPagesRr: public RegisteredRunner +class SharedMemPagesRr: public Ipc::Mem::RegisteredRunner { public: /* RegisteredRunner API */ SharedMemPagesRr(): owner(NULL) {} virtual void run(const RunnerRegistry &); + virtual void create(const RunnerRegistry &); + virtual void open(const RunnerRegistry &); virtual ~SharedMemPagesRr(); private: @@ -100,7 +102,8 @@ private: RunnerRegistrationEntry(rrAfterConfig, SharedMemPagesRr); -void SharedMemPagesRr::run(const RunnerRegistry &) +void +SharedMemPagesRr::run(const RunnerRegistry &r) { if (!UsingSmp()) return; @@ -119,11 +122,20 @@ void SharedMemPagesRr::run(const RunnerRegistry &) return; } - if (IamMasterProcess()) { - Must(!owner); - owner = Ipc::Mem::PagePool::Init(PagePoolId, Ipc::Mem::PageLimit(), Ipc::Mem::PageSize()); - } + Ipc::Mem::RegisteredRunner::run(r); +} +void +SharedMemPagesRr::create(const RunnerRegistry &) +{ + Must(!owner); + owner = Ipc::Mem::PagePool::Init(PagePoolId, Ipc::Mem::PageLimit(), + Ipc::Mem::PageSize()); +} + +void +SharedMemPagesRr::open(const RunnerRegistry &) +{ Must(!ThePagePool); ThePagePool = new Ipc::Mem::PagePool(PagePoolId); } -- 1.7.6.3Received on Wed Sep 28 2011 - 23:07:19 MDT
This archive was generated by hypermail 2.2.0 : Thu Sep 29 2011 - 12:00:03 MDT