Load the queue in order of global priority

[?]
Aug 11, 2015, 12:14 AM
ZK76B5ZZCEOJQUDOVKDZPE6IN2YIXQONFUIJ633OAXNC73OG3YSAC

Dependencies

  • [2] WE5Q2NVI Allow build to be bumped to the front of the queue via the web interface
  • [3] 46ADBTMQ Start steps in order of ascending build ID
  • [4] IK2UBDAU Revive jobset scheduling
  • [5] MHVIT4JY Split hydra-queue-runner.cc more
  • [6] T5BIOVJE Add support for tracking custom metrics

Change contents

  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 62
    [3.21846][3.21846:21893]()
    std::multimap<Path, Build::ptr> newBuilds;
    [3.21846]
    [3.21893]
    std::vector<BuildID> newIDs;
    std::map<BuildID, Build::ptr> newBuildsByID;
    std::multimap<Path, BuildID> newBuildsByPath;
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 69
    [3.21931][2.474:678]()
    auto res = txn.parameterized("select id, project, jobset, job, drvPath, maxsilent, timeout, timestamp, globalPriority from Builds where id > $1 and finished = 0 order by id")(lastBuildId).exec();
    [3.21931]
    [3.22108]
    auto res = txn.parameterized
    ("select id, project, jobset, job, drvPath, maxsilent, timeout, timestamp, globalPriority from Builds "
    "where id > $1 and finished = 0 order by globalPriority desc, id")
    (lastBuildId).exec();
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 93
    [3.22782][3.22782:22852]()
    newBuilds.emplace(std::make_pair(build->drvPath, build));
    [3.22782]
    [3.22852]
    newIDs.push_back(id);
    newBuildsByID[id] = build;
    newBuildsByPath.emplace(std::make_pair(build->drvPath, id));
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 106
    [3.23143]
    [3.23143]
    newBuildsByID.erase(build->id);
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 135
    [3.24440][3.24440:24693]()
    while (true) {
    auto i = newBuilds.find(r->drvPath);
    if (i == newBuilds.end()) break;
    Build::ptr b = i->second;
    newBuilds.erase(i);
    createBuild(b);
    }
    [3.24440]
    [3.24693]
    auto i = newBuildsByPath.find(r->drvPath);
    if (i == newBuildsByPath.end()) continue;
    auto j = newBuildsByID.find(i->second);
    if (j == newBuildsByID.end()) continue;
    createBuild(j->second);
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 228
    [3.27972][3.27972:28097]()
    while (!newBuilds.empty()) {
    auto build = newBuilds.begin()->second;
    newBuilds.erase(newBuilds.begin());
    [3.27972]
    [3.28097]
    for (auto id : newIDs) {
    auto i = newBuildsByID.find(id);
    if (i == newBuildsByID.end()) continue;
    auto build = i->second;