Merge dumb scheduler into solution
This commit is contained in:
parent
8097fdf1a4
commit
65dc7dc29d
4 changed files with 15 additions and 12 deletions
|
@ -14,14 +14,20 @@
|
|||
Эта функция не нужна в этой задаче, но он потребуется вам для реализации передачи артефактов между
|
||||
воркерами.
|
||||
|
||||
Вы можете отложить реализацию полной версии шедулера на последний шаг, и реализовать упрощённую версию
|
||||
на одном глобальном канале. Такой реализации будет достаточно, чтобы работали все интеграционные тесты с одним
|
||||
воркером.
|
||||
Для того, чтобы зачесть домашнее задание, достаточно реализовать упрошённый алгоритм планирования с
|
||||
одной глобальной очередью. Функция `ScheduleJob` должна помещать `job` в очередь, или возвращать ссылку на существующий
|
||||
`pendingJob`. Функция `PickJob` должна извлекать первый элемент из очереди. Обратите внимание, что функция `PickJob`
|
||||
принимает контекст. Поскольку это блокирующая операция, она должна поддерживать отмены. Если вы забудете
|
||||
реазиловать отмену в этом месте, интеграционные тесты будут зависать.
|
||||
|
||||
## Алгоритм планирования
|
||||
|
||||
*Далее описывается продвинутый алгоритм планирования. Алгоритм проверяется в отдельной задаче `smartsched`.
|
||||
Для зачёта по домашнему заданию, реализовывать этот алгоритм не обязательно.*
|
||||
|
||||
Планировщик поддерживает множество очередей:
|
||||
1. Одна глобальная очередь
|
||||
|
||||
1. Одна глобальная очередь.
|
||||
2. По две локальные очереди на воркер.
|
||||
|
||||
При запросе нового джоба воркер выбирает случайную джобу из трех очередей - глобальной, и двух локальных относящихся
|
||||
|
@ -45,5 +51,5 @@
|
|||
|
||||
Вместо реального времени, юниттесты шедулера используют библиотеку `clockwork`. Это накладывает ограничения
|
||||
на детали вашей реализации. Ожидание `CacheTimeout` и `DepTimeout` должно быть реализовано как `select {}` на
|
||||
канале, который вернула функция `timeAfter`. Мы считаем что `CacheTimeout < DepTimeout`, и ожидание этих
|
||||
канале, который вернула функция `TimeAfter`. Мы считаем что `CacheTimeout < DepTimeout`, и ожидание этих
|
||||
таймаутов происходит последовательно в одной горутине.
|
|
@ -1,3 +0,0 @@
|
|||
package scheduler
|
||||
|
||||
var TimeAfter = &timeAfter
|
|
@ -12,7 +12,7 @@ import (
|
|||
"gitlab.com/slon/shad-go/distbuild/pkg/build"
|
||||
)
|
||||
|
||||
var timeAfter = time.After
|
||||
var TimeAfter = time.After
|
||||
|
||||
type PendingJob struct {
|
||||
Job *api.JobSpec
|
||||
|
|
|
@ -40,12 +40,12 @@ func newTestScheduler(t *testing.T) *testScheduler {
|
|||
Scheduler: scheduler.NewScheduler(log, config),
|
||||
}
|
||||
|
||||
*scheduler.TimeAfter = s.FakeClock.After
|
||||
scheduler.TimeAfter = s.FakeClock.After
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *testScheduler) stop(t *testing.T) {
|
||||
*scheduler.TimeAfter = time.After
|
||||
scheduler.TimeAfter = time.After
|
||||
goleak.VerifyNone(t)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue