/* * Copyright (c) Facebook, Inc. and its affiliates. * * This software may be used and distributed according to the terms of the * GNU General Public License version 2. */ #include "eden/fs/store/BlobAccess.h" #include #include "eden/fs/model/Blob.h" #include "eden/fs/store/BlobCache.h" #include "eden/fs/store/IObjectStore.h" namespace facebook { namespace eden { BlobAccess::BlobAccess( std::shared_ptr objectStore, std::shared_ptr blobCache) : objectStore_{std::move(objectStore)}, blobCache_{std::move(blobCache)} {} BlobAccess::~BlobAccess() {} folly::Future BlobAccess::getBlob( const Hash& hash, ObjectFetchContext& context, BlobCache::Interest interest, ImportPriority priority) { auto result = blobCache_->get(hash, interest); if (result.blob) { return folly::Future{std::move(result)}; } return objectStore_->getBlob(hash, context, priority) .thenValue([blobCache = blobCache_, interest](std::shared_ptr blob) { auto interestHandle = blobCache->insert(blob, interest); return BlobCache::GetResult{std::move(blob), std::move(interestHandle)}; }); } } // namespace eden } // namespace facebook