clean up HgQueuedBackingStore

Summary: split functions up.

Reviewed By: chadaustin

Differential Revision: D20808045

fbshipit-source-id: 3160566deb763c888a0bf34557d934feccc5ae3b
This commit is contained in:
Zeyi (Rice) Fan 2020-05-05 20:55:16 -07:00 committed by Facebook GitHub Bot
parent cc880f9622
commit 5bf6b58928
3 changed files with 50 additions and 19 deletions

View File

@ -84,6 +84,11 @@ class HgImportRequest {
return std::get_if<T>(&request_);
}
template <typename T>
bool isType() const noexcept {
return std::holds_alternative<T>(request_);
}
size_t getType() const noexcept {
return request_.index();
}

View File

@ -44,6 +44,39 @@ HgQueuedBackingStore::~HgQueuedBackingStore() {
}
}
void HgQueuedBackingStore::processBlobImportRequests(
std::vector<HgImportRequest>&& requests) {
for (auto& request : requests) {
auto parameter = request.getRequest<HgImportRequest::BlobImport>();
request.setWith<HgImportRequest::BlobImport>(
[store = backingStore_.get(), hash = parameter->hash]() {
return store->getBlob(hash).getTry();
});
}
}
void HgQueuedBackingStore::processTreeImportRequests(
std::vector<HgImportRequest>&& requests) {
for (auto& request : requests) {
auto parameter = request.getRequest<HgImportRequest::TreeImport>();
request.setWith<HgImportRequest::TreeImport>(
[store = backingStore_.get(), hash = parameter->hash]() {
return store->getTree(hash).getTry();
});
}
}
void HgQueuedBackingStore::processPrefetchRequests(
std::vector<HgImportRequest>&& requests) {
for (auto& request : requests) {
auto parameter = request.getRequest<HgImportRequest::Prefetch>();
request.setWith<HgImportRequest::Prefetch>(
[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<HgImportRequest::BlobImport>()) {
request.setWith<HgImportRequest::BlobImport>(
[store = backingStore_.get(), hash = parameter->hash]() {
return store->getBlob(hash).getTry();
});
} else if (
auto parameter = request.getRequest<HgImportRequest::TreeImport>()) {
request.setWith<HgImportRequest::TreeImport>(
[store = backingStore_.get(), hash = parameter->hash]() {
return store->getTree(hash).getTry();
});
} else if (
auto parameter = request.getRequest<HgImportRequest::Prefetch>()) {
request.setWith<HgImportRequest::Prefetch>(
[store = backingStore_.get(), hashes = parameter->hashes]() {
return store->prefetchBlobs(hashes).getTry();
});
}
const auto& first = requests.at(0);
if (first.isType<HgImportRequest::BlobImport>()) {
processBlobImportRequests(std::move(requests));
} else if (first.isType<HgImportRequest::TreeImport>()) {
processTreeImportRequests(std::move(requests));
} else if (first.isType<HgImportRequest::Prefetch>()) {
processPrefetchRequests(std::move(requests));
}
}
}

View File

@ -78,6 +78,10 @@ class HgQueuedBackingStore : public BackingStore {
HgQueuedBackingStore(const HgQueuedBackingStore&) = delete;
HgQueuedBackingStore& operator=(const HgQueuedBackingStore&) = delete;
void processBlobImportRequests(std::vector<HgImportRequest>&& requests);
void processTreeImportRequests(std::vector<HgImportRequest>&& requests);
void processPrefetchRequests(std::vector<HgImportRequest>&& requests);
/**
* The worker runloop function.
*/