#pragma once #include #include #include #include class ChunkBalancerJob; class StripePatternUpdateMsgEx : public MirroredMessage { public: typedef ErrorCodeResponseState ResponseState; virtual bool processIncoming(ResponseContext& ctx) override; std::unique_ptr executeLocally(ResponseContext& ctx, bool isSecondary) override; FileIDLock lock(EntryLockStore& store) override; bool isMirrored() override { return getEntryInfo()->getIsBuddyMirrored(); } private: Mutex ChunkBalanceJobMutex; Mutex StripePatternUpdateMutex; Condition StripePatternUpdateCond; ChunkBalancerJob* addChunkBalanceJob(); void waitForStripePatternUpdate(); void forwardToSecondary(ResponseContext& ctx) override; FhgfsOpsErr processSecondaryResponse(NetMessage& resp) override { return static_cast(static_cast(resp).getValue()); } const char* mirrorLogContext() const override { return "StripePatternUpdateMsgEx/forward"; } };