hydra-queue-runner: Detect changes to the scheduling shares

[?]
Aug 12, 2015, 11:17 AM
ACBS7C6QGXAMPLQ336WAQMMGLZXBDNNYPE26ZBPUQ24GL4BF643AC

Dependencies

  • [2] IK2UBDAU Revive jobset scheduling
  • [3] NAYQT2GT hydra-queue-runner: Use cmdBuildDerivation
  • [4] HJOEIMLR Refactor
  • [5] MHVIT4JY Split hydra-queue-runner.cc more
  • [*] WE5Q2NVI Allow build to be bumped to the front of the queue via the web interface
  • [*] N22GPKYT * Put info about logs / build products in the DB.
  • [*] SS4TZXNU Distinguish between permanent evaluation errors and transient input errors
  • [*] KN3VYE5P * Cleaned up the foreign key constraints.
  • [*] BXHG3HYL When renaming a jobset, add a redirect from the old name
  • [*] D5QIOJGP * Move everything up one directory.

Change contents

  • edit in src/hydra-queue-runner/queue-monitor.cc at line 29
    [7.267]
    [3.20719]
    receiver jobsetSharesChanged(*conn, "jobset_shares_changed");
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 53
    [3.21501]
    [3.21502]
    if (jobsetSharesChanged.get()) {
    printMsg(lvlTalkative, "got notification: jobset shares changed");
    processJobsetSharesChange(*conn);
    }
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 418
    [2.2480][2.2480:2516]()
    auto jobsets_(jobsets.lock());
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 420
    [2.2571][2.2571:2651]()
    auto i = jobsets_->find(p);
    if (i != jobsets_->end()) return i->second;
    [2.2571]
    [2.2651]
    {
    auto jobsets_(jobsets.lock());
    auto i = jobsets_->find(p);
    if (i != jobsets_->end()) return i->second;
    }
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 432
    [2.2942][2.2942:2975]()
    if (shares == 0) shares = 1;
  • replacement in src/hydra-queue-runner/queue-monitor.cc at line 433
    [2.2976][2.2976:3028]()
    auto jobset = std::make_shared<Jobset>(shares);
    [2.2976]
    [2.3028]
    auto jobset = std::make_shared<Jobset>();
    jobset->setShares(shares);
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 447
    [2.3593]
    [2.3593]
    auto jobsets_(jobsets.lock());
    // Can't happen because only this thread adds to "jobsets".
    assert(jobsets_->find(p) == jobsets_->end());
  • edit in src/hydra-queue-runner/queue-monitor.cc at line 453
    [2.3643]
    void State::processJobsetSharesChange(Connection & conn)
    {
    /* Get the current set of jobsets. */
    pqxx::work txn(conn);
    auto res = txn.exec("select project, name, schedulingShares from Jobsets");
    for (auto const & row : res) {
    auto jobsets_(jobsets.lock());
    auto i = jobsets_->find(std::make_pair(row["project"].as<string>(), row["name"].as<string>()));
    if (i == jobsets_->end()) continue;
    i->second->setShares(row["schedulingShares"].as<unsigned int>());
    }
    }
  • edit in src/hydra-queue-runner/state.hh at line 69
    [2.3751][2.3751:3805]()
    Jobset(unsigned int shares) : shares(shares) { }
  • replacement in src/hydra-queue-runner/state.hh at line 75
    [2.3910][2.3910:3948]()
    std::atomic<unsigned int> shares;
    [2.3910]
    [3.1955]
    std::atomic<unsigned int> shares{1};
  • edit in src/hydra-queue-runner/state.hh at line 85
    [2.4142]
    [2.4142]
    }
    void setShares(int shares_)
    {
    assert(shares_ > 0);
    shares = shares_;
  • edit in src/hydra-queue-runner/state.hh at line 361
    [2.4820]
    [3.8033]
    void processJobsetSharesChange(Connection & conn);
  • edit in src/sql/hydra.sql at line 67
    [9.1325]
    [10.5479]
    check schedulingShares > 0,
  • edit in src/sql/hydra.sql at line 76
    [11.3366]
    [11.3366]
    #ifdef POSTGRESQL
  • edit in src/sql/hydra.sql at line 78
    [11.3367]
    [11.3367]
    create function notifyJobsetSharesChanged() returns trigger as 'begin notify jobset_shares_changed; return null; end;' language plpgsql;
    create trigger JobsetSharesChanged after update on Jobsets for each row
    when (old.schedulingShares != new.schedulingShares) execute procedure notifyJobsetSharesChanged();
    #endif
  • file addition: upgrade-41.sql (----------)
    [12.3004]
    create function notifyJobsetSharesChanged() returns trigger as 'begin notify jobset_shares_changed; return null; end;' language plpgsql;
    create trigger JobsetSharesChanged after update on Jobsets for each row
    when (old.schedulingShares != new.schedulingShares) execute procedure notifyJobsetSharesChanged();
    alter table Jobsets add constraint jobsets_check check (schedulingShares > 0);