mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
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:
parent
fe0ea26fdf
commit
86fe6e5486
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user