hydra-queue-runner: Fix a race keeping cancelled steps alive
[?]
Nov 8, 2016, 10:42 AM
DRC26KFBZIWIFT5CMAVMCHLDYWHUMKC33R3TW2KEZ5NTSVT2AFOACDependencies
- [2]
2DNPZFPNStep cancellation: Don't use pthread_cancel() - [3]
MHVIT4JYSplit hydra-queue-runner.cc more - [4]
NKQOEVVPGet rid of "will retry" messages after "maybe cancelling..." - [5]
KQ3EGUQYAdd some instrumentation to keep track of dispatcher cost - [6]
EYR3EW6JKeep stats for the Hydra auto scaler - [7]
73YR46NJhydra-queue-runner: Write directly to a binary cache - [8]
LVQXQIYAKill active build steps when builds are cancelled - [9]
KPKXKDNGhydra-queue-runner: Fix assertion failure
Change contents
- replacement in src/hydra-queue-runner/builder.cc at line 16
auto activeStep = std::make_shared<ActiveStep>();activeStep->step = reservation->step;activeSteps_.lock()->insert(activeStep);Step::wptr wstep = reservation->step; - replacement in src/hydra-queue-runner/builder.cc at line 18
Finally removeActiveStep([&]() {activeSteps_.lock()->erase(activeStep);});{auto activeStep = std::make_shared<ActiveStep>();activeStep->step = reservation->step;activeSteps_.lock()->insert(activeStep); - replacement in src/hydra-queue-runner/builder.cc at line 23
auto step = reservation->step;Finally removeActiveStep([&]() {activeSteps_.lock()->erase(activeStep);}); - replacement in src/hydra-queue-runner/builder.cc at line 27[3.389]→[3.389:399](∅→∅),[3.399]→[3.1152:1193](∅→∅),[3.1193]→[2.767:830](∅→∅),[3.96]→[3.499:627](∅→∅),[3.159]→[3.499:627](∅→∅),[2.830]→[3.499:627](∅→∅),[3.1261]→[3.499:627](∅→∅),[3.499]→[3.499:627](∅→∅),[3.627]→[3.160:233](∅→∅)
try {auto destStore = getDestStore();res = doBuildStep(destStore, reservation, activeStep);} catch (std::exception & e) {printMsg(lvlError, format("uncaught exception building ‘%1%’ on ‘%2%’: %3%")% step->drvPath % reservation->machine->sshName % e.what());try {auto destStore = getDestStore();res = doBuildStep(destStore, reservation, activeStep);} catch (std::exception & e) {printMsg(lvlError, format("uncaught exception building ‘%1%’ on ‘%2%’: %3%")% reservation->step->drvPath % reservation->machine->sshName % e.what());} - replacement in src/hydra-queue-runner/builder.cc at line 43
if (res != sDone) {Step::ptr step = wstep.lock();if (res != sDone && step) {