hydra-queue-runner: Detect changes to the scheduling shares
[?]
Aug 12, 2015, 11:17 AM
ACBS7C6QGXAMPLQ336WAQMMGLZXBDNNYPE26ZBPUQ24GL4BF643ACDependencies
- [2]
IK2UBDAURevive jobset scheduling - [3]
NAYQT2GThydra-queue-runner: Use cmdBuildDerivation - [4]
HJOEIMLRRefactor - [5]
MHVIT4JYSplit hydra-queue-runner.cc more - [*]
WE5Q2NVIAllow build to be bumped to the front of the queue via the web interface - [*]
N22GPKYT* Put info about logs / build products in the DB. - [*]
SS4TZXNUDistinguish between permanent evaluation errors and transient input errors - [*]
KN3VYE5P* Cleaned up the foreign key constraints. - [*]
BXHG3HYLWhen 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
receiver jobsetSharesChanged(*conn, "jobset_shares_changed"); - edit in src/hydra-queue-runner/queue-monitor.cc at line 53
if (jobsetSharesChanged.get()) {printMsg(lvlTalkative, "got notification: jobset shares changed");processJobsetSharesChange(*conn);} - edit in src/hydra-queue-runner/queue-monitor.cc at line 418
auto jobsets_(jobsets.lock()); - replacement in src/hydra-queue-runner/queue-monitor.cc at line 420
auto i = jobsets_->find(p);if (i != jobsets_->end()) return i->second;{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
if (shares == 0) shares = 1; - replacement in src/hydra-queue-runner/queue-monitor.cc at line 433
auto jobset = std::make_shared<Jobset>(shares);auto jobset = std::make_shared<Jobset>();jobset->setShares(shares); - edit in src/hydra-queue-runner/queue-monitor.cc at line 447
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
Jobset(unsigned int shares) : shares(shares) { } - replacement in src/hydra-queue-runner/state.hh at line 75
std::atomic<unsigned int> shares;std::atomic<unsigned int> shares{1}; - edit in src/hydra-queue-runner/state.hh at line 85
}void setShares(int shares_){assert(shares_ > 0);shares = shares_; - edit in src/hydra-queue-runner/state.hh at line 361
void processJobsetSharesChange(Connection & conn); - edit in src/sql/hydra.sql at line 67
check schedulingShares > 0, - edit in src/sql/hydra.sql at line 76
#ifdef POSTGRESQL - edit in src/sql/hydra.sql at line 78
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 rowwhen (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 rowwhen (old.schedulingShares != new.schedulingShares) execute procedure notifyJobsetSharesChanged();alter table Jobsets add constraint jobsets_check check (schedulingShares > 0);