#pragma once #include #include #include #include namespace c10d { class TORCH_API FileStore : public Store { public: explicit FileStore(std::string path, int numWorkers); ~FileStore() override; void set(const std::string& key, const std::vector& value) override; std::vector compareSet( const std::string& key, const std::vector& expectedValue, const std::vector& desiredValue) override; std::vector get(const std::string& key) override; int64_t add(const std::string& key, int64_t value) override; int64_t getNumKeys() override; bool deleteKey(const std::string& key) override; bool check(const std::vector& keys) override; void wait(const std::vector& keys) override; void wait( const std::vector& keys, const std::chrono::milliseconds& timeout) override; // Returns the path used by the FileStore. const std::string& getPath() const noexcept { return path_; } protected: int64_t addHelper(const std::string& key, int64_t i); std::string path_; off_t pos_{0}; int numWorkers_; const std::string cleanupKey_; const std::string refCountKey_; const std::string regularPrefix_; const std::string deletePrefix_; std::unordered_map> cache_; std::mutex activeFileOpLock_; }; } // namespace c10d