mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 22:37:37 +03:00
1ad34b0d2a
Summary: Now that ProcessId exists, we should use it instead of pid_t in ObjectFetchContext. Reviewed By: genevievehelsel Differential Revision: D42037216 fbshipit-source-id: 34cd89f78be35a15d73b26edc840e917fd642723
77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This software may be used and distributed according to the terms of the
|
|
* GNU General Public License version 2.
|
|
*/
|
|
|
|
#include "eden/fs/inodes/RequestContext.h"
|
|
|
|
#include <folly/logging/xlog.h>
|
|
|
|
#include "eden/fs/telemetry/RequestMetricsScope.h"
|
|
#include "eden/fs/utils/SystemError.h"
|
|
|
|
using namespace std::chrono;
|
|
|
|
namespace facebook::eden {
|
|
|
|
RequestContext::~RequestContext() noexcept {
|
|
try {
|
|
const auto diff = steady_clock::now() - startTime_;
|
|
const auto diff_ns = duration_cast<nanoseconds>(diff);
|
|
|
|
if (stats_) {
|
|
XCHECK(latencyStat_) << "stats_ and latencyStat_ must be set together";
|
|
latencyStat_(*stats_).addDuration(diff);
|
|
}
|
|
|
|
if (requestWatchList_) {
|
|
{ auto temp = std::move(requestMetricsScope_); }
|
|
requestWatchList_.reset();
|
|
}
|
|
|
|
if (auto pid = fsObjectFetchContext_->getClientPid()) {
|
|
switch (fsObjectFetchContext_->getEdenTopStats().getFetchOrigin()) {
|
|
case ObjectFetchContext::Origin::FromMemoryCache:
|
|
pal_.recordAccess(
|
|
pid.value().get(),
|
|
ProcessAccessLog::AccessType::FsChannelMemoryCacheImport);
|
|
break;
|
|
case ObjectFetchContext::Origin::FromDiskCache:
|
|
pal_.recordAccess(
|
|
pid.value().get(),
|
|
ProcessAccessLog::AccessType::FsChannelDiskCacheImport);
|
|
break;
|
|
case ObjectFetchContext::Origin::FromNetworkFetch:
|
|
pal_.recordAccess(
|
|
pid.value().get(),
|
|
ProcessAccessLog::AccessType::FsChannelBackingStoreImport);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
pal_.recordDuration(pid.value().get(), diff_ns);
|
|
}
|
|
} catch (const std::exception& ex) {
|
|
XLOG(WARN) << "Failed to complete request: " << folly::exceptionStr(ex);
|
|
}
|
|
}
|
|
|
|
void RequestContext::startRequest(
|
|
EdenStatsPtr stats,
|
|
DurationFn stat,
|
|
std::shared_ptr<RequestMetricsScope::LockedRequestWatchList>
|
|
requestWatches) {
|
|
startTime_ = steady_clock::now();
|
|
XDCHECK(!latencyStat_);
|
|
stats_ = std::move(stats);
|
|
latencyStat_ = std::move(stat);
|
|
requestWatchList_ = requestWatches;
|
|
if (requestWatchList_) {
|
|
requestMetricsScope_ = RequestMetricsScope(requestWatchList_.get());
|
|
}
|
|
}
|
|
|
|
} // namespace facebook::eden
|