Cleanup distbuild
This commit is contained in:
parent
730654cac8
commit
ac8e1b435d
13 changed files with 37 additions and 35 deletions
|
@ -96,7 +96,7 @@ type Job struct {
|
|||
|
||||
После того, как все кубики будут готовы, нужно будет соединить их вместе, реализовав [`distbuild/pkg/worker`](./pkg/worker),
|
||||
[`distbuild/pkg/client`](./pkg/client) и [`distbuild/pkg/dist`](./pkg/dist). Код в этих пакетах нужно отлаживать на
|
||||
интеграционных тестах в [`distbuild/disttest`](../disttest).
|
||||
интеграционных тестах в [`distbuild/disttest`](./disttest).
|
||||
|
||||
Код тестов в этом задании менять нельзя. Это значит, что вы не можете менять интерфейсы в тех местах, где
|
||||
код покрыт тестами.
|
||||
|
@ -105,28 +105,25 @@ type Job struct {
|
|||
<summary markdown="span">Сколько кода нужно написать?</summary>
|
||||
|
||||
```
|
||||
prime@bee ~/C/shad-go> find distbuild -iname '*.go' | grep -v test | grep -v mock | grep -v pkg/build | xargs wc -l
|
||||
23 distbuild/pkg/worker/state.go
|
||||
111 distbuild/pkg/worker/worker.go
|
||||
45 distbuild/pkg/worker/download.go
|
||||
281 distbuild/pkg/worker/job.go
|
||||
69 distbuild/pkg/api/heartbeat.go
|
||||
121 distbuild/pkg/api/build_client.go
|
||||
53 distbuild/pkg/api/build.go
|
||||
60 distbuild/pkg/api/heartbeat_handler.go
|
||||
142 distbuild/pkg/api/build_handler.go
|
||||
56 distbuild/pkg/api/heartbeat_client.go
|
||||
288 distbuild/pkg/scheduler/scheduler.go
|
||||
119 distbuild/pkg/dist/build.go
|
||||
120 distbuild/pkg/dist/coordinator.go
|
||||
98 distbuild/pkg/tarstream/stream.go
|
||||
42 distbuild/pkg/artifact/client.go
|
||||
191 distbuild/pkg/artifact/cache.go
|
||||
54 distbuild/pkg/artifact/handler.go
|
||||
124 distbuild/pkg/client/build.go
|
||||
83 distbuild/pkg/filecache/client.go
|
||||
99 distbuild/pkg/filecache/handler.go
|
||||
111 distbuild/pkg/filecache/filecache.go
|
||||
2290 total
|
||||
prime@fedora ~/C/s/distbuild (master)> find -iname '*_solution.go' | grep -v scheduler_solution| xargs wc -l
|
||||
123 ./pkg/api/build_client_solution.go
|
||||
140 ./pkg/api/build_handler_solution.go
|
||||
58 ./pkg/api/heartbeat_client_solution.go
|
||||
62 ./pkg/api/heartbeat_handler_solution.go
|
||||
5 ./pkg/artifact/cache_solution.go
|
||||
44 ./pkg/artifact/client_solution.go
|
||||
56 ./pkg/artifact/handler_solution.go
|
||||
126 ./pkg/client/build_solution.go
|
||||
121 ./pkg/dist/build_solution.go
|
||||
122 ./pkg/dist/coordinator_solution.go
|
||||
85 ./pkg/filecache/client_solution.go
|
||||
5 ./pkg/filecache/filecache_solution.go
|
||||
101 ./pkg/filecache/handler_solution.go
|
||||
5 ./pkg/tarstream/stream_solution.go
|
||||
47 ./pkg/worker/download_solution.go
|
||||
283 ./pkg/worker/job_solution.go
|
||||
25 ./pkg/worker/state_solution.go
|
||||
113 ./pkg/worker/worker_solution.go
|
||||
1521 total
|
||||
```
|
||||
</details>
|
||||
|
|
|
@ -37,6 +37,7 @@ type env struct {
|
|||
Client *client.Client
|
||||
Coordinator *dist.Coordinator
|
||||
Workers []*worker.Worker
|
||||
WorkerCache []*artifact.Cache
|
||||
|
||||
HTTP *http.Server
|
||||
}
|
||||
|
@ -140,6 +141,7 @@ func newEnv(t *testing.T, config *Config) (e *env, cancel func()) {
|
|||
)
|
||||
|
||||
env.Workers = append(env.Workers, w)
|
||||
env.WorkerCache = append(env.WorkerCache, artifacts)
|
||||
|
||||
router.Handle(workerPrefix+"/", http.StripPrefix(workerPrefix, w))
|
||||
}
|
|
@ -5,9 +5,9 @@ import (
|
|||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"gitlab.com/slon/shad-go/distbuild/pkg/build"
|
||||
)
|
||||
|
@ -29,8 +29,6 @@ func TestArtifactTransferBetweenWorkers(t *testing.T) {
|
|||
var wg sync.WaitGroup
|
||||
wg.Add(3)
|
||||
|
||||
startTime := time.Now()
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
depJobID := build.ID{'b', byte(i)}
|
||||
depJob := build.Job{
|
||||
|
@ -59,6 +57,9 @@ func TestArtifactTransferBetweenWorkers(t *testing.T) {
|
|||
|
||||
wg.Wait()
|
||||
|
||||
testDuration := time.Since(startTime)
|
||||
assert.True(t, testDuration < time.Second*5/2, "test duration should be less than 2.5 seconds")
|
||||
for _, cache := range env.WorkerCache {
|
||||
_, unlock, err := cache.Get(baseJob.ID)
|
||||
require.NoError(t, err)
|
||||
defer unlock()
|
||||
}
|
||||
}
|
|
@ -19,8 +19,10 @@ Client и Coordinator общаются через два вызова.
|
|||
- `POST /build` - стартует новый билд.
|
||||
* Client посылает в Body запроса json c описанием сборки.
|
||||
* Coordinator стримит в body ответа json сообщения, описывающие прогресс сборки.
|
||||
* Первым сообщением в ответе Coordinator присылает `buildID`.
|
||||
* _Тут можно было бы использовать websocket, но нас устраивает более простое решение._
|
||||
* Чтобы послать клиенту неполный body, нужно использовать метод `Flush`.
|
||||
Прочитайте про [`http.ResponseController`](https://pkg.go.dev/net/http#ResponseController) и используйте его.
|
||||
* Первым сообщением в ответе Coordinator присылает `buildID`.
|
||||
|
||||
- `POST /signal?build_id=12345` - посылает сигнал бегущему билду.
|
||||
* Запрос и ответ передаются в формате json.
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
могут вызвать даже для того джоба, который никто не шедулил. В этом случае планировщик просто должен
|
||||
запомнить, что результаты джоба сохранены в кеше на воркере.
|
||||
|
||||
Фукнция `LocateArtifact` должна возвращать имя любого воркера, который хранит в кеше заданный артефакт.
|
||||
Функция `LocateArtifact` должна возвращать имя любого воркера, который хранит в кеше заданный артефакт.
|
||||
Эта функция не нужна в этой задаче, но он потребуется вам для реализации передачи артефактов между
|
||||
воркерами.
|
||||
|
||||
|
|
|
@ -36,10 +36,6 @@ func (c *Scheduler) LocateArtifact(id build.ID) (api.WorkerID, bool) {
|
|||
panic("implement me")
|
||||
}
|
||||
|
||||
func (c *Scheduler) RegisterWorker(workerID api.WorkerID) {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (c *Scheduler) OnJobComplete(workerID api.WorkerID, jobID build.ID, res *api.JobResult) bool {
|
||||
panic("implement me")
|
||||
}
|
||||
|
|
4
distbuild/pkg/tarstream/README.md
Normal file
4
distbuild/pkg/tarstream/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# tarstream
|
||||
|
||||
Пакет `tarstream` содержит функции для сериализации и десериализации директории. Вам не нужно
|
||||
писать новый код в этом пакете, но нужно научиться пользоваться тем кодом, который вам дан.
|
Loading…
Reference in a new issue