Keep stats for the Hydra auto scaler
[?]
Aug 17, 2015, 11:50 AM
EYR3EW6JVHNVLXMI57FUVPHQAHPETBML4H44OGJFHUT54KTTHIGQCDependencies
- [2]
IK2UBDAURevive jobset scheduling - [3]
YR2IM6Y5Temporarily disable machines after a connection failure - [4]
46ADBTMQStart steps in order of ascending build ID - [5]
4I2HF4L3Unindent - [6]
7LB6QBXYKeep track of the number of build steps that are being built - [7]
A2GL5FOZMoar stats - [8]
MHVIT4JYSplit hydra-queue-runner.cc more - [9]
HJOEIMLRRefactor - [10]
OG3Z3QGCNamespace cleanup - [*]
24BMQDZAStart of single-process hydra-queue-runner - [*]
SODOV2CMAutomatically reload $NIX_REMOTE_SYSTEMS when it changes - [*]
RQUAATWBAdd status dump facility - [*]
CNLNT3T4Allow only 1 thread to send a closure to a given machine at the same time
Change contents
- replacement in src/hydra-queue-runner/builder.cc at line 9
void State::builder(Step::ptr step, Machine::ptr machine, std::shared_ptr<MaintainCount> reservation)void State::builder(MachineReservation::ptr reservation) - edit in src/hydra-queue-runner/builder.cc at line 14
auto step = reservation->step; - replacement in src/hydra-queue-runner/builder.cc at line 19
retry = doBuildStep(store, step, machine);retry = doBuildStep(store, step, reservation->machine); - replacement in src/hydra-queue-runner/builder.cc at line 22
% step->drvPath % machine->sshName % e.what());% step->drvPath % reservation->machine->sshName % e.what()); - replacement in src/hydra-queue-runner/counter.hh at line 11
~MaintainCount() { c--; }~MaintainCount() { auto prev = c--; assert(prev); } - edit in src/hydra-queue-runner/dispatcher.cc at line 3
#include <unordered_map> - edit in src/hydra-queue-runner/dispatcher.cc at line 146
std::unordered_map<std::string, unsigned int> runnablePerType; - edit in src/hydra-queue-runner/dispatcher.cc at line 160
runnablePerType[step->drv.platform]++; - edit in src/hydra-queue-runner/dispatcher.cc at line 222
assert(runnablePerType[step->drv.platform]);runnablePerType[step->drv.platform]--; - replacement in src/hydra-queue-runner/dispatcher.cc at line 228[3.4226]→[3.4226:4326](∅→∅),[3.4367]→[3.19141:19142](∅→∅),[3.19141]→[3.19141:19142](∅→∅),[3.19142]→[3.4368:4472](∅→∅)
auto reservation = std::make_shared<MaintainCount>(mi.machine->state->currentJobs);auto builderThread = std::thread(&State::builder, this, step, mi.machine, reservation);auto builderThread = std::thread(&State::builder, this,std::make_shared<MachineReservation>(*this, step, mi.machine)); - edit in src/hydra-queue-runner/dispatcher.cc at line 237
}/* Update the stats for the auto-scaler. */{auto machineTypes_(machineTypes.lock());for (auto & i : *machineTypes_)i.second.runnable = 0;for (auto & i : runnablePerType)(*machineTypes_)[i.first].runnable = i.second; - edit in src/hydra-queue-runner/dispatcher.cc at line 283
}}State::MachineReservation::MachineReservation(State & state, Step::ptr step, Machine::ptr machine): state(state), step(step), machine(machine){machine->state->currentJobs++;{auto machineTypes_(state.machineTypes.lock());(*machineTypes_)[step->drv.platform].running++;}}State::MachineReservation::~MachineReservation(){auto prev = machine->state->currentJobs--;assert(prev);if (prev == 1)machine->state->idleSince = time(0);{auto machineTypes_(state.machineTypes.lock());auto & machineType = (*machineTypes_)[step->drv.platform];assert(machineType.running);machineType.running--;if (machineType.running == 0)machineType.lastActive = time(0); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 456
if (s->currentJobs == 0)nested2.attr("idleSince", s->idleSince); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 478
{root.attr("machineTypes");JSONObject nested(out);auto machineTypes_(machineTypes.lock());for (auto & i : *machineTypes_) {nested.attr(i.first);JSONObject nested2(out);nested2.attr("runnable", i.second.runnable);nested2.attr("running", i.second.running);if (i.second.running == 0)nested2.attr("lastActive", i.second.lastActive);}} - edit in src/hydra-queue-runner/state.hh at line 211[3.3777][15.158]
std::atomic<time_t> idleSince{0}; - edit in src/hydra-queue-runner/state.hh at line 321
/* Statistics per machine type for the Hydra auto-scaler. */struct MachineType{unsigned int runnable{0}, running{0};time_t lastActive{0};};Sync<std::map<std::string, MachineType>> machineTypes;struct MachineReservation{typedef std::shared_ptr<MachineReservation> ptr;State & state;Step::ptr step;Machine::ptr machine;MachineReservation(State & state, Step::ptr step, Machine::ptr machine);~MachineReservation();}; - replacement in src/hydra-queue-runner/state.hh at line 392
void builder(Step::ptr step, Machine::ptr machine, std::shared_ptr<MaintainCount> reservation);void builder(MachineReservation::ptr reservation);