This was merged into hydra https://github.com/NixOS/hydra/pull/1579
C++ port to Rust and no longer using remote nix-store --write --serve
protocol but communication over GRPC. Implementation is still work in
progress and is currently being tested. Also not yet feature complete.
Currently only interfacing with nix via nix binaries.
This Queue-Runner implementation works based on a Client/Server Architecture, independent of the nix daemon protocol. The communication is done via grpc between clients (builder/machines) and the server (queue-runner). The clients join the server with a join message and open a bi-directional channel which is used the send commands, this allows us the flexibility that the clients do not need a public IP.
Message workflow (see: proto/v1/streaming.proto)
GET /statusGET /status/machinesGET /status/jobsetsGET /status/buildsGET /status/stepsGET /status/runnableGET /status/queuesGET /status/queues/jobsGET /status/queues/scheduledPUT /build --json {"jobsetId": 1, "drv": "/nix/store/7ayly6qqhzk2x5ww3i3ibaxl69i5mqkg-hdf5-cpp-1.14.6.drv"}GET /metricshydraDataDir = "/var/lib/hydra"
dbUrl = "postgres://hydra@%2Frun%2Fpostgresql:5432/hydra"
maxDbConnections = 128
# valid options: SpeedFactorOnly, CpuCoreCountWithSpeedFactor, BogomipsWithSpeedFactor
dispatchTriggerTimerInS = 120
queueTriggerTimerInS = -1
machineSortFn = "SpeedFactorOnly"
remoteStoreAddr = [
"s3://my-bucket?region=eu-west-1&secret-key=/run/secrets/hydra/signing_key&ls-compression=br&log-compression=br"
]
# if queue is allowed to substitute
useSubstitutes = false
maxRetries = 5
retryInterval = 60
retryBackoff = 3.0
maxUnsupportedTimeInS = 120
stopQueueRunAfterInS = 60
TODO(conni2461): add list what currently works and what still needs to be done
Rust
91.2%
Nix
5.5%
C++
2.9%
This was merged into hydra https://github.com/NixOS/hydra/pull/1579
C++ port to Rust and no longer using remote nix-store --write --serve
protocol but communication over GRPC. Implementation is still work in
progress and is currently being tested. Also not yet feature complete.
Currently only interfacing with nix via nix binaries.
This Queue-Runner implementation works based on a Client/Server Architecture, independent of the nix daemon protocol. The communication is done via grpc between clients (builder/machines) and the server (queue-runner). The clients join the server with a join message and open a bi-directional channel which is used the send commands, this allows us the flexibility that the clients do not need a public IP.
Message workflow (see: proto/v1/streaming.proto)
GET /statusGET /status/machinesGET /status/jobsetsGET /status/buildsGET /status/stepsGET /status/runnableGET /status/queuesGET /status/queues/jobsGET /status/queues/scheduledPUT /build --json {"jobsetId": 1, "drv": "/nix/store/7ayly6qqhzk2x5ww3i3ibaxl69i5mqkg-hdf5-cpp-1.14.6.drv"}GET /metricshydraDataDir = "/var/lib/hydra"
dbUrl = "postgres://hydra@%2Frun%2Fpostgresql:5432/hydra"
maxDbConnections = 128
# valid options: SpeedFactorOnly, CpuCoreCountWithSpeedFactor, BogomipsWithSpeedFactor
dispatchTriggerTimerInS = 120
queueTriggerTimerInS = -1
machineSortFn = "SpeedFactorOnly"
remoteStoreAddr = [
"s3://my-bucket?region=eu-west-1&secret-key=/run/secrets/hydra/signing_key&ls-compression=br&log-compression=br"
]
# if queue is allowed to substitute
useSubstitutes = false
maxRetries = 5
retryInterval = 60
retryBackoff = 3.0
maxUnsupportedTimeInS = 120
stopQueueRunAfterInS = 60
TODO(conni2461): add list what currently works and what still needs to be done
Rust
91.2%
Nix
5.5%
C++
2.9%