From 5bf6b589283cfdb340a4d975f3c170644ceb31d0 Mon Sep 17 00:00:00 2001 From: "Zeyi (Rice) Fan" Date: Tue, 5 May 2020 20:55:16 -0700 Subject: [PATCH] clean up HgQueuedBackingStore Summary: split functions up. Reviewed By: chadaustin Differential Revision: D20808045 fbshipit-source-id: 3160566deb763c888a0bf34557d934feccc5ae3b --- eden/fs/store/hg/HgImportRequest.h | 5 ++ eden/fs/store/hg/HgQueuedBackingStore.cpp | 60 ++++++++++++++++------- eden/fs/store/hg/HgQueuedBackingStore.h | 4 ++ 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/eden/fs/store/hg/HgImportRequest.h b/eden/fs/store/hg/HgImportRequest.h index 0a5241c821..f64de57c82 100644 --- a/eden/fs/store/hg/HgImportRequest.h +++ b/eden/fs/store/hg/HgImportRequest.h @@ -84,6 +84,11 @@ class HgImportRequest { return std::get_if(&request_); } + template + bool isType() const noexcept { + return std::holds_alternative(request_); + } + size_t getType() const noexcept { return request_.index(); } diff --git a/eden/fs/store/hg/HgQueuedBackingStore.cpp b/eden/fs/store/hg/HgQueuedBackingStore.cpp index 0ce0d32ebf..971f104266 100644 --- a/eden/fs/store/hg/HgQueuedBackingStore.cpp +++ b/eden/fs/store/hg/HgQueuedBackingStore.cpp @@ -44,6 +44,39 @@ HgQueuedBackingStore::~HgQueuedBackingStore() { } } +void HgQueuedBackingStore::processBlobImportRequests( + std::vector&& requests) { + for (auto& request : requests) { + auto parameter = request.getRequest(); + request.setWith( + [store = backingStore_.get(), hash = parameter->hash]() { + return store->getBlob(hash).getTry(); + }); + } +} + +void HgQueuedBackingStore::processTreeImportRequests( + std::vector&& requests) { + for (auto& request : requests) { + auto parameter = request.getRequest(); + request.setWith( + [store = backingStore_.get(), hash = parameter->hash]() { + return store->getTree(hash).getTry(); + }); + } +} + +void HgQueuedBackingStore::processPrefetchRequests( + std::vector&& requests) { + for (auto& request : requests) { + auto parameter = request.getRequest(); + request.setWith( + [store = backingStore_.get(), hashes = parameter->hashes]() { + return store->prefetchBlobs(hashes).getTry(); + }); + } +} + void HgQueuedBackingStore::processRequest() { for (;;) { auto requests = queue_.dequeue(FLAGS_hg_queue_batch_size); @@ -52,25 +85,14 @@ void HgQueuedBackingStore::processRequest() { break; } - for (auto& request : requests) { - if (auto parameter = request.getRequest()) { - request.setWith( - [store = backingStore_.get(), hash = parameter->hash]() { - return store->getBlob(hash).getTry(); - }); - } else if ( - auto parameter = request.getRequest()) { - request.setWith( - [store = backingStore_.get(), hash = parameter->hash]() { - return store->getTree(hash).getTry(); - }); - } else if ( - auto parameter = request.getRequest()) { - request.setWith( - [store = backingStore_.get(), hashes = parameter->hashes]() { - return store->prefetchBlobs(hashes).getTry(); - }); - } + const auto& first = requests.at(0); + + if (first.isType()) { + processBlobImportRequests(std::move(requests)); + } else if (first.isType()) { + processTreeImportRequests(std::move(requests)); + } else if (first.isType()) { + processPrefetchRequests(std::move(requests)); } } } diff --git a/eden/fs/store/hg/HgQueuedBackingStore.h b/eden/fs/store/hg/HgQueuedBackingStore.h index 3a2434921d..e89c58b7e0 100644 --- a/eden/fs/store/hg/HgQueuedBackingStore.h +++ b/eden/fs/store/hg/HgQueuedBackingStore.h @@ -78,6 +78,10 @@ class HgQueuedBackingStore : public BackingStore { HgQueuedBackingStore(const HgQueuedBackingStore&) = delete; HgQueuedBackingStore& operator=(const HgQueuedBackingStore&) = delete; + void processBlobImportRequests(std::vector&& requests); + void processTreeImportRequests(std::vector&& requests); + void processPrefetchRequests(std::vector&& requests); + /** * The worker runloop function. */