"hydra-queue-runner –status" now prints how many runnable and running build steps exist for each machine type. This allows additional machines to be provisioned based on the Hydra load.
EYR3EW6JVHNVLXMI57FUVPHQAHPETBML4H44OGJFHUT54KTTHIGQC IK2UBDAU6QKUXHJG3SXJKYGIIXRDKI6UVRTFC6ZVDXDCGNCMEWVAC MHVIT4JYWUYD4UCGB2AHLXWLX6B5SYE22BREERNGANT7RGGDUFOAC 7LB6QBXYOGU43UDLJDJQZFGT4XDALULXDF3WX3WWHL7X3JTB54CQC 46ADBTMQAHQAPW3OCI24F4I5DVK5N5QVHUA4TQVB6HFN337CHAVQC 4I2HF4L3JOC6KPYLI2YTEVTHBRRYO5XKXOZ6VQ2SJKSQKAPNQXCQC SODOV2CMWA4JMIKRQNJ6MD3U3BS2XTSLINLRAG4SFY742IIJNI5QC 24BMQDZAWDQ7VNIA7TIROXSOYLOJBNZ2E4264WHWNJAEN6ZB3UOAC RQUAATWBGEP3YT4F555XLJYRRRGHDTEILHFORES7AM2XAOVMVJSAC HJOEIMLRDVQ2KZI5HGL2HKGBM3AHP7YIKGKDAGFUNKRUXVRB24NAC CNLNT3T4IXU42GAC64CU5CEDTDLM2SHSJZEVHTMOCWYFXSQNC76QC 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));
}}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);
{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);}}
/* 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();};