From fd73c1e20a7aaefcb69db3e6b2f081e1a5e20406 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Aug 2017 15:25:58 +0200 Subject: [PATCH] Add an activity for binary cache queries --- src/libstore/binary-cache-store.cc | 7 +++++++ src/libstore/download.cc | 2 +- src/libutil/logging.hh | 1 + src/nix/progress-bar.cc | 13 ++++++++++--- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc index 403b46872..556fa3d59 100644 --- a/src/libstore/binary-cache-store.cc +++ b/src/libstore/binary-cache-store.cc @@ -313,6 +313,11 @@ void BinaryCacheStore::queryPathInfoUncached(const Path & storePath, std::function)> success, std::function failure) { + auto uri = getUri(); + auto act = std::make_shared(*logger, lvlTalkative, actQueryPathInfo, + fmt("querying info about '%s' on '%s'", storePath, uri), Logger::Fields{storePath, uri}); + PushActivity pact(act->id); + auto narInfoFile = narInfoFileFor(storePath); getFile(narInfoFile, @@ -323,6 +328,8 @@ void BinaryCacheStore::queryPathInfoUncached(const Path & storePath, callSuccess(success, failure, (std::shared_ptr) std::make_shared(*this, *data, narInfoFile)); + + (void) act; // force Activity into this lambda to ensure it stays alive }, failure); } diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 625e781b4..054244c7b 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -85,7 +85,7 @@ struct CurlDownloader : public Downloader DownloadItem(CurlDownloader & downloader, const DownloadRequest & request) : downloader(downloader) , request(request) - , act(*logger, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct) + , act(*logger, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {request.uri}, request.parentAct) { if (!request.expectedETag.empty()) requestHeaders = curl_slist_append(requestHeaders, ("If-None-Match: " + request.expectedETag).c_str()); diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh index 414309a52..21898c03a 100644 --- a/src/libutil/logging.hh +++ b/src/libutil/logging.hh @@ -24,6 +24,7 @@ typedef enum { actOptimiseStore = 106, actVerifyPaths = 107, actSubstitute = 108, + actQueryPathInfo = 109, } ActivityType; typedef enum { diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc index 9bc405239..0c42fe5cc 100644 --- a/src/nix/progress-bar.cc +++ b/src/nix/progress-bar.cc @@ -138,11 +138,11 @@ public: void startActivity(ActivityId act, Verbosity lvl, ActivityType type, const std::string & s, const Fields & fields, ActivityId parent) override { - if (lvl <= verbosity && !s.empty()) - log(lvl, s + "..."); - auto state(state_.lock()); + if (lvl <= verbosity && !s.empty()) + log(*state, lvl, s + "..."); + state->activities.emplace_back(ActInfo()); auto i = std::prev(state->activities.end()); i->s = s; @@ -163,7 +163,13 @@ public: i->s = fmt("fetching " ANSI_BOLD "%s" ANSI_NORMAL " from %s", name, getS(fields, 1)); } + if (type == actQueryPathInfo) { + auto name = storePathToName(getS(fields, 0)); + i->s = fmt("querying about " ANSI_BOLD "%s" ANSI_NORMAL " on %s", name, getS(fields, 1)); + } + if ((type == actDownload && hasAncestor(*state, actCopyPath, parent)) + || (type == actDownload && hasAncestor(*state, actQueryPathInfo, parent)) || (type == actCopyPath && hasAncestor(*state, actSubstitute, parent))) i->visible = false; @@ -189,6 +195,7 @@ public: auto i = state->its.find(act); if (i != state->its.end()) { + auto & actByType = state->activitiesByType[i->second->type]; actByType.done += i->second->done; actByType.failed += i->second->failed;