store: convert some futures to semifuture

Summary:
Since these are always used as SemiFuture, let's simply make them SemiFuture
from the get go.

Differential Revision: D30452901

fbshipit-source-id: b0863f363ce0cdb921a73d02c43fc82c1614a3dc
This commit is contained in:
Xavier Deguillard 2021-08-23 11:03:41 -07:00 committed by Facebook GitHub Bot
parent fe0ea26fdf
commit 86fe6e5486
3 changed files with 24 additions and 19 deletions

View File

@ -17,21 +17,24 @@ namespace facebook::eden {
namespace {
template <typename Request, typename... Input>
std::pair<HgImportRequest, folly::Future<typename Request::Response>>
std::pair<HgImportRequest, folly::SemiFuture<typename Request::Response>>
makeRequest(
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope,
Input&&... input) {
auto promise = folly::Promise<typename Request::Response>{};
auto future = promise.getFuture();
auto future = promise.getSemiFuture();
return std::make_pair(
HgImportRequest{
Request{std::forward<Input>(input)...}, priority, std::move(promise)},
std::move(future).ensure([metrics = std::move(metricsScope)]() {}));
std::move(future).defer(
[metrics = std::move(metricsScope)](auto&& result) {
return std::move(result);
}));
}
} // namespace
std::pair<HgImportRequest, folly::Future<std::unique_ptr<Blob>>>
std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Blob>>>
HgImportRequest::makeBlobImportRequest(
Hash hash,
HgProxyHash proxyHash,
@ -41,7 +44,7 @@ HgImportRequest::makeBlobImportRequest(
priority, std::move(metricsScope), hash, std::move(proxyHash));
}
std::pair<HgImportRequest, folly::Future<std::unique_ptr<Tree>>>
std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Tree>>>
HgImportRequest::makeTreeImportRequest(
Hash hash,
HgProxyHash proxyHash,
@ -56,7 +59,7 @@ HgImportRequest::makeTreeImportRequest(
prefetchMetadata);
}
std::pair<HgImportRequest, folly::Future<folly::Unit>>
std::pair<HgImportRequest, folly::SemiFuture<folly::Unit>>
HgImportRequest::makePrefetchRequest(
std::vector<HgProxyHash> hashes,
ImportPriority priority,

View File

@ -74,14 +74,14 @@ class HgImportRequest {
std::vector<HgProxyHash> proxyHashes;
};
static std::pair<HgImportRequest, folly::Future<std::unique_ptr<Blob>>>
static std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Blob>>>
makeBlobImportRequest(
Hash hash,
HgProxyHash proxyHash,
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope);
static std::pair<HgImportRequest, folly::Future<std::unique_ptr<Tree>>>
static std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Tree>>>
makeTreeImportRequest(
Hash hash,
HgProxyHash proxyHash,
@ -89,7 +89,7 @@ class HgImportRequest {
std::unique_ptr<RequestMetricsScope> metricsScope,
bool prefetchMetadata);
static std::pair<HgImportRequest, folly::Future<folly::Unit>>
static std::pair<HgImportRequest, folly::SemiFuture<folly::Unit>>
makePrefetchRequest(
std::vector<HgProxyHash> hashes,
ImportPriority priority,

View File

@ -312,7 +312,7 @@ folly::SemiFuture<std::unique_ptr<Tree>> HgQueuedBackingStore::getTree(
XLOG(DBG4) << "tree " << id << " already being fetched";
return std::move(inProgress).value();
}
auto getTreeFuture = folly::makeFutureWith([&] {
auto getTreeFuture = folly::makeSemiFutureWith([&] {
logBackingStoreFetch(
context, proxyHash, ObjectFetchContext::ObjectType::Tree);
@ -330,16 +330,17 @@ folly::SemiFuture<std::unique_ptr<Tree>> HgQueuedBackingStore::getTree(
HgImportTraceEvent::queue(unique, HgImportTraceEvent::TREE, proxyHash));
queue_.enqueue(std::move(request));
return std::move(future).ensure([this, unique, proxyHash] {
return std::move(future).defer([this, unique, proxyHash](auto&& result) {
traceBus_->publish(HgImportTraceEvent::finish(
unique, HgImportTraceEvent::TREE, proxyHash));
return std::move(result);
});
});
return std::move(getTreeFuture)
.thenTry([this, proxyHash](folly::Try<std::unique_ptr<Tree>>&& result) {
.defer([this, proxyHash](folly::Try<std::unique_ptr<Tree>>&& result) {
this->queue_.markImportAsFinished<Tree>(proxyHash, result);
return folly::makeSemiFuture(std::move(result));
return std::move(result);
});
}
@ -361,7 +362,6 @@ folly::SemiFuture<std::unique_ptr<Blob>> HgQueuedBackingStore::getBlobImpl(
throw;
}
auto path = proxyHash.path();
logBackingStoreFetch(
context, proxyHash, ObjectFetchContext::ObjectType::Blob);
@ -381,8 +381,9 @@ folly::SemiFuture<std::unique_ptr<Blob>> HgQueuedBackingStore::getBlobImpl(
return std::move(inProgress).value();
}
auto getBlobFuture = folly::makeFutureWith([&] {
XLOG(DBG4) << "make blob import request for " << path << ", hash is:" << id;
auto getBlobFuture = folly::makeSemiFutureWith([&] {
XLOG(DBG4) << "make blob import request for " << proxyHash.path()
<< ", hash is:" << id;
auto importTracker =
std::make_unique<RequestMetricsScope>(&pendingImportBlobWatches_);
@ -393,16 +394,17 @@ folly::SemiFuture<std::unique_ptr<Blob>> HgQueuedBackingStore::getBlobImpl(
HgImportTraceEvent::queue(unique, HgImportTraceEvent::BLOB, proxyHash));
queue_.enqueue(std::move(request));
return std::move(future).ensure([this, unique, proxyHash] {
return std::move(future).defer([this, unique, proxyHash](auto&& result) {
traceBus_->publish(HgImportTraceEvent::finish(
unique, HgImportTraceEvent::BLOB, proxyHash));
return std::move(result);
});
});
return std::move(getBlobFuture)
.thenTry([this, proxyHash](folly::Try<std::unique_ptr<Blob>>&& result) {
.defer([this, proxyHash](folly::Try<std::unique_ptr<Blob>>&& result) {
this->queue_.markImportAsFinished<Blob>(proxyHash, result);
return folly::makeSemiFuture(std::move(result));
return std::move(result);
});
}