#pragma once #include #include #include #include #include #include #include /** * Similar to class MsgHelperMkFile, but called with a create pattern, for example from fhgfs-ctl * or from ioctl calls. */ class MkFileWithPatternMsgEx : public MirroredMessage> { public: typedef ErrorAndEntryResponseState ResponseState; virtual bool processIncoming(ResponseContext& ctx) override; std::tuple lock(EntryLockStore& store) override; std::unique_ptr executeLocally(ResponseContext& ctx, bool isSecondary) override; bool isMirrored() override { return getParentInfo()->getIsBuddyMirrored(); } private: MirroredTimestamps dirTimestamps; FhgfsOpsErr mkFile(const EntryInfo* parentInfo, MkFileDetails& mkDetails, EntryInfo* outEntryInfo, FileInodeStoreData& inodeDiskData); FhgfsOpsErr mkMetaFile(DirInode& dir, MkFileDetails& mkDetails, EntryInfo* outEntryInfo, FileInodeStoreData& inodeDiskData); void forwardToSecondary(ResponseContext& ctx) override; FhgfsOpsErr processSecondaryResponse(NetMessage& resp) override { return (FhgfsOpsErr) static_cast(resp).getResult(); } const char* mirrorLogContext() const override { return "MkFileWithPatternMsgEx/forward"; } FileInodeStoreData inodeDiskData; std::string entryID; };