sapling/eden/fs/store/hg/HgImportRequest.cpp
Katie Mancini 7e58206c30 Explicitly track current/pending Imports -- fix pending imports
Summary:
Since imports are now queued in `HgQueuedBackingStore`
the metrics for queued imports were broken

the queueing use to happen in `HgBackingStore`, but
 now the queue happens before the imports get here,
 in `HgQueuedBackingStore`, thus these metrics were
only measuring live imports
=> this moves the metrics for queued imports into
`HgQueuedBackingStore` so that they capture both
live and queued imports

**note**: since prefetching in `HgQueuedBackingStore`
is in progress, these metrics are only set-up for when
prefetching this is finished

Reviewed By: chadaustin

Differential Revision: D20714494

fbshipit-source-id: 392337aaa60b44b75184889e6c92cb5d2c2577cc
2020-04-09 12:35:22 -07:00

68 lines
2.0 KiB
C++

/*
* 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/hg/HgImportRequest.h"
#include <folly/Try.h>
#include <folly/futures/Future.h>
#include <folly/futures/Promise.h>
#include "eden/fs/telemetry/RequestMetricsScope.h"
namespace facebook {
namespace eden {
namespace {
template <typename Request, typename Input>
std::pair<HgImportRequest, folly::SemiFuture<typename Request::Response>>
makeRequest(
Input&& input,
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope) {
auto [promise, future] =
folly::makePromiseContract<typename Request::Response>();
return std::make_pair(
HgImportRequest{Request{std::forward<Input>(input)},
priority,
std::move(promise),
std::move(metricsScope)},
std::move(future));
}
} // namespace
std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Blob>>>
HgImportRequest::makeBlobImportRequest(
Hash hash,
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope) {
return makeRequest<BlobImport>(hash, priority, std::move(metricsScope));
}
std::pair<HgImportRequest, folly::SemiFuture<std::unique_ptr<Tree>>>
HgImportRequest::makeTreeImportRequest(
Hash hash,
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope) {
return makeRequest<TreeImport>(hash, priority, std::move(metricsScope));
}
std::pair<HgImportRequest, folly::SemiFuture<folly::Unit>>
HgImportRequest::makePrefetchRequest(
std::vector<Hash> hashes,
ImportPriority priority,
std::unique_ptr<RequestMetricsScope> metricsScope) {
return makeRequest<Prefetch>(hashes, priority, std::move(metricsScope));
}
std::unique_ptr<RequestMetricsScope>
HgImportRequest::getOwnershipOfImportTracker() {
return std::move(metrics_);
}
} // namespace eden
} // namespace facebook