refactor: streamline agent loop code
parent
1797c0f560
commit
b067f9c589
|
@ -46,16 +46,22 @@ pub fn (mut d AgentDaemon) run() {
|
||||||
// This is just so that the very first time the loop is ran, the jobs are
|
// This is just so that the very first time the loop is ran, the jobs are
|
||||||
// always polled
|
// always polled
|
||||||
mut last_poll_time := time.now().add_seconds(-d.conf.polling_frequency)
|
mut last_poll_time := time.now().add_seconds(-d.conf.polling_frequency)
|
||||||
mut sleep_time := 1 * time.second
|
mut sleep_time := 0 * time.second
|
||||||
mut finished, mut empty := 0, 0
|
mut finished, mut empty, mut running := 0, 0, 0
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
if sleep_time > 0 {
|
||||||
|
d.ldebug('Sleeping for $sleep_time')
|
||||||
|
time.sleep(sleep_time)
|
||||||
|
}
|
||||||
|
|
||||||
finished, empty = d.update_atomics()
|
finished, empty = d.update_atomics()
|
||||||
|
running = d.conf.max_concurrent_builds - finished - empty
|
||||||
|
|
||||||
// No new finished builds and no free slots, so there's nothing to be
|
// No new finished builds and no free slots, so there's nothing to be
|
||||||
// done
|
// done
|
||||||
if finished + empty == 0 {
|
if finished + empty == 0 {
|
||||||
time.sleep(1 * time.second)
|
sleep_time = 1 * time.second
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +83,7 @@ pub fn (mut d AgentDaemon) run() {
|
||||||
d.lerror('Failed to poll jobs: $err.msg()')
|
d.lerror('Failed to poll jobs: $err.msg()')
|
||||||
|
|
||||||
// TODO pick a better delay here
|
// TODO pick a better delay here
|
||||||
time.sleep(5 * time.second)
|
sleep_time = 5 * time.second
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,23 +111,16 @@ pub fn (mut d AgentDaemon) run() {
|
||||||
// build.
|
// build.
|
||||||
|
|
||||||
d.start_build(config)
|
d.start_build(config)
|
||||||
|
running++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// No new jobs were scheduled and the agent isn't doing anything,
|
|
||||||
// so we just wait until the next polling period.
|
|
||||||
if new_configs.len == 0 && finished + empty == d.conf.max_concurrent_builds {
|
|
||||||
sleep_time = last_poll_time.add_seconds(d.conf.polling_frequency) - time.now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// The agent is not doing anything, so we just wait until the next poll
|
// The agent is not doing anything, so we just wait until the next poll
|
||||||
// time
|
// time
|
||||||
else if finished + empty == d.conf.max_concurrent_builds {
|
if running == 0 {
|
||||||
sleep_time = last_poll_time.add_seconds(d.conf.polling_frequency) - time.now()
|
sleep_time = last_poll_time.add_seconds(d.conf.polling_frequency) - time.now()
|
||||||
}
|
} else {
|
||||||
|
sleep_time = 1 * time.second
|
||||||
if sleep_time > 0 {
|
|
||||||
d.ldebug('Sleeping for $sleep_time')
|
|
||||||
time.sleep(sleep_time)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue