// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "../zen.h" #include namespace zen { /** Scrub storage */ class ScrubCommand : public StorageCommand { public: static constexpr char Name[] = "scrub"; static constexpr char Description[] = "Scrub zen storage (verify data integrity)"; ScrubCommand(); ~ScrubCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; bool m_DryRun = false; bool m_NoGc = false; bool m_NoCas = false; uint64_t m_MaxTimeSliceSeconds = 300; }; /** Garbage collect storage */ class GcCommand : public StorageCommand { public: static constexpr char Name[] = "gc"; static constexpr char Description[] = "Garbage collect zen storage"; GcCommand(); ~GcCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; bool m_SmallObjects{false}; bool m_SkipCid{false}; bool m_SkipDelete{false}; uint64_t m_MaxCacheDuration{0}; uint64_t m_DiskSizeSoftLimit{0}; bool m_ForceUseGCV1{false}; bool m_ForceUseGCV2{false}; uint32_t m_CompactBlockThreshold = 90; bool m_Verbose{false}; bool m_SingleThreaded{false}; std::string m_ReferenceHashLow; std::string m_ReferenceHashHigh; bool m_StoreCacheAttachmentMetaData; bool m_StoreProjectAttachmentMetaData; bool m_EnableValidation; }; class GcStatusCommand : public StorageCommand { public: static constexpr char Name[] = "gc-status"; static constexpr char Description[] = "Garbage collect zen storage status check"; GcStatusCommand(); ~GcStatusCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; bool m_Details = false; }; class GcStopCommand : public StorageCommand { public: static constexpr char Name[] = "gc-stop"; static constexpr char Description[] = "Request cancel of running garbage collection in zen storage"; GcStopCommand(); ~GcStopCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; }; //////////////////////////////////////////// class JobCommand : public ZenCmdBase { public: static constexpr char Name[] = "jobs"; static constexpr char Description[] = "Show/cancel zen background jobs"; JobCommand(); ~JobCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; std::uint64_t m_JobId = 0; bool m_Cancel = 0; }; //////////////////////////////////////////// class LoggingCommand : public ZenCmdBase { public: static constexpr char Name[] = "logs"; static constexpr char Description[] = "Show/control zen logging"; LoggingCommand(); ~LoggingCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; std::string m_CacheWriteLog; std::string m_CacheAccessLog; std::string m_SetLogLevel; std::string m_ServerLogTarget; std::string m_CacheLogTarget; std::string m_HttpLogTarget; }; /** Flush storage */ class FlushCommand : public StorageCommand { public: static constexpr char Name[] = "flush"; static constexpr char Description[] = "Flush storage"; FlushCommand(); ~FlushCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::string m_HostName; }; /** Copy state */ class CopyStateCommand : public StorageCommand { public: static constexpr char Name[] = "copy-state"; static constexpr char Description[] = "Copy zen server disk state"; CopyStateCommand(); ~CopyStateCommand(); virtual void Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; std::filesystem::path m_DataPath; std::filesystem::path m_TargetPath; bool m_SkipLogs = false; }; } // namespace zen