From 2a3778b616d8cc0e97c3de2243a7b365a7446b88 Mon Sep 17 00:00:00 2001 From: "Genevieve (Genna) Helsel" Date: Mon, 31 Oct 2022 09:56:13 -0700 Subject: [PATCH] rename IOverlay to InodeCatalog Summary: Having an `Overlay` object own a `IOverlay` object, as opposed to deriving from one, is a bit confusing, so this renames `IOverlay` to `InodeCatalog` as an attempt to clear up the class structure. `InodeCatalog` is meant to mean "InodeDatabase", but I find the word "database" to imply a heavyweight structure, which this class is not. Reviewed By: chadaustin Differential Revision: D40517958 fbshipit-source-id: a5873ab21a336da3c6823b91d7f51c4ae49a7f08 --- eden/fs/inodes/{IOverlay.h => InodeCatalog.h} | 16 ++++---- eden/fs/inodes/Overlay.cpp | 37 +++++++++---------- eden/fs/inodes/Overlay.h | 14 +++---- eden/fs/inodes/fsoverlay/FsOverlay.h | 4 +- .../test/OverlayDirSerializerBenchmark.cpp | 20 +++++----- eden/fs/inodes/treeoverlay/TreeOverlay.h | 4 +- .../treeoverlay/test/TreeOverlayTest.cpp | 6 +-- 7 files changed, 50 insertions(+), 51 deletions(-) rename eden/fs/inodes/{IOverlay.h => InodeCatalog.h} (91%) diff --git a/eden/fs/inodes/IOverlay.h b/eden/fs/inodes/InodeCatalog.h similarity index 91% rename from eden/fs/inodes/IOverlay.h rename to eden/fs/inodes/InodeCatalog.h index 1d0a552e7e..5efc830ec9 100644 --- a/eden/fs/inodes/IOverlay.h +++ b/eden/fs/inodes/InodeCatalog.h @@ -29,18 +29,18 @@ class IOBuf; namespace facebook::eden { /** - * Overlay interface for different overlay implementations. + * Interface for tracking inode relationships. */ -class IOverlay { +class InodeCatalog { public: - IOverlay() = default; + InodeCatalog() = default; - virtual ~IOverlay() = default; + virtual ~InodeCatalog() = default; - IOverlay(const IOverlay&) = delete; - IOverlay& operator=(const IOverlay&) = delete; - IOverlay(IOverlay&&) = delete; - IOverlay&& operator=(IOverlay&&) = delete; + InodeCatalog(const InodeCatalog&) = delete; + InodeCatalog& operator=(const InodeCatalog&) = delete; + InodeCatalog(InodeCatalog&&) = delete; + InodeCatalog&& operator=(InodeCatalog&&) = delete; // Older overlay implementation only care about data storage but has little // understanding of the content it stores. A set of methods are added to allow diff --git a/eden/fs/inodes/Overlay.cpp b/eden/fs/inodes/Overlay.cpp index 6cdcd6bbac..63a21acc1c 100644 --- a/eden/fs/inodes/Overlay.cpp +++ b/eden/fs/inodes/Overlay.cpp @@ -38,7 +38,7 @@ namespace { constexpr uint64_t ioCountMask = 0x7FFFFFFFFFFFFFFFull; constexpr uint64_t ioClosedMask = 1ull << 63; -std::unique_ptr makeTreeOverlay( +std::unique_ptr makeInodeCatalog( AbsolutePathPiece localDir, Overlay::TreeOverlayType treeOverlayType, const EdenConfig& config, @@ -121,14 +121,13 @@ Overlay::Overlay( std::shared_ptr logger, const EdenConfig& config) : fileContentStore_{makeFileContentStore(localDir)}, - backingOverlay_{makeTreeOverlay( + inodeCatalog_{makeInodeCatalog( localDir, treeOverlayType, config, fileContentStore_ ? fileContentStore_.get() : nullptr)}, treeOverlayType_{treeOverlayType}, - supportsSemanticOperations_{ - backingOverlay_->supportsSemanticOperations()}, + supportsSemanticOperations_{inodeCatalog_->supportsSemanticOperations()}, localDir_{localDir}, caseSensitive_{caseSensitive}, structuredLogger_{logger} {} @@ -149,7 +148,7 @@ void Overlay::close() { // Make sure everything is shut down in reverse of construction order. // Cleanup is not necessary if tree overlay was not initialized and either // there is no file content store or the it was not initalized - if (!backingOverlay_->initialized() && + if (!inodeCatalog_->initialized() && (!fileContentStore_ || (fileContentStore_ && !fileContentStore_->initialized()))) { return; @@ -170,7 +169,7 @@ void Overlay::close() { inodeMetadataTable_.reset(); #endif // !_WIN32 - backingOverlay_->close(optNextInodeNumber); + inodeCatalog_->close(optNextInodeNumber); if (fileContentStore_ && treeOverlayType_ != TreeOverlayType::Legacy) { fileContentStore_->close(); } @@ -233,7 +232,7 @@ void Overlay::initOverlay( FOLLY_MAYBE_UNUSED const OverlayChecker::ProgressCallback& progressCallback, FOLLY_MAYBE_UNUSED OverlayChecker::LookupCallback& lookupCallback) { IORequest req{this}; - auto optNextInodeNumber = backingOverlay_->initOverlay(true); + auto optNextInodeNumber = inodeCatalog_->initOverlay(true); if (fileContentStore_ && treeOverlayType_ != TreeOverlayType::Legacy) { fileContentStore_->initialize(true); } @@ -256,7 +255,7 @@ void Overlay::initOverlay( // Therefore OverlayChecker must not exist longer than this initOverlay // call. OverlayChecker checker( - static_cast(backingOverlay_.get()), + static_cast(inodeCatalog_.get()), static_cast(fileContentStore_.get()), std::nullopt, lookupCallback); @@ -294,7 +293,7 @@ void Overlay::initOverlay( // here to skip scanning in that case. if (folly::kIsWindows && mountPath.has_value()) { optNextInodeNumber = - dynamic_cast(backingOverlay_.get()) + dynamic_cast(inodeCatalog_.get()) ->scanLocalChanges(std::move(config), *mountPath, lookupCallback); } @@ -331,7 +330,7 @@ InodeNumber Overlay::allocateInodeNumber() { DirContents Overlay::loadOverlayDir(InodeNumber inodeNumber) { DirContents result(caseSensitive_); IORequest req{this}; - auto dirData = backingOverlay_->loadOverlayDir(inodeNumber); + auto dirData = inodeCatalog_->loadOverlayDir(inodeNumber); if (!dirData.has_value()) { return result; } @@ -416,7 +415,7 @@ overlay::OverlayDir Overlay::serializeOverlayDir( } void Overlay::saveOverlayDir(InodeNumber inodeNumber, const DirContents& dir) { - backingOverlay_->saveOverlayDir( + inodeCatalog_->saveOverlayDir( inodeNumber, serializeOverlayDir(inodeNumber, dir)); } @@ -444,7 +443,7 @@ void Overlay::removeOverlayDir(InodeNumber inodeNumber) { IORequest req{this}; freeInodeFromMetadataTable(inodeNumber); - backingOverlay_->removeOverlayDir(inodeNumber); + inodeCatalog_->removeOverlayDir(inodeNumber); } void Overlay::recursivelyRemoveOverlayDir(InodeNumber inodeNumber) { @@ -457,7 +456,7 @@ void Overlay::recursivelyRemoveOverlayDir(InodeNumber inodeNumber) { // saveOverlayDir(I). There's also no risk of violating our durability // guarantees if the process dies after this call but before the thread could // remove this data. - auto dirData = backingOverlay_->loadAndRemoveOverlayDir(inodeNumber); + auto dirData = inodeCatalog_->loadAndRemoveOverlayDir(inodeNumber); if (dirData) { gcQueue_.lock()->queue.emplace_back(std::move(*dirData)); gcCondVar_.notify_one(); @@ -476,7 +475,7 @@ folly::Future Overlay::flushPendingAsync() { bool Overlay::hasOverlayDir(InodeNumber inodeNumber) { IORequest req{this}; - return backingOverlay_->hasOverlayDir(inodeNumber); + return inodeCatalog_->hasOverlayDir(inodeNumber); } #ifndef _WIN32 @@ -615,7 +614,7 @@ void Overlay::handleGCRequest(GCRequest& request) { if (std::holds_alternative( request.requestType)) { - backingOverlay_->maintenance(); + inodeCatalog_->maintenance(); return; } @@ -671,7 +670,7 @@ void Overlay::handleGCRequest(GCRequest& request) { overlay::OverlayDir dir; try { freeInodeFromMetadataTable(ino); - auto dirData = backingOverlay_->loadAndRemoveOverlayDir(ino); + auto dirData = inodeCatalog_->loadAndRemoveOverlayDir(ino); if (!dirData.has_value()) { XLOG(DBG7) << "no dir data for inode " << ino; continue; @@ -693,7 +692,7 @@ void Overlay::addChild( const std::pair& childEntry, const DirContents& content) { if (supportsSemanticOperations_) { - backingOverlay_->addChild( + inodeCatalog_->addChild( parent, childEntry.first, serializeOverlayEntry(childEntry.second)); } else { saveOverlayDir(parent, content); @@ -705,7 +704,7 @@ void Overlay::removeChild( PathComponentPiece childName, const DirContents& content) { if (supportsSemanticOperations_) { - backingOverlay_->removeChild(parent, childName); + inodeCatalog_->removeChild(parent, childName); } else { saveOverlayDir(parent, content); } @@ -723,7 +722,7 @@ void Overlay::renameChild( const DirContents& srcContent, const DirContents& dstContent) { if (supportsSemanticOperations_) { - backingOverlay_->renameChild(src, dst, srcName, dstName); + inodeCatalog_->renameChild(src, dst, srcName, dstName); } else { saveOverlayDir(src, srcContent); if (dst.get() != src.get()) { diff --git a/eden/fs/inodes/Overlay.h b/eden/fs/inodes/Overlay.h index b356993377..6adeadc78a 100644 --- a/eden/fs/inodes/Overlay.h +++ b/eden/fs/inodes/Overlay.h @@ -38,7 +38,7 @@ class OverlayDir; struct DirContents; class InodeMap; class SerializedInodeMap; -class IOverlay; +class InodeCatalog; class IFileContentStore; class DirEntry; class EdenConfig; @@ -277,11 +277,11 @@ class Overlay : public std::enable_shared_from_this { void maintenance(); /* - * Returns a raw pointer to the backing overlay. This method should only be + * Returns a raw pointer to the inode catalog. This method should only be * used for testing. */ - IOverlay* getRawBackingOverlay() { - return backingOverlay_.get(); + InodeCatalog* getRawInodeCatalog() { + return inodeCatalog_.get(); } overlay::OverlayDir serializeOverlayDir( @@ -355,12 +355,12 @@ class Overlay : public std::enable_shared_from_this { std::atomic nextInodeNumber_{0}; std::unique_ptr fileContentStore_; - std::unique_ptr backingOverlay_; + std::unique_ptr inodeCatalog_; Overlay::TreeOverlayType treeOverlayType_; /** * Indicates if the backing overlay supports semantic operations, see - * `IOverlay::supportsSemanticOperations` for more information. + * `InodeCatalog::supportsSemanticOperations` for more information. */ bool supportsSemanticOperations_; @@ -369,7 +369,7 @@ class Overlay : public std::enable_shared_from_this { #ifndef _WIN32 /** * Disk-backed mapping from inode number to InodeMetadata. - * Defined below backingOverlay_ because it acquires its own file lock, which + * Defined below inodeCatalog_ because it acquires its own file lock, which * should be released first during shutdown. */ std::unique_ptr inodeMetadataTable_; diff --git a/eden/fs/inodes/fsoverlay/FsOverlay.h b/eden/fs/inodes/fsoverlay/FsOverlay.h index 5bd66e619f..4932f68ff5 100644 --- a/eden/fs/inodes/fsoverlay/FsOverlay.h +++ b/eden/fs/inodes/fsoverlay/FsOverlay.h @@ -14,7 +14,7 @@ #include #include #include "eden/fs/inodes/IFileContentStore.h" -#include "eden/fs/inodes/IOverlay.h" +#include "eden/fs/inodes/InodeCatalog.h" #include "eden/fs/inodes/InodeNumber.h" #include "eden/fs/inodes/overlay/gen-cpp2/overlay_types.h" #include "eden/fs/utils/DirType.h" @@ -246,7 +246,7 @@ class FileContentStore : public IFileContentStore { * overlay's file system attributes and is responsible for obtaining and * releasing its locks ("initOverlay" and "close" respectively). */ -class FsOverlay : public IOverlay { +class FsOverlay : public InodeCatalog { public: explicit FsOverlay(FileContentStore* core) : core_(core) {} diff --git a/eden/fs/inodes/test/OverlayDirSerializerBenchmark.cpp b/eden/fs/inodes/test/OverlayDirSerializerBenchmark.cpp index 7d29edb471..1fa81c52aa 100644 --- a/eden/fs/inodes/test/OverlayDirSerializerBenchmark.cpp +++ b/eden/fs/inodes/test/OverlayDirSerializerBenchmark.cpp @@ -16,7 +16,7 @@ #include "eden/fs/config/EdenConfig.h" #include "eden/fs/inodes/DirEntry.h" -#include "eden/fs/inodes/IOverlay.h" +#include "eden/fs/inodes/InodeCatalog.h" #include "eden/fs/inodes/Overlay.h" #include "eden/fs/telemetry/NullStructuredLogger.h" @@ -36,7 +36,7 @@ constexpr uint64_t kIterations = 500000; void copyOverlayDirectory( std::shared_ptr overlay, - IOverlay* backingOverlay, + InodeCatalog* inodeCatalog, const DirContents& contents) { // Test copying the OverlayDir directly printf("Overlay data written. Starting benchmark for copies...\n"); @@ -49,10 +49,10 @@ void copyOverlayDirectory( auto inodeNumber = overlay->allocateInodeNumber(); fns.emplace_back( - [backingOverlay, + [inodeCatalog, inodeNumber, odir = overlay->serializeOverlayDir(inodeNumber, contents)]() mutable { - backingOverlay->saveOverlayDir(inodeNumber, std::move(odir)); + inodeCatalog->saveOverlayDir(inodeNumber, std::move(odir)); }); } @@ -78,7 +78,7 @@ void copyOverlayDirectory( void serializeOverlayDirectory( std::shared_ptr overlay, - IOverlay* backingOverlay, + InodeCatalog* inodeCatalog, const DirContents& contents) { // Test serialize the OverlayDir into a std::string printf("Overlay data written. Starting benchmark for serializing...\n"); @@ -95,14 +95,14 @@ void serializeOverlayDirectory( auto serializedOverlayDir = apache::thrift::CompactSerializer::serialize(odir); - fns.emplace_back([backingOverlay, + fns.emplace_back([inodeCatalog, inodeNumber, serializedOverlayDir = std::move(serializedOverlayDir)]() mutable { auto deserializedOverlayDir = apache::thrift::CompactSerializer::deserialize( serializedOverlayDir); - backingOverlay->saveOverlayDir( + inodeCatalog->saveOverlayDir( inodeNumber, std::move(deserializedOverlayDir)); }); } @@ -170,12 +170,12 @@ void benchmarkOverlayDirSerialization(AbsolutePathPiece overlayPath) { ObjectId{folly::ByteRange{sp}}); } - IOverlay* backingOverlay = overlay->getRawBackingOverlay(); + InodeCatalog* inodeCatalog = overlay->getRawInodeCatalog(); if (FLAGS_copy) { - copyOverlayDirectory(overlay, backingOverlay, contents); + copyOverlayDirectory(overlay, inodeCatalog, contents); } else { - serializeOverlayDirectory(overlay, backingOverlay, contents); + serializeOverlayDirectory(overlay, inodeCatalog, contents); } folly::stop_watch<> closeTimer; diff --git a/eden/fs/inodes/treeoverlay/TreeOverlay.h b/eden/fs/inodes/treeoverlay/TreeOverlay.h index 1576bc758c..e8cbfdbe2d 100644 --- a/eden/fs/inodes/treeoverlay/TreeOverlay.h +++ b/eden/fs/inodes/treeoverlay/TreeOverlay.h @@ -10,7 +10,7 @@ #include #include -#include "eden/fs/inodes/IOverlay.h" +#include "eden/fs/inodes/InodeCatalog.h" #include "eden/fs/inodes/treeoverlay/SqliteTreeStore.h" #include "eden/fs/model/Tree.h" #include "eden/fs/utils/ImmediateFuture.h" @@ -28,7 +28,7 @@ class OverlayDir; } struct InodeNumber; -class TreeOverlay : public IOverlay { +class TreeOverlay : public InodeCatalog { public: explicit TreeOverlay( AbsolutePathPiece path, diff --git a/eden/fs/inodes/treeoverlay/test/TreeOverlayTest.cpp b/eden/fs/inodes/treeoverlay/test/TreeOverlayTest.cpp index d0e3cbeb64..408eede935 100644 --- a/eden/fs/inodes/treeoverlay/test/TreeOverlayTest.cpp +++ b/eden/fs/inodes/treeoverlay/test/TreeOverlayTest.cpp @@ -372,7 +372,7 @@ TEST_P( // from disk since we don't store mode, the flush here makes the tests // deterministic if (overlayType() == Overlay::TreeOverlayType::TreeBuffered) { - static_cast(overlay->getRawBackingOverlay())->flush(); + static_cast(overlay->getRawInodeCatalog())->flush(); } // At the time of writing, the TreeOverlay does not store mode, which is why @@ -405,7 +405,7 @@ TEST_P( // from disk since we don't store mode, the flush here makes the tests // deterministic if (overlayType() == Overlay::TreeOverlayType::TreeBuffered) { - static_cast(overlay->getRawBackingOverlay())->flush(); + static_cast(overlay->getRawInodeCatalog())->flush(); } // At the time of writing, the TreeOverlay does not store mode, which is why @@ -440,7 +440,7 @@ TEST_P( // from disk since we don't store mode, the flush here makes the tests // deterministic if (overlayType() == Overlay::TreeOverlayType::TreeBuffered) { - static_cast(overlay->getRawBackingOverlay())->flush(); + static_cast(overlay->getRawInodeCatalog())->flush(); } // At the time of writing, the TreeOverlay does not store mode, which is why