/* * Copyright (c) 2016-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ #pragma once #include "common/fb303/cpp/FacebookBase2.h" #include "eden/fs/inodes/gen-cpp2/hgdirstate_types.h" #include "eden/fs/service/gen-cpp2/StreamingEdenService.h" #include "eden/fs/utils/PathFuncs.h" namespace folly { template class Future; } namespace facebook { namespace eden { class Hash; class EdenServer; class TreeInode; /* * Handler for the EdenService thrift interface */ class EdenServiceHandler : virtual public StreamingEdenServiceSvIf, public facebook::fb303::FacebookBase2 { public: explicit EdenServiceHandler(EdenServer* server); facebook::fb303::cpp2::fb_status getStatus() override; void mount(std::unique_ptr info) override; void unmount(std::unique_ptr mountPoint) override; void listMounts(std::vector& results) override; void getParentCommits( WorkingDirectoryParents& result, std::unique_ptr mountPoint) override; void checkOutRevision( std::vector& results, std::unique_ptr mountPoint, std::unique_ptr hash, bool force) override; void resetParentCommits( std::unique_ptr mountPoint, std::unique_ptr parents) override; void getBindMounts( std::vector& out, std::unique_ptr mountPoint) override; void getSHA1( std::vector& out, std::unique_ptr mountPoint, std::unique_ptr> paths) override; void getCurrentJournalPosition( JournalPosition& out, std::unique_ptr mountPoint) override; void getFilesChangedSince( FileDelta& out, std::unique_ptr mountPoint, std::unique_ptr fromPosition) override; void getFileInformation( std::vector& out, std::unique_ptr mountPoint, std::unique_ptr> paths) override; void glob( std::vector& out, std::unique_ptr mountPoint, std::unique_ptr> globs) override; void async_tm_subscribe( std::unique_ptr>> callback, std::unique_ptr mountPoint) override; void scmGetStatus( ThriftHgStatus& out, std::unique_ptr mountPoint, bool listIgnored) override; void hgClearDirstate(std::unique_ptr mountPoint) override; void hgGetDirstateTuple( hgdirstate::DirstateTuple& out, std::unique_ptr mountPoint, std::unique_ptr relativePath) override; void hgSetDirstateTuple( std::unique_ptr mountPoint, std::unique_ptr relativePath, std::unique_ptr tuple) override; bool hgDeleteDirstateTuple( std::unique_ptr mountPoint, std::unique_ptr relativePath) override; void hgGetNonnormalFiles( std::vector& out, std::unique_ptr mountPoint) override; void hgCopyMapPut( std::unique_ptr mountPoint, std::unique_ptr relativePathDest, std::unique_ptr relativePathSource) override; void hgCopyMapGet( std::string& relativePathSource, std::unique_ptr mountPoint, std::unique_ptr relativePathDest) override; void hgCopyMapGetAll( std::map& copyMap, std::unique_ptr mountPoint) override; void debugGetScmTree( std::vector& entries, std::unique_ptr mountPoint, std::unique_ptr id, bool localStoreOnly) override; void debugGetScmBlob( std::string& data, std::unique_ptr mountPoint, std::unique_ptr id, bool localStoreOnly) override; void debugGetScmBlobMetadata( ScmBlobMetadata& metadata, std::unique_ptr mountPoint, std::unique_ptr id, bool localStoreOnly) override; void debugInodeStatus( std::vector& inodeInfo, std::unique_ptr mountPoint, std::unique_ptr path) override; void debugGetInodePath( InodePathDebugInfo& inodePath, std::unique_ptr mountPoint, int64_t inodeNumber) override; int64_t unloadInodeForPath( std::unique_ptr mountPoint, std::unique_ptr path, std::unique_ptr age) override; void flushStatsNow() override; void invalidateKernelInodeCache( std::unique_ptr mountPoint, std::unique_ptr path) override; void getStatInfo(InternalStats& result) override; /** * When this Thrift handler is notified to shutdown, it notifies the * EdenServer to shut down, as well. */ void shutdown() override; private: // Forbidden copy constructor and assignment operator EdenServiceHandler(EdenServiceHandler const&) = delete; EdenServiceHandler& operator=(EdenServiceHandler const&) = delete; folly::Future getSHA1ForPath( folly::StringPiece mountPoint, folly::StringPiece path); folly::Future getSHA1ForPathDefensively( folly::StringPiece mountPoint, folly::StringPiece path) noexcept; FOLLY_NODISCARD folly::Future mountImpl(const MountInfo& info); AbsolutePath getPathToDirstateStorage(AbsolutePathPiece mountPointPath); EdenServer* const server_; }; } } // facebook::eden