forked from lix-project/hydra
Keep better bytesReceived/bytesSent stats
This commit is contained in:
parent
6d741d2ffa
commit
b9afaadfb3
|
@ -8,6 +8,7 @@
|
||||||
#include "state.hh"
|
#include "state.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "worker-protocol.hh"
|
#include "worker-protocol.hh"
|
||||||
|
#include "finally.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
@ -75,7 +76,6 @@ static void openConnection(Machine::ptr machine, Path tmpDir, int stderrFD, Chil
|
||||||
|
|
||||||
static void copyClosureTo(ref<Store> destStore,
|
static void copyClosureTo(ref<Store> destStore,
|
||||||
FdSource & from, FdSink & to, const PathSet & paths,
|
FdSource & from, FdSink & to, const PathSet & paths,
|
||||||
counter & bytesSent,
|
|
||||||
bool useSubstitutes = false)
|
bool useSubstitutes = false)
|
||||||
{
|
{
|
||||||
PathSet closure;
|
PathSet closure;
|
||||||
|
@ -103,9 +103,6 @@ static void copyClosureTo(ref<Store> destStore,
|
||||||
|
|
||||||
printMsg(lvlDebug, format("sending %1% missing paths") % missing.size());
|
printMsg(lvlDebug, format("sending %1% missing paths") % missing.size());
|
||||||
|
|
||||||
for (auto & p : missing)
|
|
||||||
bytesSent += destStore->queryPathInfo(p).narSize;
|
|
||||||
|
|
||||||
to << cmdImportPaths;
|
to << cmdImportPaths;
|
||||||
destStore->exportPaths(missing, false, to);
|
destStore->exportPaths(missing, false, to);
|
||||||
to.flush();
|
to.flush();
|
||||||
|
@ -115,19 +112,6 @@ static void copyClosureTo(ref<Store> destStore,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void copyClosureFrom(ref<Store> destStore,
|
|
||||||
FdSource & from, FdSink & to, const PathSet & paths, counter & bytesReceived,
|
|
||||||
std::shared_ptr<FSAccessor> accessor)
|
|
||||||
{
|
|
||||||
to << cmdExportPaths << 0 << paths;
|
|
||||||
to.flush();
|
|
||||||
destStore->importPaths(false, from, accessor);
|
|
||||||
|
|
||||||
for (auto & p : paths)
|
|
||||||
bytesReceived += destStore->queryPathInfo(p).narSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void State::buildRemote(ref<Store> destStore,
|
void State::buildRemote(ref<Store> destStore,
|
||||||
Machine::ptr machine, Step::ptr step,
|
Machine::ptr machine, Step::ptr step,
|
||||||
unsigned int maxSilentTime, unsigned int buildTimeout,
|
unsigned int maxSilentTime, unsigned int buildTimeout,
|
||||||
|
@ -153,6 +137,11 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
FdSource from(child.from);
|
FdSource from(child.from);
|
||||||
FdSink to(child.to);
|
FdSink to(child.to);
|
||||||
|
|
||||||
|
Finally updateStats([&]() {
|
||||||
|
bytesReceived += from.read;
|
||||||
|
bytesSent += to.written;
|
||||||
|
});
|
||||||
|
|
||||||
/* Handshake. */
|
/* Handshake. */
|
||||||
bool sendDerivation = true;
|
bool sendDerivation = true;
|
||||||
unsigned int remoteVersion;
|
unsigned int remoteVersion;
|
||||||
|
@ -239,7 +228,7 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
|
|
||||||
auto now1 = std::chrono::steady_clock::now();
|
auto now1 = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
copyClosureTo(destStore, from, to, inputs, bytesSent, true);
|
copyClosureTo(destStore, from, to, inputs, true);
|
||||||
|
|
||||||
auto now2 = std::chrono::steady_clock::now();
|
auto now2 = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
|
@ -302,7 +291,9 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
|
|
||||||
auto now1 = std::chrono::steady_clock::now();
|
auto now1 = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
copyClosureFrom(destStore, from, to, outputs, bytesReceived, result.accessor);
|
to << cmdExportPaths << 0 << outputs;
|
||||||
|
to.flush();
|
||||||
|
destStore->importPaths(false, from, result.accessor);
|
||||||
|
|
||||||
auto now2 = std::chrono::steady_clock::now();
|
auto now2 = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
|
|
12
src/hydra-queue-runner/finally.hh
Normal file
12
src/hydra-queue-runner/finally.hh
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/* A trivial class to run a function at the end of a scope. */
|
||||||
|
class Finally
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::function<void()> fun;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Finally(std::function<void()> fun) : fun(fun) { }
|
||||||
|
~Finally() { fun(); }
|
||||||
|
};
|
Loading…
Reference in a new issue