@rivetkit/engine 1.0.0 → 2.2.1-pr.4600.b74ff3b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1038) hide show
  1. package/CLAUDE.md +38 -0
  2. package/artifacts/config-schema.json +1140 -0
  3. package/artifacts/errors/actor.kv_storage_quota_exceeded.json +5 -0
  4. package/artifacts/errors/actor.no_runner_config_configured.json +5 -0
  5. package/artifacts/errors/guard.actor_runner_failed.json +5 -0
  6. package/artifacts/errors/guard.invalid_request.json +5 -0
  7. package/artifacts/errors/guard.invalid_request_body.json +5 -0
  8. package/artifacts/errors/guard.invalid_response_body.json +5 -0
  9. package/artifacts/errors/guard.missing_query_parameter.json +5 -0
  10. package/artifacts/errors/guard.query_ambiguous_runner_configs.json +5 -0
  11. package/artifacts/errors/guard.query_duplicate_param.json +5 -0
  12. package/artifacts/errors/guard.query_empty_actor_name.json +5 -0
  13. package/artifacts/errors/guard.query_get_disallowed_params.json +5 -0
  14. package/artifacts/errors/guard.query_invalid_base64_input.json +5 -0
  15. package/artifacts/errors/guard.query_invalid_cbor_input.json +5 -0
  16. package/artifacts/errors/guard.query_invalid_params.json +5 -0
  17. package/artifacts/errors/guard.query_invalid_percent_encoding.json +5 -0
  18. package/artifacts/errors/guard.query_missing_runner_name.json +5 -0
  19. package/artifacts/errors/guard.query_no_runner_configs.json +5 -0
  20. package/artifacts/errors/guard.query_param_missing_equals.json +5 -0
  21. package/artifacts/errors/guard.query_path_token_syntax.json +5 -0
  22. package/artifacts/errors/guard.query_unknown_param.json +5 -0
  23. package/artifacts/errors/guard.request_body_too_large.json +5 -0
  24. package/artifacts/errors/guard.response_body_too_large.json +5 -0
  25. package/artifacts/errors/serverless_runner_pool.failed_to_fetch_metadata.json +5 -0
  26. package/artifacts/errors/serverless_runner_pool.not_found.json +5 -0
  27. package/artifacts/errors/{api.rate_limited.json → test.api_rate_limited.json} +2 -2
  28. package/artifacts/errors/{namespace.invalid_name.json → test.namespace_invalid_name.json} +2 -2
  29. package/artifacts/errors/ws.going_away.json +5 -0
  30. package/artifacts/openapi.json +458 -6
  31. package/docker/builder-base/linux-gnu.Dockerfile +21 -0
  32. package/docker/builder-base/linux-musl.Dockerfile +53 -0
  33. package/docker/builder-base/osxcross.Dockerfile +42 -0
  34. package/docker/builder-base/windows-mingw.Dockerfile +41 -0
  35. package/docker/builder-base/windows-msvc.Dockerfile +25 -0
  36. package/docker/dev/docker-compose.yml +43 -18
  37. package/docker/dev/grafana/dashboards/api.json +1077 -1239
  38. package/docker/dev/grafana/dashboards/cache.json +911 -1074
  39. package/docker/dev/grafana/dashboards/epoxy.json +1606 -0
  40. package/docker/dev/grafana/dashboards/futures.json +242 -229
  41. package/docker/dev/grafana/dashboards/gasoline.json +2663 -2476
  42. package/docker/dev/grafana/dashboards/guard.json +1433 -1273
  43. package/docker/dev/grafana/dashboards/operation.json +871 -0
  44. package/docker/dev/grafana/dashboards/pegboard.json +1274 -0
  45. package/docker/dev/grafana/dashboards/tokio.json +930 -1004
  46. package/docker/dev/grafana/dashboards/traces.json +35 -13
  47. package/docker/dev/grafana/provisioning/datasources/datasources.yaml +8 -0
  48. package/docker/{dev-multinode/otel-collector-server → dev/otel-collector}/config.yaml +18 -13
  49. package/docker/dev/prometheus/prometheus.yml +4 -0
  50. package/docker/dev/rivet-engine/config.jsonc +9 -16
  51. package/docker/dev-host/docker-compose.yml +38 -16
  52. package/docker/dev-host/grafana/dashboards/api.json +1077 -1239
  53. package/docker/dev-host/grafana/dashboards/cache.json +911 -1074
  54. package/docker/dev-host/grafana/dashboards/epoxy.json +1606 -0
  55. package/docker/dev-host/grafana/dashboards/futures.json +242 -229
  56. package/docker/dev-host/grafana/dashboards/gasoline.json +2663 -2476
  57. package/docker/dev-host/grafana/dashboards/guard.json +1433 -1273
  58. package/docker/dev-host/grafana/dashboards/operation.json +871 -0
  59. package/docker/dev-host/grafana/dashboards/pegboard.json +1274 -0
  60. package/docker/dev-host/grafana/dashboards/tokio.json +930 -1004
  61. package/docker/dev-host/grafana/dashboards/traces.json +35 -13
  62. package/docker/dev-host/grafana/provisioning/datasources/datasources.yaml +8 -0
  63. package/docker/dev-host/{otel-collector-server → otel-collector}/config.yaml +18 -13
  64. package/docker/dev-host/prometheus/prometheus.yml +4 -0
  65. package/docker/dev-host/rivet-engine/config.jsonc +9 -16
  66. package/docker/dev-multidc/core/grafana/dashboards/api.json +1077 -1239
  67. package/docker/dev-multidc/core/grafana/dashboards/cache.json +911 -1074
  68. package/docker/dev-multidc/core/grafana/dashboards/epoxy.json +1606 -0
  69. package/docker/dev-multidc/core/grafana/dashboards/futures.json +242 -229
  70. package/docker/dev-multidc/core/grafana/dashboards/gasoline.json +2663 -2476
  71. package/docker/dev-multidc/core/grafana/dashboards/guard.json +1433 -1273
  72. package/docker/dev-multidc/core/grafana/dashboards/operation.json +871 -0
  73. package/docker/dev-multidc/core/grafana/dashboards/pegboard.json +1274 -0
  74. package/docker/dev-multidc/core/grafana/dashboards/tokio.json +930 -1004
  75. package/docker/dev-multidc/core/grafana/dashboards/traces.json +35 -13
  76. package/docker/dev-multidc/core/grafana/provisioning/datasources/datasources.yaml +8 -0
  77. package/docker/dev-multidc/core/prometheus/prometheus.yml +4 -0
  78. package/docker/dev-multidc/datacenters/dc-a/{otel-collector-server → otel-collector}/config.yaml +18 -13
  79. package/docker/dev-multidc/datacenters/dc-a/rivet-engine/config.jsonc +23 -22
  80. package/docker/{dev-multidc-multinode/datacenters/dc-b/otel-collector-server → dev-multidc/datacenters/dc-b/otel-collector}/config.yaml +18 -13
  81. package/docker/dev-multidc/datacenters/dc-b/rivet-engine/config.jsonc +23 -22
  82. package/docker/dev-multidc/datacenters/dc-c/{otel-collector-server → otel-collector}/config.yaml +18 -13
  83. package/docker/dev-multidc/datacenters/dc-c/rivet-engine/config.jsonc +23 -22
  84. package/docker/dev-multidc/docker-compose.yml +71 -64
  85. package/docker/dev-multidc-multinode/core/grafana/dashboards/api.json +1077 -1239
  86. package/docker/dev-multidc-multinode/core/grafana/dashboards/cache.json +911 -1074
  87. package/docker/dev-multidc-multinode/core/grafana/dashboards/epoxy.json +1606 -0
  88. package/docker/dev-multidc-multinode/core/grafana/dashboards/futures.json +242 -229
  89. package/docker/dev-multidc-multinode/core/grafana/dashboards/gasoline.json +2663 -2476
  90. package/docker/dev-multidc-multinode/core/grafana/dashboards/guard.json +1433 -1273
  91. package/docker/dev-multidc-multinode/core/grafana/dashboards/operation.json +871 -0
  92. package/docker/dev-multidc-multinode/core/grafana/dashboards/pegboard.json +1274 -0
  93. package/docker/dev-multidc-multinode/core/grafana/dashboards/tokio.json +930 -1004
  94. package/docker/dev-multidc-multinode/core/grafana/dashboards/traces.json +35 -13
  95. package/docker/dev-multidc-multinode/core/grafana/provisioning/datasources/datasources.yaml +8 -0
  96. package/docker/dev-multidc-multinode/core/prometheus/prometheus.yml +4 -0
  97. package/docker/dev-multidc-multinode/datacenters/dc-a/{otel-collector-server → otel-collector}/config.yaml +28 -13
  98. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/0/config.jsonc +23 -22
  99. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/1/config.jsonc +23 -22
  100. package/docker/dev-multidc-multinode/datacenters/dc-a/rivet-engine/2/config.jsonc +23 -22
  101. package/docker/{dev-multidc/datacenters/dc-b/otel-collector-server → dev-multidc-multinode/datacenters/dc-b/otel-collector}/config.yaml +28 -13
  102. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/0/config.jsonc +23 -22
  103. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/1/config.jsonc +23 -22
  104. package/docker/dev-multidc-multinode/datacenters/dc-b/rivet-engine/2/config.jsonc +23 -22
  105. package/docker/dev-multidc-multinode/datacenters/dc-c/{otel-collector-server → otel-collector}/config.yaml +28 -13
  106. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/0/config.jsonc +23 -22
  107. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/1/config.jsonc +23 -22
  108. package/docker/dev-multidc-multinode/datacenters/dc-c/rivet-engine/2/config.jsonc +23 -22
  109. package/docker/dev-multidc-multinode/docker-compose.yml +113 -88
  110. package/docker/dev-multinode/docker-compose.yml +57 -26
  111. package/docker/dev-multinode/grafana/dashboards/api.json +1077 -1239
  112. package/docker/dev-multinode/grafana/dashboards/cache.json +911 -1074
  113. package/docker/dev-multinode/grafana/dashboards/epoxy.json +1606 -0
  114. package/docker/dev-multinode/grafana/dashboards/futures.json +242 -229
  115. package/docker/dev-multinode/grafana/dashboards/gasoline.json +2663 -2476
  116. package/docker/dev-multinode/grafana/dashboards/guard.json +1433 -1273
  117. package/docker/dev-multinode/grafana/dashboards/operation.json +871 -0
  118. package/docker/dev-multinode/grafana/dashboards/pegboard.json +1274 -0
  119. package/docker/dev-multinode/grafana/dashboards/tokio.json +930 -1004
  120. package/docker/dev-multinode/grafana/dashboards/traces.json +35 -13
  121. package/docker/dev-multinode/grafana/provisioning/datasources/datasources.yaml +8 -0
  122. package/docker/{dev/otel-collector-server → dev-multinode/otel-collector}/config.yaml +28 -13
  123. package/docker/dev-multinode/prometheus/prometheus.yml +4 -0
  124. package/docker/dev-multinode/rivet-engine/0/config.jsonc +9 -16
  125. package/docker/dev-multinode/rivet-engine/1/config.jsonc +9 -16
  126. package/docker/dev-multinode/rivet-engine/2/config.jsonc +9 -16
  127. package/docker/engine/linux-aarch64.Dockerfile +9 -49
  128. package/docker/engine/linux-x86_64.Dockerfile +7 -57
  129. package/docker/engine/macos-aarch64.Dockerfile +8 -54
  130. package/docker/engine/macos-x86_64.Dockerfile +9 -55
  131. package/docker/engine/windows.Dockerfile +5 -53
  132. package/docker/template/grafana-dashboards/api.json +1077 -1239
  133. package/docker/template/grafana-dashboards/cache.json +911 -1074
  134. package/docker/template/grafana-dashboards/epoxy.json +1606 -0
  135. package/docker/template/grafana-dashboards/futures.json +242 -229
  136. package/docker/template/grafana-dashboards/gasoline.json +2663 -2476
  137. package/docker/template/grafana-dashboards/guard.json +1433 -1273
  138. package/docker/template/grafana-dashboards/operation.json +871 -0
  139. package/docker/template/grafana-dashboards/pegboard.json +1274 -0
  140. package/docker/template/grafana-dashboards/tokio.json +930 -1004
  141. package/docker/template/grafana-dashboards/traces.json +35 -13
  142. package/docker/template/node_modules/.bin/js-yaml +4 -4
  143. package/docker/template/node_modules/.bin/tsc +4 -4
  144. package/docker/template/node_modules/.bin/tsserver +4 -4
  145. package/docker/template/node_modules/.bin/tsx +4 -4
  146. package/docker/template/src/docker-compose.ts +42 -29
  147. package/docker/template/src/main.ts +4 -4
  148. package/docker/template/src/services/core/grafana.ts +14 -1
  149. package/docker/template/src/services/core/prometheus.ts +20 -0
  150. package/docker/template/src/services/edge/{otel-collector-server.ts → otel-collector.ts} +55 -24
  151. package/docker/template/src/services/edge/rivet-engine.ts +4 -16
  152. package/docker/template/src/services/edge/runner.ts +2 -3
  153. package/docker/universal/Dockerfile +5 -3
  154. package/package.json +2 -5
  155. package/packages/api-builder/src/global_context.rs +1 -1
  156. package/packages/api-builder/src/metrics.rs +28 -24
  157. package/packages/api-builder/src/middleware.rs +30 -48
  158. package/packages/api-builder/src/router.rs +13 -1
  159. package/packages/api-peer/Cargo.toml +7 -9
  160. package/packages/api-peer/src/actors/delete.rs +56 -57
  161. package/packages/api-peer/src/actors/get_or_create.rs +139 -0
  162. package/packages/api-peer/src/actors/kv_get.rs +40 -28
  163. package/packages/api-peer/src/actors/list.rs +31 -14
  164. package/packages/api-peer/src/actors/list_names.rs +6 -6
  165. package/packages/api-peer/src/actors/mod.rs +3 -0
  166. package/packages/api-peer/src/actors/reschedule.rs +55 -0
  167. package/packages/api-peer/src/actors/sleep.rs +55 -0
  168. package/packages/api-peer/src/envoys.rs +57 -0
  169. package/packages/api-peer/src/internal.rs +441 -24
  170. package/packages/api-peer/src/lib.rs +2 -1
  171. package/packages/api-peer/src/namespaces.rs +24 -9
  172. package/packages/api-peer/src/router.rs +31 -7
  173. package/packages/api-peer/src/runner_configs.rs +66 -19
  174. package/packages/api-peer/src/runners.rs +30 -32
  175. package/packages/api-public/Cargo.toml +2 -0
  176. package/packages/api-public/src/actors/create.rs +8 -17
  177. package/packages/api-public/src/actors/delete.rs +11 -35
  178. package/packages/api-public/src/actors/get_or_create.rs +23 -95
  179. package/packages/api-public/src/actors/kv_get.rs +12 -29
  180. package/packages/api-public/src/actors/list.rs +56 -78
  181. package/packages/api-public/src/actors/list_names.rs +15 -14
  182. package/packages/api-public/src/actors/mod.rs +2 -0
  183. package/packages/api-public/src/actors/reschedule.rs +65 -0
  184. package/packages/api-public/src/actors/sleep.rs +64 -0
  185. package/packages/api-public/src/actors/utils.rs +12 -60
  186. package/packages/api-public/src/ctx.rs +14 -6
  187. package/packages/api-public/src/datacenters.rs +5 -5
  188. package/packages/api-public/src/envoys.rs +57 -0
  189. package/packages/api-public/src/errors.rs +0 -7
  190. package/packages/api-public/src/health.rs +51 -44
  191. package/packages/api-public/src/lib.rs +2 -1
  192. package/packages/api-public/src/metadata.rs +44 -14
  193. package/packages/api-public/src/namespaces.rs +11 -11
  194. package/packages/api-public/src/router.rs +22 -5
  195. package/packages/api-public/src/runner_configs/delete.rs +13 -10
  196. package/packages/api-public/src/runner_configs/list.rs +5 -2
  197. package/packages/api-public/src/runner_configs/refresh_metadata.rs +1 -1
  198. package/packages/api-public/src/runner_configs/serverless_health_check.rs +2 -2
  199. package/packages/api-public/src/runner_configs/upsert.rs +12 -9
  200. package/packages/api-public/src/runner_configs/utils.rs +35 -175
  201. package/packages/api-public/src/runners.rs +17 -45
  202. package/packages/{dump-openapi → api-public-openapi-gen}/Cargo.toml +1 -1
  203. package/packages/api-types/src/actors/create.rs +1 -0
  204. package/packages/api-types/src/actors/delete.rs +20 -0
  205. package/packages/api-types/src/actors/get_or_create.rs +30 -0
  206. package/packages/api-types/src/actors/kv_get.rs +25 -0
  207. package/packages/api-types/src/actors/list.rs +8 -1
  208. package/packages/api-types/src/actors/mod.rs +5 -0
  209. package/packages/api-types/src/actors/reschedule.rs +26 -0
  210. package/packages/api-types/src/actors/sleep.rs +26 -0
  211. package/packages/api-types/src/datacenters/list.rs +2 -2
  212. package/packages/api-types/src/envoys/list.rs +24 -0
  213. package/packages/api-types/src/envoys/mod.rs +1 -0
  214. package/packages/api-types/src/lib.rs +1 -0
  215. package/packages/api-types/src/namespaces/list.rs +4 -0
  216. package/packages/api-types/src/namespaces/runner_configs.rs +23 -2
  217. package/packages/api-types/src/runner_configs/list.rs +6 -1
  218. package/packages/api-types/src/runner_configs/mod.rs +12 -0
  219. package/packages/api-types/src/runners/list.rs +4 -0
  220. package/packages/api-types/src/runners/list_names.rs +21 -0
  221. package/packages/api-types/src/runners/mod.rs +1 -0
  222. package/packages/api-util/src/lib.rs +44 -21
  223. package/packages/bootstrap/Cargo.toml +7 -4
  224. package/packages/bootstrap/src/backfill.rs +53 -0
  225. package/packages/bootstrap/src/lib.rs +43 -7
  226. package/packages/cache/Cargo.toml +3 -1
  227. package/packages/cache/src/driver.rs +43 -151
  228. package/packages/cache/src/getter_ctx.rs +48 -70
  229. package/packages/cache/src/inner.rs +28 -18
  230. package/packages/cache/src/key.rs +17 -3
  231. package/packages/cache/src/lib.rs +0 -2
  232. package/packages/cache/src/metrics.rs +43 -31
  233. package/packages/cache/src/req_config.rs +219 -156
  234. package/packages/cache/tests/fetch.rs +91 -0
  235. package/packages/cache/tests/in_flight.rs +361 -0
  236. package/packages/cache/tests/ttl.rs +314 -0
  237. package/packages/cache-purge/src/lib.rs +1 -1
  238. package/packages/config/Cargo.toml +1 -0
  239. package/packages/config/src/config/cache.rs +10 -3
  240. package/packages/config/src/config/clickhouse.rs +0 -30
  241. package/packages/config/src/config/{db.rs → db/mod.rs} +3 -18
  242. package/packages/config/src/config/db/postgres.rs +59 -0
  243. package/packages/config/src/config/guard.rs +19 -0
  244. package/packages/config/src/config/metrics.rs +22 -0
  245. package/packages/config/src/config/mod.rs +44 -10
  246. package/packages/config/src/config/pegboard.rs +242 -16
  247. package/packages/config/src/config/pubsub.rs +11 -0
  248. package/packages/config/src/config/runtime.rs +58 -0
  249. package/packages/config/src/config/telemetry.rs +1 -0
  250. package/packages/config/src/config/topology.rs +78 -19
  251. package/packages/config/src/defaults.rs +3 -0
  252. package/packages/config/src/lib.rs +10 -1
  253. package/packages/config-schema-gen/Cargo.toml +11 -0
  254. package/packages/config-schema-gen/build.rs +26 -0
  255. package/packages/config-schema-gen/src/lib.rs +2 -0
  256. package/packages/engine/Cargo.toml +11 -2
  257. package/packages/engine/src/commands/db/mod.rs +0 -10
  258. package/packages/engine/src/commands/epoxy.rs +395 -0
  259. package/packages/engine/src/commands/mod.rs +1 -1
  260. package/packages/engine/src/commands/start.rs +43 -63
  261. package/packages/engine/src/commands/udb/cli.rs +148 -4
  262. package/packages/engine/src/commands/wf/mod.rs +83 -12
  263. package/packages/engine/src/commands/wf/signal.rs +38 -0
  264. package/packages/engine/src/lib.rs +6 -3
  265. package/packages/engine/src/main.rs +1 -1
  266. package/packages/engine/src/run_config.rs +6 -7
  267. package/packages/engine/src/util/db.rs +1 -25
  268. package/packages/engine/src/util/wf/mod.rs +39 -5
  269. package/packages/engine/tests/common/actors.rs +50 -332
  270. package/packages/engine/tests/common/api/mod.rs +7 -0
  271. package/packages/engine/tests/common/api/peer.rs +364 -0
  272. package/packages/engine/tests/common/api/public.rs +473 -0
  273. package/packages/engine/tests/common/ctx.rs +15 -3
  274. package/packages/engine/tests/common/mod.rs +8 -5
  275. package/packages/engine/tests/common/test_envoy.rs +87 -0
  276. package/packages/engine/tests/common/test_helpers.rs +218 -130
  277. package/packages/engine/tests/common/test_runner.rs +273 -0
  278. package/packages/engine/tests/envoy/actors_lifecycle.rs +1277 -0
  279. package/packages/engine/tests/envoy/mod.rs +1 -0
  280. package/packages/engine/tests/mod.rs +3 -0
  281. package/packages/engine/tests/runner/actors_alarm.rs +1453 -0
  282. package/packages/engine/tests/runner/actors_kv_crud.rs +996 -0
  283. package/packages/engine/tests/runner/actors_kv_delete_range.rs +126 -0
  284. package/packages/engine/tests/runner/actors_kv_drop.rs +255 -0
  285. package/packages/engine/tests/runner/actors_kv_list.rs +1061 -0
  286. package/packages/engine/tests/runner/actors_kv_misc.rs +882 -0
  287. package/packages/engine/tests/runner/actors_lifecycle.rs +1284 -0
  288. package/packages/engine/tests/runner/actors_scheduling_errors.rs +1005 -0
  289. package/packages/engine/tests/runner/api_actors_create.rs +422 -0
  290. package/packages/engine/tests/runner/api_actors_delete.rs +487 -0
  291. package/packages/engine/tests/runner/api_actors_get_or_create.rs +634 -0
  292. package/packages/engine/tests/runner/api_actors_list.rs +1771 -0
  293. package/packages/engine/tests/runner/api_actors_list_names.rs +691 -0
  294. package/packages/engine/tests/runner/api_namespaces_create.rs +428 -0
  295. package/packages/engine/tests/runner/api_namespaces_list.rs +760 -0
  296. package/packages/engine/tests/runner/api_runner_configs_list.rs +646 -0
  297. package/packages/engine/tests/runner/api_runner_configs_upsert.rs +651 -0
  298. package/packages/engine/tests/runner/api_runners_list.rs +166 -0
  299. package/packages/engine/tests/runner/api_runners_list_names.rs +386 -0
  300. package/packages/engine/tests/runner/mod.rs +20 -0
  301. package/packages/engine/tests/runner/runner_drain_on_version.rs +620 -0
  302. package/packages/env/Cargo.toml +0 -4
  303. package/packages/env/src/lib.rs +0 -18
  304. package/packages/epoxy/Cargo.toml +3 -2
  305. package/packages/epoxy/README.md +554 -93
  306. package/packages/epoxy/src/consts.rs +4 -36
  307. package/packages/epoxy/src/http_client.rs +59 -26
  308. package/packages/epoxy/src/http_routes.rs +73 -10
  309. package/packages/epoxy/src/keys/keys.rs +260 -11
  310. package/packages/epoxy/src/keys/mod.rs +11 -1
  311. package/packages/epoxy/src/keys/replica.rs +5 -260
  312. package/packages/epoxy/src/lib.rs +2 -1
  313. package/packages/epoxy/src/metrics.rs +118 -0
  314. package/packages/epoxy/src/ops/kv/get_local.rs +15 -24
  315. package/packages/epoxy/src/ops/kv/get_optimistic.rs +102 -64
  316. package/packages/epoxy/src/ops/kv/mod.rs +1 -0
  317. package/packages/epoxy/src/ops/kv/purge_local.rs +18 -9
  318. package/packages/epoxy/src/ops/kv/read_value.rs +92 -0
  319. package/packages/epoxy/src/ops/mod.rs +0 -1
  320. package/packages/epoxy/src/ops/propose.rs +1079 -194
  321. package/packages/epoxy/src/replica/ballot.rs +162 -102
  322. package/packages/epoxy/src/replica/changelog.rs +147 -0
  323. package/packages/epoxy/src/replica/commit_kv.rs +69 -66
  324. package/packages/epoxy/src/replica/message_request.rs +33 -48
  325. package/packages/epoxy/src/replica/messages/accept.rs +82 -41
  326. package/packages/epoxy/src/replica/messages/commit.rs +21 -33
  327. package/packages/epoxy/src/replica/messages/mod.rs +0 -8
  328. package/packages/epoxy/src/replica/messages/prepare.rs +68 -69
  329. package/packages/epoxy/src/replica/mod.rs +1 -6
  330. package/packages/epoxy/src/replica/update_config.rs +3 -1
  331. package/packages/epoxy/src/types.rs +30 -54
  332. package/packages/epoxy/src/utils.rs +149 -16
  333. package/packages/epoxy/src/workflows/backfill.rs +233 -0
  334. package/packages/epoxy/src/workflows/coordinator/mod.rs +33 -7
  335. package/packages/epoxy/src/workflows/coordinator/reconfigure.rs +44 -0
  336. package/packages/epoxy/src/workflows/coordinator/replica_status_change.rs +4 -3
  337. package/packages/epoxy/src/workflows/mod.rs +1 -1
  338. package/packages/epoxy/src/workflows/replica/mod.rs +4 -6
  339. package/packages/epoxy/src/workflows/replica/setup.rs +130 -771
  340. package/packages/epoxy/tests/backfill.rs +65 -0
  341. package/packages/epoxy/tests/backfill_snapshot.rs +233 -0
  342. package/packages/epoxy/tests/common/mod.rs +77 -21
  343. package/packages/epoxy/tests/common/utils.rs +366 -10
  344. package/packages/epoxy/tests/consensus_regressions.rs +285 -0
  345. package/packages/epoxy/tests/kv.rs +128 -167
  346. package/packages/epoxy/tests/kv_get_optimistic.rs +257 -157
  347. package/packages/epoxy/tests/migration.rs +75 -0
  348. package/packages/epoxy/tests/proposal.rs +133 -28
  349. package/packages/epoxy/tests/reconfigure.rs +92 -474
  350. package/packages/error/tests/basic.rs +8 -8
  351. package/packages/gasoline/Cargo.toml +1 -0
  352. package/packages/gasoline/src/builder/common/message.rs +19 -47
  353. package/packages/gasoline/src/builder/common/signal.rs +37 -21
  354. package/packages/gasoline/src/builder/common/workflow.rs +19 -15
  355. package/packages/gasoline/src/builder/workflow/lupe.rs +295 -0
  356. package/packages/gasoline/src/builder/workflow/message.rs +24 -47
  357. package/packages/gasoline/src/builder/workflow/mod.rs +1 -0
  358. package/packages/gasoline/src/builder/workflow/signal.rs +68 -22
  359. package/packages/gasoline/src/builder/workflow/sub_workflow.rs +6 -15
  360. package/packages/gasoline/src/ctx/activity.rs +46 -6
  361. package/packages/gasoline/src/ctx/common.rs +26 -23
  362. package/packages/gasoline/src/ctx/listen.rs +33 -50
  363. package/packages/gasoline/src/ctx/message.rs +76 -64
  364. package/packages/gasoline/src/ctx/operation.rs +15 -5
  365. package/packages/gasoline/src/ctx/standalone.rs +32 -4
  366. package/packages/gasoline/src/ctx/test.rs +31 -6
  367. package/packages/gasoline/src/ctx/versioned_workflow.rs +33 -7
  368. package/packages/gasoline/src/ctx/workflow.rs +194 -384
  369. package/packages/gasoline/src/db/debug.rs +49 -9
  370. package/packages/gasoline/src/db/kv/debug.rs +905 -15
  371. package/packages/gasoline/src/db/kv/keys/history.rs +434 -9
  372. package/packages/gasoline/src/db/kv/keys/metric.rs +70 -47
  373. package/packages/gasoline/src/db/kv/keys/signal.rs +19 -3
  374. package/packages/gasoline/src/db/kv/keys/workflow.rs +349 -3
  375. package/packages/gasoline/src/db/kv/mod.rs +975 -514
  376. package/packages/gasoline/src/db/kv/system.rs +155 -18
  377. package/packages/gasoline/src/db/mod.rs +29 -7
  378. package/packages/gasoline/src/error.rs +26 -21
  379. package/packages/gasoline/src/executable.rs +3 -1
  380. package/packages/gasoline/src/history/cursor.rs +436 -336
  381. package/packages/gasoline/src/history/event.rs +24 -15
  382. package/packages/gasoline/src/listen.rs +2 -14
  383. package/packages/gasoline/src/message.rs +1 -1
  384. package/packages/gasoline/src/metrics.rs +260 -143
  385. package/packages/gasoline/src/prelude.rs +1 -1
  386. package/packages/gasoline/src/registry.rs +6 -2
  387. package/packages/gasoline/src/signal.rs +34 -31
  388. package/packages/gasoline/src/utils/mod.rs +1 -18
  389. package/packages/gasoline/src/utils/topic.rs +35 -0
  390. package/packages/gasoline/src/worker.rs +71 -14
  391. package/packages/gasoline/src/workflow.rs +13 -0
  392. package/packages/gasoline/tests/workflows/eviction_test.rs +2 -2
  393. package/packages/gasoline-macros/src/lib.rs +74 -12
  394. package/packages/gasoline-runtime/Cargo.toml +18 -0
  395. package/packages/gasoline-runtime/src/lib.rs +12 -0
  396. package/packages/gasoline-runtime/src/workflows/mod.rs +1 -0
  397. package/packages/gasoline-runtime/src/workflows/pruner.rs +55 -0
  398. package/packages/guard/Cargo.toml +16 -8
  399. package/packages/guard/src/cache/mod.rs +63 -43
  400. package/packages/guard/src/cache/pegboard_gateway.rs +144 -0
  401. package/packages/guard/src/errors.rs +105 -0
  402. package/packages/guard/src/lib.rs +5 -15
  403. package/packages/guard/src/metrics.rs +12 -0
  404. package/packages/guard/src/routing/actor_path.rs +409 -0
  405. package/packages/guard/src/routing/api_public.rs +6 -14
  406. package/packages/guard/src/routing/envoy.rs +98 -0
  407. package/packages/guard/src/routing/mod.rs +152 -206
  408. package/packages/guard/src/routing/pegboard_gateway/mod.rs +572 -0
  409. package/packages/guard/src/routing/pegboard_gateway/resolve_actor_query.rs +236 -0
  410. package/packages/guard/src/routing/runner.rs +24 -54
  411. package/packages/guard/src/routing/ws_health.rs +61 -0
  412. package/packages/guard/src/shared_state.rs +11 -2
  413. package/packages/guard/tests/parse_actor_path.rs +418 -165
  414. package/packages/guard-core/Cargo.toml +3 -10
  415. package/packages/guard-core/src/custom_serve.rs +4 -10
  416. package/packages/guard-core/src/errors.rs +20 -4
  417. package/packages/guard-core/src/lib.rs +6 -4
  418. package/packages/guard-core/src/metrics.rs +66 -53
  419. package/packages/guard-core/src/proxy_service.rs +618 -1520
  420. package/packages/guard-core/src/request_context.rs +149 -169
  421. package/packages/guard-core/src/response_body.rs +65 -0
  422. package/packages/guard-core/src/route.rs +76 -0
  423. package/packages/guard-core/src/server.rs +60 -26
  424. package/packages/guard-core/src/task_group.rs +4 -0
  425. package/packages/guard-core/src/utils.rs +296 -0
  426. package/packages/guard-core/src/websocket_handle.rs +3 -3
  427. package/packages/guard-core/tests/common/mod.rs +0 -1
  428. package/packages/guard-core/tests/custom_serve.rs +4 -6
  429. package/packages/guard-core/tests/simple_websocket.rs +19 -19
  430. package/packages/guard-core/tests/streaming_response.rs +4 -9
  431. package/packages/metrics/Cargo.toml +3 -2
  432. package/packages/metrics/src/buckets.rs +5 -11
  433. package/packages/metrics/src/lib.rs +6 -3
  434. package/packages/metrics/src/providers.rs +2 -42
  435. package/packages/metrics/src/registry.rs +7 -0
  436. package/packages/metrics/src/server.rs +57 -0
  437. package/packages/namespace/Cargo.toml +0 -3
  438. package/packages/namespace/src/keys/metric.rs +301 -0
  439. package/packages/namespace/src/keys/mod.rs +1 -1
  440. package/packages/namespace/src/ops/get_global.rs +7 -4
  441. package/packages/namespace/src/ops/get_local.rs +32 -16
  442. package/packages/namespace/src/ops/mod.rs +0 -1
  443. package/packages/namespace/src/ops/resolve_for_name_global.rs +7 -4
  444. package/packages/namespace/src/ops/resolve_for_name_local.rs +39 -19
  445. package/packages/namespace/src/workflows/namespace.rs +3 -3
  446. package/packages/pegboard/Cargo.toml +22 -0
  447. package/packages/pegboard/src/actor_kv/entry.rs +47 -0
  448. package/packages/pegboard/src/actor_kv/metrics.rs +19 -0
  449. package/packages/pegboard/src/actor_kv/mod.rs +530 -0
  450. package/packages/pegboard/src/actor_kv/preload.rs +363 -0
  451. package/packages/{actor-kv/src → pegboard/src/actor_kv}/utils.rs +36 -35
  452. package/packages/pegboard/src/errors.rs +39 -5
  453. package/packages/pegboard/src/keys/actor.rs +285 -2
  454. package/packages/{actor-kv/src/entry.rs → pegboard/src/keys/actor_kv.rs} +73 -39
  455. package/packages/pegboard/src/keys/backfill.rs +49 -0
  456. package/packages/pegboard/src/keys/envoy.rs +1070 -0
  457. package/packages/pegboard/src/keys/epoxy/ns.rs +1 -1
  458. package/packages/pegboard/src/keys/mod.rs +4 -6
  459. package/packages/pegboard/src/keys/ns.rs +493 -14
  460. package/packages/pegboard/src/keys/runner.rs +281 -0
  461. package/packages/{namespace → pegboard}/src/keys/runner_config.rs +53 -0
  462. package/packages/pegboard/src/lib.rs +15 -2
  463. package/packages/pegboard/src/metrics.rs +57 -16
  464. package/packages/pegboard/src/ops/actor/create.rs +123 -53
  465. package/packages/pegboard/src/ops/actor/get.rs +14 -45
  466. package/packages/pegboard/src/ops/actor/get_for_gateway.rs +16 -0
  467. package/packages/pegboard/src/ops/actor/get_for_key.rs +3 -0
  468. package/packages/pegboard/src/ops/actor/get_for_kv.rs +43 -0
  469. package/packages/pegboard/src/ops/actor/get_for_runner.rs +99 -0
  470. package/packages/pegboard/src/ops/actor/get_reservation_for_key.rs +1 -0
  471. package/packages/pegboard/src/ops/actor/list_for_ns.rs +10 -38
  472. package/packages/pegboard/src/ops/actor/list_names.rs +3 -3
  473. package/packages/pegboard/src/ops/actor/mod.rs +3 -1
  474. package/packages/pegboard/src/ops/actor/util.rs +263 -0
  475. package/packages/pegboard/src/ops/envoy/drain.rs +101 -0
  476. package/packages/pegboard/src/ops/envoy/evict_actors.rs +54 -0
  477. package/packages/pegboard/src/ops/envoy/expire.rs +92 -0
  478. package/packages/pegboard/src/ops/envoy/get.rs +135 -0
  479. package/packages/pegboard/src/ops/envoy/list.rs +131 -0
  480. package/packages/pegboard/src/ops/envoy/mod.rs +6 -0
  481. package/packages/pegboard/src/ops/envoy/update_ping.rs +92 -0
  482. package/packages/pegboard/src/ops/mod.rs +3 -0
  483. package/packages/pegboard/src/ops/runner/drain.rs +110 -0
  484. package/packages/pegboard/src/ops/runner/list_names.rs +3 -3
  485. package/packages/pegboard/src/ops/runner/list_runner_config_enabled_dcs.rs +199 -0
  486. package/packages/pegboard/src/ops/runner/list_runner_config_epoxy_replica_ids.rs +51 -0
  487. package/packages/pegboard/src/ops/runner/mod.rs +3 -1
  488. package/packages/pegboard/src/ops/runner/update_alloc_idx.rs +17 -5
  489. package/packages/{namespace → pegboard}/src/ops/runner_config/delete.rs +18 -9
  490. package/packages/pegboard/src/ops/runner_config/ensure_normal_if_missing.rs +62 -0
  491. package/packages/{namespace → pegboard}/src/ops/runner_config/get.rs +15 -5
  492. package/packages/pegboard/src/ops/runner_config/get_error.rs +146 -0
  493. package/packages/{namespace → pegboard}/src/ops/runner_config/list.rs +13 -12
  494. package/packages/pegboard/src/ops/runner_config/mod.rs +7 -0
  495. package/packages/pegboard/src/ops/runner_config/refresh_metadata.rs +124 -0
  496. package/packages/pegboard/src/ops/runner_config/upsert.rs +206 -0
  497. package/packages/pegboard/src/ops/serverless_metadata/fetch.rs +223 -0
  498. package/packages/pegboard/src/ops/serverless_metadata/mod.rs +1 -0
  499. package/packages/pegboard/src/pubsub_subjects.rs +52 -0
  500. package/packages/pegboard/src/utils.rs +36 -2
  501. package/packages/pegboard/src/workflows/actor/destroy.rs +135 -99
  502. package/packages/pegboard/src/workflows/actor/keys.rs +59 -5
  503. package/packages/pegboard/src/workflows/actor/metrics.rs +345 -0
  504. package/packages/pegboard/src/workflows/actor/mod.rs +848 -204
  505. package/packages/pegboard/src/workflows/actor/runtime.rs +785 -212
  506. package/packages/pegboard/src/workflows/actor/setup.rs +61 -0
  507. package/packages/pegboard/src/workflows/actor2/keys.rs +337 -0
  508. package/packages/pegboard/src/workflows/actor2/metrics.rs +334 -0
  509. package/packages/pegboard/src/workflows/actor2/mod.rs +1251 -0
  510. package/packages/pegboard/src/workflows/actor2/runtime.rs +1005 -0
  511. package/packages/pegboard/src/workflows/actor_runner_name_selector_backfill.rs +266 -0
  512. package/packages/pegboard/src/workflows/metrics_aggregator.rs +282 -0
  513. package/packages/pegboard/src/workflows/mod.rs +8 -0
  514. package/packages/pegboard/src/workflows/runner.rs +62 -56
  515. package/packages/pegboard/src/workflows/runner2.rs +978 -0
  516. package/packages/pegboard/src/workflows/runner_pool.rs +298 -0
  517. package/packages/pegboard/src/workflows/runner_pool_error_tracker.rs +173 -0
  518. package/packages/pegboard/src/workflows/runner_pool_metadata_poller.rs +237 -0
  519. package/packages/pegboard/src/workflows/serverless/backfill.rs +120 -0
  520. package/packages/pegboard/src/workflows/serverless/conn.rs +702 -0
  521. package/packages/pegboard/src/workflows/serverless/mod.rs +3 -0
  522. package/packages/pegboard/src/workflows/serverless/receiver.rs +87 -0
  523. package/packages/pegboard/tests/actor_v1_pre_migration.rs +77 -0
  524. package/packages/{actor-kv/tests/list_edge_cases.rs → pegboard/tests/kv_list_edge_cases.rs} +74 -59
  525. package/packages/{actor-kv → pegboard}/tests/kv_operations.rs +77 -48
  526. package/packages/pegboard-envoy/Cargo.toml +43 -0
  527. package/packages/pegboard-envoy/src/actor_event_demuxer.rs +165 -0
  528. package/packages/pegboard-envoy/src/conn.rs +417 -0
  529. package/packages/pegboard-envoy/src/errors.rs +38 -0
  530. package/packages/pegboard-envoy/src/lib.rs +250 -0
  531. package/packages/pegboard-envoy/src/metrics.rs +44 -0
  532. package/packages/pegboard-envoy/src/ping_task.rs +61 -0
  533. package/packages/pegboard-envoy/src/tunnel_to_ws_task.rs +183 -0
  534. package/packages/pegboard-envoy/src/utils.rs +68 -0
  535. package/packages/pegboard-envoy/src/ws_to_tunnel_task.rs +536 -0
  536. package/packages/pegboard-envoy/tests/support/ws_to_tunnel_task.rs +82 -0
  537. package/packages/pegboard-gateway/Cargo.toml +2 -0
  538. package/packages/pegboard-gateway/src/keepalive_task.rs +1 -1
  539. package/packages/pegboard-gateway/src/lib.rs +506 -128
  540. package/packages/pegboard-gateway/src/metrics.rs +7 -11
  541. package/packages/pegboard-gateway/src/metrics_task.rs +80 -0
  542. package/packages/pegboard-gateway/src/ping_task.rs +9 -2
  543. package/packages/pegboard-gateway/src/shared_state.rs +110 -74
  544. package/packages/pegboard-gateway/src/tunnel_to_ws_task.rs +21 -7
  545. package/packages/pegboard-gateway/src/ws_to_tunnel_task.rs +12 -6
  546. package/packages/pegboard-gateway2/Cargo.toml +37 -0
  547. package/packages/pegboard-gateway2/src/keepalive_task.rs +61 -0
  548. package/packages/pegboard-gateway2/src/lib.rs +1044 -0
  549. package/packages/pegboard-gateway2/src/metrics.rs +10 -0
  550. package/packages/pegboard-gateway2/src/metrics_task.rs +80 -0
  551. package/packages/pegboard-gateway2/src/ping_task.rs +30 -0
  552. package/packages/pegboard-gateway2/src/shared_state.rs +601 -0
  553. package/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs +99 -0
  554. package/packages/pegboard-gateway2/src/ws_to_tunnel_task.rs +71 -0
  555. package/packages/{pegboard-serverless → pegboard-outbound}/Cargo.toml +9 -9
  556. package/packages/pegboard-outbound/src/lib.rs +487 -0
  557. package/packages/pegboard-outbound/src/metrics.rs +17 -0
  558. package/packages/pegboard-runner/Cargo.toml +11 -5
  559. package/packages/pegboard-runner/src/actor_event_demuxer.rs +163 -0
  560. package/packages/pegboard-runner/src/conn.rs +358 -122
  561. package/packages/pegboard-runner/src/errors.rs +5 -0
  562. package/packages/pegboard-runner/src/lib.rs +62 -36
  563. package/packages/pegboard-runner/src/metrics.rs +44 -0
  564. package/packages/pegboard-runner/src/ping_task.rs +60 -13
  565. package/packages/pegboard-runner/src/tunnel_to_ws_task.rs +249 -110
  566. package/packages/pegboard-runner/src/ws_to_tunnel_task.rs +738 -113
  567. package/packages/pegboard-runner/tests/support/ws_to_tunnel_task.rs +150 -0
  568. package/packages/pools/Cargo.toml +1 -2
  569. package/packages/pools/src/db/clickhouse.rs +7 -6
  570. package/packages/pools/src/db/udb.rs +16 -3
  571. package/packages/pools/src/db/ups.rs +27 -5
  572. package/packages/pools/src/error.rs +0 -3
  573. package/packages/pools/src/lib.rs +0 -2
  574. package/packages/pools/src/metrics.rs +33 -28
  575. package/packages/pools/src/pools.rs +15 -39
  576. package/packages/pools/src/prelude.rs +1 -1
  577. package/packages/postgres-util/Cargo.toml +13 -0
  578. package/packages/postgres-util/src/lib.rs +84 -0
  579. package/packages/runner-protocol/build.rs +157 -0
  580. package/packages/runner-protocol/src/lib.rs +16 -0
  581. package/packages/runner-protocol/src/util.rs +14 -0
  582. package/packages/runner-protocol/src/versioned.rs +4345 -0
  583. package/packages/runtime/src/lib.rs +46 -46
  584. package/packages/runtime/src/metrics.rs +39 -30
  585. package/packages/runtime/src/term_signal.rs +25 -12
  586. package/packages/runtime/src/traces.rs +5 -8
  587. package/packages/service-manager/src/lib.rs +66 -15
  588. package/packages/test-deps/src/datacenter.rs +22 -8
  589. package/packages/test-deps/src/lib.rs +47 -25
  590. package/packages/test-deps-docker/src/database.rs +45 -36
  591. package/packages/test-snapshot-gen/Cargo.toml +39 -0
  592. package/packages/test-snapshot-gen/snapshots/.gitkeep +0 -0
  593. package/packages/test-snapshot-gen/snapshots/epoxy-v1/metadata.json +3 -0
  594. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-1/000008.log +0 -0
  595. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-1/000009.sst +3 -0
  596. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-1/CURRENT +3 -0
  597. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-1/MANIFEST-000005 +3 -0
  598. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-1/OPTIONS-000007 +3 -0
  599. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-2/000008.log +0 -0
  600. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-2/000009.sst +3 -0
  601. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-2/CURRENT +3 -0
  602. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-2/MANIFEST-000005 +3 -0
  603. package/packages/test-snapshot-gen/snapshots/epoxy-v1/replica-2/OPTIONS-000007 +3 -0
  604. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/metadata.json +3 -0
  605. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-1/000008.log +0 -0
  606. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-1/000009.sst +3 -0
  607. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-1/CURRENT +3 -0
  608. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-1/MANIFEST-000005 +3 -0
  609. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-1/OPTIONS-000007 +3 -0
  610. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-2/000008.log +0 -0
  611. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-2/000009.sst +3 -0
  612. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-2/CURRENT +3 -0
  613. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-2/MANIFEST-000005 +3 -0
  614. package/packages/test-snapshot-gen/snapshots/pb-actor-v1-pre-migration/replica-2/OPTIONS-000007 +3 -0
  615. package/packages/test-snapshot-gen/src/lib.rs +328 -0
  616. package/packages/test-snapshot-gen/src/main.rs +145 -0
  617. package/packages/test-snapshot-gen/src/scenarios/epoxy_keys.rs +60 -0
  618. package/packages/test-snapshot-gen/src/scenarios/mod.rs +27 -0
  619. package/packages/test-snapshot-gen/src/scenarios/pb_actor_v1_pre_migration.rs +56 -0
  620. package/packages/test-snapshot-gen/src/test_cluster.rs +234 -0
  621. package/packages/tracing-reconfigure/src/lib.rs +1 -1
  622. package/packages/tracing-utils/src/lib.rs +12 -20
  623. package/packages/types/src/actor/error.rs +59 -0
  624. package/packages/types/src/actor/mod.rs +2 -0
  625. package/packages/types/src/actors.rs +5 -0
  626. package/packages/types/src/envoys.rs +21 -0
  627. package/packages/types/src/keys/backfill.rs +5 -0
  628. package/packages/types/src/keys/mod.rs +1 -0
  629. package/packages/types/src/lib.rs +2 -1
  630. package/packages/types/src/runner_configs.rs +43 -14
  631. package/packages/universaldb/Cargo.toml +4 -0
  632. package/packages/universaldb/src/database.rs +50 -5
  633. package/packages/universaldb/src/driver/mod.rs +12 -2
  634. package/packages/universaldb/src/driver/postgres/database.rs +88 -27
  635. package/packages/universaldb/src/driver/postgres/mod.rs +1 -1
  636. package/packages/universaldb/src/driver/postgres/transaction.rs +4 -7
  637. package/packages/universaldb/src/driver/postgres/transaction_task.rs +30 -52
  638. package/packages/universaldb/src/driver/rocksdb/database.rs +13 -7
  639. package/packages/universaldb/src/driver/rocksdb/transaction_conflict_tracker.rs +5 -5
  640. package/packages/universaldb/src/driver/rocksdb/transaction_task.rs +2 -1
  641. package/packages/universaldb/src/metrics.rs +39 -23
  642. package/packages/universaldb/src/prelude.rs +1 -1
  643. package/packages/universaldb/src/transaction.rs +9 -2
  644. package/packages/universaldb/src/utils/cherry_pick.rs +46 -46
  645. package/packages/universaldb/src/utils/keys.rs +21 -2
  646. package/packages/universaldb/src/utils/mod.rs +8 -0
  647. package/packages/universaldb/src/utils/subspace.rs +9 -4
  648. package/packages/universaldb/tests/integration.rs +5 -3
  649. package/packages/universaldb/tests/integration_gas.rs +5 -3
  650. package/packages/universaldb/tests/rocksdb.rs +152 -19
  651. package/packages/universalpubsub/Cargo.toml +8 -2
  652. package/packages/universalpubsub/benches/simple.rs +28 -8
  653. package/packages/universalpubsub/src/chunking.rs +27 -5
  654. package/packages/universalpubsub/src/driver/memory/mod.rs +131 -20
  655. package/packages/universalpubsub/src/driver/mod.rs +5 -0
  656. package/packages/universalpubsub/src/driver/nats/mod.rs +8 -0
  657. package/packages/universalpubsub/src/driver/postgres/mod.rs +505 -96
  658. package/packages/universalpubsub/src/lib.rs +3 -0
  659. package/packages/universalpubsub/src/metrics.rs +60 -0
  660. package/packages/universalpubsub/src/pubsub.rs +227 -87
  661. package/packages/universalpubsub/src/subject.rs +32 -0
  662. package/packages/universalpubsub/tests/chunking.rs +298 -0
  663. package/packages/universalpubsub/tests/integration.rs +148 -7
  664. package/packages/universalpubsub/tests/reconnect.rs +8 -6
  665. package/packages/util/Cargo.toml +1 -3
  666. package/packages/util/build.rs +6 -0
  667. package/packages/util/src/lib.rs +7 -2
  668. package/packages/util/src/metric.rs +1 -0
  669. package/packages/util/src/serde.rs +1 -516
  670. package/packages/{internal → util-serde}/Cargo.toml +4 -5
  671. package/packages/util-serde/src/lib.rs +517 -0
  672. package/packages/workflow-worker/Cargo.toml +4 -4
  673. package/packages/workflow-worker/src/lib.rs +3 -2
  674. package/sdks/go/api-full/client/client.go +17 -4
  675. package/sdks/go/api-full/metadata/client.go +50 -0
  676. package/sdks/go/api-full/namespaces/client.go +3 -0
  677. package/sdks/go/api-full/namespaces.go +6 -4
  678. package/sdks/go/api-full/runners/client.go +3 -0
  679. package/sdks/go/api-full/runners.go +8 -6
  680. package/sdks/go/api-full/types.go +107 -23
  681. package/sdks/rust/api-full/rust/.openapi-generator/FILES +6 -0
  682. package/sdks/rust/api-full/rust/Cargo.toml +1 -1
  683. package/sdks/rust/api-full/rust/README.md +5 -2
  684. package/sdks/rust/api-full/rust/docs/Actor.md +1 -0
  685. package/sdks/rust/api-full/rust/docs/ActorsDeleteApi.md +1 -1
  686. package/sdks/rust/api-full/rust/docs/ActorsKvGetApi.md +2 -1
  687. package/sdks/rust/api-full/rust/docs/ActorsListApi.md +3 -2
  688. package/sdks/rust/api-full/rust/docs/MetadataApi.md +34 -0
  689. package/sdks/rust/api-full/rust/docs/MetadataGetResponse.md +18 -0
  690. package/sdks/rust/api-full/rust/docs/NamespacesApi.md +3 -2
  691. package/sdks/rust/api-full/rust/docs/RunnerConfig.md +1 -0
  692. package/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf1Serverless.md +1 -0
  693. package/sdks/rust/api-full/rust/docs/RunnerConfigResponse.md +15 -0
  694. package/sdks/rust/api-full/rust/docs/RunnerConfigsListApi.md +3 -2
  695. package/sdks/rust/api-full/rust/docs/RunnerConfigsListResponseRunnerConfigsValue.md +1 -1
  696. package/sdks/rust/api-full/rust/docs/RunnersApi.md +3 -2
  697. package/sdks/rust/api-full/rust/src/apis/actors_create_api.rs +1 -1
  698. package/sdks/rust/api-full/rust/src/apis/actors_delete_api.rs +3 -5
  699. package/sdks/rust/api-full/rust/src/apis/actors_get_or_create_api.rs +1 -1
  700. package/sdks/rust/api-full/rust/src/apis/actors_kv_get_api.rs +4 -2
  701. package/sdks/rust/api-full/rust/src/apis/actors_list_api.rs +9 -2
  702. package/sdks/rust/api-full/rust/src/apis/actors_list_names_api.rs +1 -1
  703. package/sdks/rust/api-full/rust/src/apis/configuration.rs +2 -2
  704. package/sdks/rust/api-full/rust/src/apis/datacenters_api.rs +1 -1
  705. package/sdks/rust/api-full/rust/src/apis/health_api.rs +1 -1
  706. package/sdks/rust/api-full/rust/src/apis/metadata_api.rs +62 -0
  707. package/sdks/rust/api-full/rust/src/apis/mod.rs +1 -0
  708. package/sdks/rust/api-full/rust/src/apis/namespaces_api.rs +9 -2
  709. package/sdks/rust/api-full/rust/src/apis/runner_configs_delete_api.rs +1 -1
  710. package/sdks/rust/api-full/rust/src/apis/runner_configs_list_api.rs +9 -2
  711. package/sdks/rust/api-full/rust/src/apis/runner_configs_refresh_metadata_api.rs +1 -1
  712. package/sdks/rust/api-full/rust/src/apis/runner_configs_serverless_health_check_api.rs +1 -1
  713. package/sdks/rust/api-full/rust/src/apis/runner_configs_upsert_api.rs +1 -1
  714. package/sdks/rust/api-full/rust/src/apis/runners_api.rs +9 -2
  715. package/sdks/rust/api-full/rust/src/models/actor.rs +5 -1
  716. package/sdks/rust/api-full/rust/src/models/actor_name.rs +1 -1
  717. package/sdks/rust/api-full/rust/src/models/actors_create_request.rs +1 -1
  718. package/sdks/rust/api-full/rust/src/models/actors_create_response.rs +1 -1
  719. package/sdks/rust/api-full/rust/src/models/actors_get_or_create_request.rs +1 -1
  720. package/sdks/rust/api-full/rust/src/models/actors_get_or_create_response.rs +1 -1
  721. package/sdks/rust/api-full/rust/src/models/actors_kv_get_response.rs +1 -1
  722. package/sdks/rust/api-full/rust/src/models/actors_list_names_response.rs +1 -1
  723. package/sdks/rust/api-full/rust/src/models/actors_list_response.rs +1 -1
  724. package/sdks/rust/api-full/rust/src/models/crash_policy.rs +1 -1
  725. package/sdks/rust/api-full/rust/src/models/datacenter.rs +1 -1
  726. package/sdks/rust/api-full/rust/src/models/datacenter_health.rs +1 -1
  727. package/sdks/rust/api-full/rust/src/models/datacenters_list_response.rs +1 -1
  728. package/sdks/rust/api-full/rust/src/models/health_fanout_response.rs +1 -1
  729. package/sdks/rust/api-full/rust/src/models/health_response.rs +1 -1
  730. package/sdks/rust/api-full/rust/src/models/health_status.rs +1 -1
  731. package/sdks/rust/api-full/rust/src/models/metadata_get_response.rs +48 -0
  732. package/sdks/rust/api-full/rust/src/models/mod.rs +4 -0
  733. package/sdks/rust/api-full/rust/src/models/namespace.rs +1 -1
  734. package/sdks/rust/api-full/rust/src/models/namespace_list_response.rs +1 -1
  735. package/sdks/rust/api-full/rust/src/models/namespaces_create_request.rs +1 -1
  736. package/sdks/rust/api-full/rust/src/models/namespaces_create_response.rs +1 -1
  737. package/sdks/rust/api-full/rust/src/models/pagination.rs +1 -1
  738. package/sdks/rust/api-full/rust/src/models/runner.rs +1 -1
  739. package/sdks/rust/api-full/rust/src/models/runner_config.rs +4 -1
  740. package/sdks/rust/api-full/rust/src/models/runner_config_kind.rs +1 -1
  741. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of.rs +1 -1
  742. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1.rs +1 -1
  743. package/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1_serverless.rs +5 -1
  744. package/sdks/rust/api-full/rust/src/models/runner_config_response.rs +39 -0
  745. package/sdks/rust/api-full/rust/src/models/runner_config_variant.rs +1 -1
  746. package/sdks/rust/api-full/rust/src/models/runner_configs_list_response.rs +1 -1
  747. package/sdks/rust/api-full/rust/src/models/runner_configs_list_response_runner_configs_value.rs +3 -3
  748. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_request.rs +1 -1
  749. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response.rs +1 -1
  750. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of.rs +1 -1
  751. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_1.rs +1 -1
  752. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_1_failure.rs +1 -1
  753. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_health_check_response_one_of_success.rs +1 -1
  754. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error.rs +1 -1
  755. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of.rs +1 -1
  756. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_1.rs +1 -1
  757. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_2.rs +1 -1
  758. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_3.rs +1 -1
  759. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_3_non_success_status.rs +1 -1
  760. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_4.rs +1 -1
  761. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_4_invalid_response_json.rs +1 -1
  762. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_5.rs +1 -1
  763. package/sdks/rust/api-full/rust/src/models/runner_configs_serverless_metadata_error_one_of_5_invalid_response_schema.rs +1 -1
  764. package/sdks/rust/api-full/rust/src/models/runner_configs_upsert_request_body.rs +1 -1
  765. package/sdks/rust/api-full/rust/src/models/runner_configs_upsert_response.rs +1 -1
  766. package/sdks/rust/api-full/rust/src/models/runners_list_names_response.rs +1 -1
  767. package/sdks/rust/api-full/rust/src/models/runners_list_response.rs +1 -1
  768. package/sdks/rust/api-full/src/apis/actors_api.rs +8 -4
  769. package/sdks/rust/api-full/src/apis/ns_api.rs +8 -4
  770. package/sdks/rust/data/src/converted.rs +7 -4
  771. package/sdks/rust/data/src/lib.rs +2 -2
  772. package/sdks/rust/data/src/versioned/mod.rs +47 -4
  773. package/sdks/rust/data/src/versioned/namespace_runner_config.rs +256 -6
  774. package/sdks/rust/envoy-client/Cargo.toml +25 -0
  775. package/sdks/rust/envoy-client/src/actor.rs +992 -0
  776. package/sdks/rust/envoy-client/src/commands.rs +88 -0
  777. package/sdks/rust/envoy-client/src/config.rs +159 -0
  778. package/sdks/rust/envoy-client/src/connection.rs +288 -0
  779. package/sdks/rust/envoy-client/src/context.rs +24 -0
  780. package/sdks/rust/envoy-client/src/envoy.rs +432 -0
  781. package/sdks/rust/envoy-client/src/events.rs +62 -0
  782. package/sdks/rust/envoy-client/src/handle.rs +355 -0
  783. package/sdks/rust/envoy-client/src/kv.rs +132 -0
  784. package/sdks/rust/envoy-client/src/latency_channel.rs +27 -0
  785. package/sdks/rust/envoy-client/src/lib.rs +15 -0
  786. package/sdks/rust/envoy-client/src/stringify.rs +322 -0
  787. package/sdks/rust/envoy-client/src/tunnel.rs +265 -0
  788. package/sdks/rust/envoy-client/src/utils.rs +172 -0
  789. package/sdks/rust/envoy-protocol/Cargo.toml +22 -0
  790. package/sdks/rust/envoy-protocol/build.rs +200 -0
  791. package/sdks/rust/envoy-protocol/src/generated.rs +1 -0
  792. package/sdks/rust/envoy-protocol/src/lib.rs +8 -0
  793. package/sdks/rust/envoy-protocol/src/versioned.rs +208 -0
  794. package/sdks/rust/epoxy-protocol/Cargo.toml +0 -2
  795. package/sdks/rust/epoxy-protocol/build.rs +7 -0
  796. package/sdks/rust/epoxy-protocol/src/lib.rs +2 -5
  797. package/sdks/rust/epoxy-protocol/src/protocol.rs +128 -0
  798. package/sdks/rust/test-envoy/Cargo.toml +23 -0
  799. package/sdks/rust/test-envoy/Dockerfile +22 -0
  800. package/sdks/rust/test-envoy/src/behaviors.rs +141 -0
  801. package/sdks/rust/test-envoy/src/lib.rs +11 -0
  802. package/sdks/rust/test-envoy/src/main.rs +4 -0
  803. package/sdks/rust/test-envoy/src/server.rs +269 -0
  804. package/sdks/schemas/README.md +1 -2
  805. package/sdks/schemas/data/namespace.runner_config.v3.bare +24 -0
  806. package/sdks/schemas/data/namespace.runner_config.v4.bare +25 -0
  807. package/sdks/schemas/data/namespace.runner_config.v5.bare +26 -0
  808. package/sdks/schemas/data/pegboard.namespace.runner_alloc_idx.v2.bare +8 -0
  809. package/sdks/schemas/envoy-protocol/v1.bare +459 -0
  810. package/sdks/schemas/epoxy-protocol/v2.bare +220 -0
  811. package/sdks/schemas/runner-protocol/v4.bare +438 -0
  812. package/sdks/schemas/runner-protocol/v5.bare +430 -0
  813. package/sdks/schemas/runner-protocol/v6.bare +432 -0
  814. package/sdks/schemas/runner-protocol/v7.bare +438 -0
  815. package/sdks/typescript/api-full/.turbo/turbo-build.log +28 -27
  816. package/sdks/typescript/api-full/build.js +7 -1
  817. package/sdks/typescript/api-full/package.json +66 -57
  818. package/sdks/typescript/api-full/rivetkit-engine-api-full-25.5.3.tgz +0 -0
  819. package/sdks/typescript/api-full/src/Client.ts +41 -10
  820. package/sdks/typescript/api-full/src/api/client/requests/ActorsDeleteRequest.ts +4 -2
  821. package/sdks/typescript/api-full/src/api/client/requests/ActorsKvGetRequest.ts +13 -0
  822. package/sdks/typescript/api-full/src/api/client/requests/ActorsListRequest.ts +6 -0
  823. package/sdks/typescript/api-full/src/api/client/requests/RunnerConfigsListRequest.ts +4 -0
  824. package/sdks/typescript/api-full/src/api/client/requests/index.ts +1 -0
  825. package/sdks/typescript/api-full/src/api/resources/index.ts +1 -0
  826. package/sdks/typescript/api-full/src/api/resources/metadata/client/Client.ts +97 -0
  827. package/sdks/typescript/api-full/src/api/resources/metadata/client/index.ts +1 -0
  828. package/sdks/typescript/api-full/src/api/resources/metadata/index.ts +1 -0
  829. package/sdks/typescript/api-full/src/api/resources/namespaces/client/Client.ts +12 -2
  830. package/sdks/typescript/api-full/src/api/resources/namespaces/client/requests/NamespacesListRequest.ts +6 -0
  831. package/sdks/typescript/api-full/src/api/resources/runners/client/Client.ts +12 -2
  832. package/sdks/typescript/api-full/src/api/resources/runners/client/requests/RunnersListRequest.ts +6 -0
  833. package/sdks/typescript/api-full/src/api/types/Actor.ts +2 -0
  834. package/sdks/typescript/api-full/src/api/types/MetadataGetResponse.ts +14 -0
  835. package/sdks/typescript/api-full/src/api/types/RunnerConfig.ts +1 -0
  836. package/sdks/typescript/api-full/src/api/types/RunnerConfigKindServerlessServerless.ts +2 -0
  837. package/sdks/typescript/api-full/src/api/types/RunnerConfigResponse.ts +9 -0
  838. package/sdks/typescript/api-full/src/api/types/RunnerConfigServerless.ts +2 -0
  839. package/sdks/typescript/api-full/src/api/types/RunnerConfigsListResponseRunnerConfigsValue.ts +1 -1
  840. package/sdks/typescript/api-full/src/api/types/index.ts +2 -0
  841. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts +6 -4
  842. package/sdks/typescript/api-full/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts +4 -3
  843. package/sdks/typescript/api-full/src/serialization/types/Actor.ts +2 -0
  844. package/sdks/typescript/api-full/src/serialization/types/MetadataGetResponse.ts +34 -0
  845. package/sdks/typescript/api-full/src/serialization/types/RunnerConfig.ts +5 -0
  846. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigKindServerlessServerless.ts +2 -0
  847. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigResponse.ts +26 -0
  848. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigServerless.ts +2 -0
  849. package/sdks/typescript/api-full/src/serialization/types/RunnerConfigsListResponseRunnerConfigsValue.ts +3 -3
  850. package/sdks/typescript/api-full/src/serialization/types/index.ts +2 -0
  851. package/sdks/typescript/api-full/turbo.json +9 -0
  852. package/sdks/typescript/envoy-protocol/.turbo/turbo-build.log +23 -0
  853. package/sdks/typescript/{runner-protocol → envoy-protocol}/dist/index.cjs +466 -281
  854. package/sdks/typescript/envoy-protocol/dist/index.cjs.map +1 -0
  855. package/sdks/typescript/envoy-protocol/dist/index.d.cts +699 -0
  856. package/sdks/typescript/envoy-protocol/dist/index.d.ts +699 -0
  857. package/sdks/typescript/{runner-protocol → envoy-protocol}/dist/index.js +530 -345
  858. package/sdks/typescript/envoy-protocol/dist/index.js.map +1 -0
  859. package/sdks/typescript/{runner-protocol → envoy-protocol}/node_modules/.bin/tsc +4 -4
  860. package/{tests/load → sdks/typescript/envoy-protocol}/node_modules/.bin/tsserver +4 -4
  861. package/sdks/typescript/envoy-protocol/node_modules/.bin/tsup +21 -0
  862. package/sdks/typescript/envoy-protocol/node_modules/.bin/tsup-node +21 -0
  863. package/sdks/typescript/envoy-protocol/package.json +36 -0
  864. package/sdks/typescript/envoy-protocol/src/index.ts +2331 -0
  865. package/sdks/typescript/envoy-protocol/tsconfig.json +9 -0
  866. package/sdks/typescript/envoy-protocol/tsup.config.ts +4 -0
  867. package/sdks/typescript/runner/package.json +8 -2
  868. package/sdks/typescript/runner/src/actor.ts +38 -0
  869. package/sdks/typescript/runner/src/mod.ts +435 -229
  870. package/sdks/typescript/runner/src/stringify.ts +36 -33
  871. package/sdks/typescript/runner/src/tunnel.ts +52 -56
  872. package/sdks/typescript/runner/src/utils.ts +19 -0
  873. package/sdks/typescript/runner/src/websocket-tunnel-adapter.ts +98 -435
  874. package/sdks/typescript/runner-protocol/package.json +11 -9
  875. package/sdks/typescript/runner-protocol/src/index.ts +224 -156
  876. package/sdks/typescript/runner-protocol/tsconfig.json +1 -9
  877. package/sdks/typescript/test-runner/.turbo/turbo-build.log +5 -5
  878. package/sdks/typescript/test-runner/dist/index.js +53 -44
  879. package/sdks/typescript/test-runner/dist/index.js.map +1 -1
  880. package/sdks/typescript/test-runner/node_modules/.bin/pino +2 -2
  881. package/sdks/typescript/test-runner/node_modules/.bin/tsc +4 -4
  882. package/sdks/typescript/test-runner/node_modules/.bin/tsserver +4 -4
  883. package/sdks/typescript/test-runner/node_modules/.bin/tsup +4 -4
  884. package/sdks/typescript/test-runner/node_modules/.bin/tsup-node +4 -4
  885. package/sdks/typescript/test-runner/node_modules/.bin/tsx +4 -4
  886. package/sdks/typescript/test-runner/node_modules/.bin/vitest +4 -4
  887. package/sdks/typescript/test-runner/package.json +3 -3
  888. package/sdks/typescript/test-runner/src/index.ts +65 -42
  889. package/sdks/typescript/test-runner/src/log.ts +4 -18
  890. package/artifacts/errors/actor.no_runners_available.json +0 -5
  891. package/artifacts/errors/guard.actor_destroyed.json +0 -5
  892. package/artifacts/errors/guard.actor_not_found.json +0 -5
  893. package/contrib-docs/ACTOR_KEY_RESERVATION.md +0 -101
  894. package/contrib-docs/API.md +0 -11
  895. package/contrib-docs/DOCKER.md +0 -5
  896. package/contrib-docs/ERRORS.md +0 -13
  897. package/contrib-docs/GUARD.md +0 -76
  898. package/contrib-docs/PEGBOARD_TUNNEL_RETRIES.md +0 -83
  899. package/contrib-docs/RUNNER_LIFECYCLE.md +0 -172
  900. package/contrib-docs/SDKS.md +0 -9
  901. package/contrib-docs/TEST_DEPENDENCIES.md +0 -43
  902. package/contrib-docs/design-choicse/EMBEDDED_KV.md +0 -80
  903. package/contrib-docs/operate/TRACING_RECONFIGURE.md +0 -78
  904. package/docker/dev/otel-collector-client/config.yaml +0 -39
  905. package/docker/dev-host/otel-collector-client/config.yaml +0 -39
  906. package/docker/dev-multidc/datacenters/dc-a/otel-collector-client/config.yaml +0 -39
  907. package/docker/dev-multidc/datacenters/dc-b/otel-collector-client/config.yaml +0 -39
  908. package/docker/dev-multidc/datacenters/dc-c/otel-collector-client/config.yaml +0 -39
  909. package/docker/dev-multidc-multinode/datacenters/dc-a/otel-collector-client/config.yaml +0 -39
  910. package/docker/dev-multidc-multinode/datacenters/dc-b/otel-collector-client/config.yaml +0 -39
  911. package/docker/dev-multidc-multinode/datacenters/dc-c/otel-collector-client/config.yaml +0 -39
  912. package/docker/dev-multinode/otel-collector-client/config.yaml +0 -39
  913. package/docker/template/src/services/edge/otel-collector-client.ts +0 -64
  914. package/packages/actor-kv/Cargo.toml +0 -31
  915. package/packages/actor-kv/src/key.rs +0 -81
  916. package/packages/actor-kv/src/lib.rs +0 -357
  917. package/packages/cache/src/rate_limit.rs +0 -109
  918. package/packages/cache/tests/integration.rs +0 -582
  919. package/packages/clickhouse-inserter/Cargo.toml +0 -17
  920. package/packages/clickhouse-inserter/src/error.rs +0 -16
  921. package/packages/clickhouse-inserter/src/lib.rs +0 -179
  922. package/packages/clickhouse-user-query/Cargo.toml +0 -16
  923. package/packages/clickhouse-user-query/examples/case_sensitivity_demo.rs +0 -100
  924. package/packages/clickhouse-user-query/examples/group_by_example.rs +0 -53
  925. package/packages/clickhouse-user-query/examples/string_contains_demo.rs +0 -96
  926. package/packages/clickhouse-user-query/src/builder.rs +0 -445
  927. package/packages/clickhouse-user-query/src/error.rs +0 -37
  928. package/packages/clickhouse-user-query/src/lib.rs +0 -61
  929. package/packages/clickhouse-user-query/src/query.rs +0 -143
  930. package/packages/clickhouse-user-query/src/schema.rs +0 -78
  931. package/packages/clickhouse-user-query/tests/builder_tests.rs +0 -619
  932. package/packages/clickhouse-user-query/tests/case_sensitivity_tests.rs +0 -307
  933. package/packages/clickhouse-user-query/tests/integration_tests.rs +0 -540
  934. package/packages/clickhouse-user-query/tests/query_tests.rs +0 -263
  935. package/packages/clickhouse-user-query/tests/schema_tests.rs +0 -44
  936. package/packages/config/src/config/vector.rs +0 -18
  937. package/packages/engine/src/commands/udb_keys.rs +0 -200
  938. package/packages/engine/tests/actors_create.rs +0 -524
  939. package/packages/engine/tests/actors_delete.rs +0 -243
  940. package/packages/engine/tests/actors_general.rs +0 -191
  941. package/packages/engine/tests/actors_get.rs +0 -230
  942. package/packages/engine/tests/actors_get_by_id.rs +0 -170
  943. package/packages/engine/tests/actors_get_or_create.rs +0 -294
  944. package/packages/engine/tests/actors_get_or_create_by_id.rs +0 -147
  945. package/packages/engine/tests/actors_lifecycle.rs +0 -165
  946. package/packages/engine/tests/actors_list.rs +0 -798
  947. package/packages/engine/tests/actors_list_names.rs +0 -353
  948. package/packages/engine/tests/common/ns.rs +0 -36
  949. package/packages/engine/tests/common/runner.rs +0 -134
  950. package/packages/engine/tests/runners_dupe_key.rs +0 -27
  951. package/packages/engine/tests/runners_version.rs +0 -50
  952. package/packages/env/build.rs +0 -8
  953. package/packages/epoxy/spec/KEYS.md +0 -33
  954. package/packages/epoxy/spec/PROPOSAL.md +0 -125
  955. package/packages/epoxy/spec/RECONFIGURE.md +0 -40
  956. package/packages/epoxy/src/ops/explicit_prepare.rs +0 -342
  957. package/packages/epoxy/src/replica/decide_path.rs +0 -51
  958. package/packages/epoxy/src/replica/lead_consensus.rs +0 -65
  959. package/packages/epoxy/src/replica/log.rs +0 -84
  960. package/packages/epoxy/src/replica/messages/accepted.rs +0 -35
  961. package/packages/epoxy/src/replica/messages/committed.rs +0 -41
  962. package/packages/epoxy/src/replica/messages/download_instances.rs +0 -69
  963. package/packages/epoxy/src/replica/messages/pre_accept.rs +0 -69
  964. package/packages/epoxy/src/replica/utils.rs +0 -111
  965. package/packages/epoxy/src/workflows/purger.rs +0 -81
  966. package/packages/guard/src/cache/actor.rs +0 -43
  967. package/packages/guard/src/middleware.rs +0 -42
  968. package/packages/guard/src/routing/pegboard_gateway.rs +0 -260
  969. package/packages/guard-core/src/analytics.rs +0 -46
  970. package/packages/internal/README.md +0 -1
  971. package/packages/internal/src/lib.rs +0 -1
  972. package/packages/internal/src/ops/bump_serverless_autoscaler_global.rs +0 -64
  973. package/packages/internal/src/ops/cache/mod.rs +0 -1
  974. package/packages/internal/src/ops/cache/purge_global.rs +0 -81
  975. package/packages/internal/src/ops/mod.rs +0 -2
  976. package/packages/namespace/src/ops/runner_config/mod.rs +0 -4
  977. package/packages/namespace/src/ops/runner_config/upsert.rs +0 -148
  978. package/packages/pegboard/src/ops/actor/get_runner.rs +0 -64
  979. package/packages/pegboard/src/ops/runner/find_dc_with_runner.rs +0 -222
  980. package/packages/pegboard-serverless/src/lib.rs +0 -523
  981. package/packages/types/src/msgs/mod.rs +0 -1
  982. package/packages/types/src/msgs/pegboard.rs +0 -5
  983. package/sdks/rust/epoxy-protocol/src/versioned.rs +0 -206
  984. package/sdks/rust/runner-protocol/build.rs +0 -115
  985. package/sdks/rust/runner-protocol/src/lib.rs +0 -10
  986. package/sdks/rust/runner-protocol/src/versioned.rs +0 -1734
  987. package/sdks/schemas/epoxy-protocol/v1.bare +0 -260
  988. package/sdks/typescript/runner/.turbo/turbo-build.log +0 -22
  989. package/sdks/typescript/runner/dist/mod.cjs +0 -2951
  990. package/sdks/typescript/runner/dist/mod.cjs.map +0 -1
  991. package/sdks/typescript/runner/dist/mod.d.cts +0 -326
  992. package/sdks/typescript/runner/dist/mod.d.ts +0 -326
  993. package/sdks/typescript/runner/dist/mod.js +0 -2951
  994. package/sdks/typescript/runner/dist/mod.js.map +0 -1
  995. package/sdks/typescript/runner/node_modules/.bin/pino +0 -21
  996. package/sdks/typescript/runner/node_modules/.bin/tsc +0 -21
  997. package/sdks/typescript/runner/node_modules/.bin/tsserver +0 -21
  998. package/sdks/typescript/runner/node_modules/.bin/tsup +0 -21
  999. package/sdks/typescript/runner/node_modules/.bin/tsup-node +0 -21
  1000. package/sdks/typescript/runner/node_modules/.bin/tsx +0 -21
  1001. package/sdks/typescript/runner/node_modules/.bin/uuid +0 -21
  1002. package/sdks/typescript/runner/node_modules/.bin/vitest +0 -21
  1003. package/sdks/typescript/runner-protocol/.turbo/turbo-build.log +0 -22
  1004. package/sdks/typescript/runner-protocol/dist/index.cjs.map +0 -1
  1005. package/sdks/typescript/runner-protocol/dist/index.d.cts +0 -666
  1006. package/sdks/typescript/runner-protocol/dist/index.d.ts +0 -666
  1007. package/sdks/typescript/runner-protocol/dist/index.js.map +0 -1
  1008. package/sdks/typescript/runner-protocol/node_modules/.bin/tsserver +0 -21
  1009. package/sdks/typescript/runner-protocol/node_modules/.bin/tsup +0 -21
  1010. package/sdks/typescript/runner-protocol/node_modules/.bin/tsup-node +0 -21
  1011. package/sdks/typescript/test-runner/Dockerfile +0 -26
  1012. package/tests/load/README.md +0 -28
  1013. package/tests/load/actor-lifecycle/README.md +0 -26
  1014. package/tests/load/actor-lifecycle/actor.ts +0 -41
  1015. package/tests/load/actor-lifecycle/config.ts +0 -14
  1016. package/tests/load/actor-lifecycle/index.ts +0 -62
  1017. package/tests/load/actor-lifecycle/rivet_api.ts +0 -140
  1018. package/tests/load/actor-lifecycle/types.ts +0 -17
  1019. package/tests/load/node_modules/.bin/biome +0 -21
  1020. package/tests/load/node_modules/.bin/tsc +0 -21
  1021. package/tests/load/package.json +0 -15
  1022. package/tests/load/tsconfig.json +0 -20
  1023. package/tests/smoke/README.md +0 -32
  1024. package/tests/smoke/package.json +0 -19
  1025. package/tests/smoke/scripts/connect.ts +0 -41
  1026. package/tests/smoke/src/server/registry.ts +0 -32
  1027. package/tests/smoke/src/server/server.ts +0 -7
  1028. package/tests/smoke/src/smoke-test/index.ts +0 -161
  1029. package/tests/smoke/src/smoke-test/spawn-actor.ts +0 -109
  1030. package/tests/smoke/tsconfig.json +0 -43
  1031. /package/packages/{dump-openapi → api-public-openapi-gen}/build.rs +0 -0
  1032. /package/packages/{dump-openapi → api-public-openapi-gen}/src/lib.rs +0 -0
  1033. /package/{sdks/rust → packages}/runner-protocol/Cargo.toml +0 -0
  1034. /package/{sdks/rust → packages}/runner-protocol/src/compat.rs +0 -0
  1035. /package/{sdks/rust → packages}/runner-protocol/src/generated.rs +0 -0
  1036. /package/{sdks/rust → packages}/runner-protocol/src/uuid_compat.rs +0 -0
  1037. /package/sdks/rust/{runner-protocol → envoy-protocol}/src/util.rs +0 -0
  1038. /package/{tests/smoke → sdks/typescript/envoy-protocol}/turbo.json +0 -0
@@ -4,38 +4,39 @@ use bytes::Bytes;
4
4
  use futures_util::TryStreamExt;
5
5
  use gas::prelude::*;
6
6
  use http_body_util::{BodyExt, Full};
7
- use hyper::{Request, Response, StatusCode};
7
+ use hyper::{Request, Response, StatusCode, body::Body};
8
8
  use rivet_error::*;
9
9
  use rivet_guard_core::{
10
- WebSocketHandle,
10
+ ResponseBody, WebSocketHandle,
11
11
  custom_serve::{CustomServeTrait, HibernationResult},
12
12
  errors::{ServiceUnavailable, WebSocketServiceUnavailable},
13
- proxy_service::{ResponseBody, is_ws_hibernate},
14
- request_context::RequestContext,
13
+ request_context::{CorsConfig, RequestContext},
14
+ utils::is_ws_hibernate,
15
15
  websocket_handle::WebSocketReceiver,
16
16
  };
17
- use rivet_runner_protocol as protocol;
17
+ use rivet_runner_protocol::{self as protocol, PROTOCOL_MK1_VERSION};
18
18
  use rivet_util::serde::HashableMap;
19
- use std::{sync::Arc, time::Duration};
19
+ use std::{
20
+ sync::{Arc, atomic::AtomicU64},
21
+ time::Duration,
22
+ };
20
23
  use tokio::sync::{Mutex, watch};
21
24
  use tokio_tungstenite::tungstenite::{
22
25
  Message,
23
26
  protocol::frame::{CloseFrame, coding::CloseCode},
24
27
  };
28
+ use universaldb::utils::IsolationLevel::*;
25
29
 
26
30
  use crate::shared_state::{InFlightRequestHandle, SharedState};
27
31
 
28
32
  mod keepalive_task;
29
33
  mod metrics;
34
+ mod metrics_task;
30
35
  mod ping_task;
31
36
  pub mod shared_state;
32
37
  mod tunnel_to_ws_task;
33
38
  mod ws_to_tunnel_task;
34
39
 
35
- const WEBSOCKET_OPEN_TIMEOUT: Duration = Duration::from_secs(15);
36
- const RESPONSE_START_TIMEOUT: Duration = Duration::from_secs(15);
37
- const UPDATE_PING_INTERVAL: Duration = Duration::from_secs(3);
38
-
39
40
  #[derive(RivetError, Serialize, Deserialize)]
40
41
  #[error(
41
42
  "guard",
@@ -44,9 +45,11 @@ const UPDATE_PING_INTERVAL: Duration = Duration::from_secs(3);
44
45
  )]
45
46
  pub struct WebsocketPendingLimitReached;
46
47
 
48
+ const UPDATE_METRICS_INTERVAL: Duration = Duration::from_secs(15);
49
+
47
50
  #[derive(Debug)]
48
51
  enum LifecycleResult {
49
- ServerClose(protocol::ToServerWebSocketClose),
52
+ ServerClose(protocol::mk2::ToServerWebSocketClose),
50
53
  ClientClose(Option<CloseFrame>),
51
54
  Aborted,
52
55
  }
@@ -78,17 +81,16 @@ impl PegboardGateway {
78
81
  }
79
82
  }
80
83
 
81
- #[async_trait]
82
- impl CustomServeTrait for PegboardGateway {
83
- #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id, runner_id=?self.runner_id))]
84
- async fn handle_request(
84
+ impl PegboardGateway {
85
+ async fn handle_request_inner(
85
86
  &self,
87
+ ctx: &StandaloneCtx,
86
88
  req: Request<Full<Bytes>>,
87
- _request_context: &mut RequestContext,
88
- request_id: protocol::RequestId,
89
+ req_ctx: &mut RequestContext,
89
90
  ) -> Result<Response<ResponseBody>> {
90
91
  // Use the actor ID from the gateway instance
91
92
  let actor_id = self.actor_id.to_string();
93
+ let request_id = req_ctx.in_flight_request_id()?;
92
94
 
93
95
  // Extract origin for CORS (before consuming request)
94
96
  // When credentials: true, we must echo back the actual origin, not "*"
@@ -100,19 +102,20 @@ impl CustomServeTrait for PegboardGateway {
100
102
  .to_string();
101
103
 
102
104
  // Extract request parts
103
- let mut headers = HashableMap::new();
104
- for (name, value) in req.headers() {
105
- if let Result::Ok(value_str) = value.to_str() {
106
- headers.insert(name.to_string(), value_str.to_string());
107
- }
108
- }
109
-
110
- // Extract method and path before consuming the request
111
- let method = req.method().to_string();
105
+ let headers = req
106
+ .headers()
107
+ .iter()
108
+ .filter_map(|(name, value)| {
109
+ value
110
+ .to_str()
111
+ .ok()
112
+ .map(|value_str| (name.to_string(), value_str.to_string()))
113
+ })
114
+ .collect::<HashableMap<_, _>>();
112
115
 
113
116
  // Handle CORS preflight OPTIONS requests at gateway level
114
117
  //
115
- // We need to do this in Guard because there is no way of sending an OPTIONS request to the
118
+ // We need to do this in the gateway because there is no way of sending an OPTIONS request to the
116
119
  // actor since we don't have the `x-rivet-token` header. This implementation allows
117
120
  // requests from anywhere and lets the actor handle CORS manually in `onBeforeConnect`.
118
121
  // This had the added benefit of also applying to WebSockets.
@@ -126,26 +129,32 @@ impl CustomServeTrait for PegboardGateway {
126
129
  .and_then(|v| v.to_str().ok())
127
130
  .unwrap_or("*");
128
131
 
129
- let mut response = Response::builder()
130
- .status(StatusCode::NO_CONTENT)
131
- .header("access-control-allow-origin", &origin)
132
- .header("access-control-allow-credentials", "true")
133
- .header(
134
- "access-control-allow-methods",
135
- "GET, POST, PUT, DELETE, OPTIONS, PATCH",
136
- )
137
- .header("access-control-allow-headers", requested_headers)
138
- .header("access-control-expose-headers", "*")
139
- .header("access-control-max-age", "86400");
140
-
141
- // Add Vary header to prevent cache poisoning when echoing origin
142
- if origin != "*" {
143
- response = response.header("vary", "Origin");
144
- }
132
+ req_ctx.set_cors(CorsConfig {
133
+ allow_origin: origin.clone(),
134
+ allow_credentials: true,
135
+ expose_headers: "*".to_string(),
136
+ allow_methods: Some("GET, POST, PUT, DELETE, OPTIONS, PATCH".to_string()),
137
+ allow_headers: Some(requested_headers.to_string()),
138
+ max_age: Some(86400),
139
+ });
145
140
 
146
- return Ok(response.body(ResponseBody::Full(Full::new(Bytes::new())))?);
141
+ return Ok(Response::builder()
142
+ .status(StatusCode::NO_CONTENT)
143
+ .body(ResponseBody::Full(Full::new(Bytes::new())))?);
147
144
  }
148
145
 
146
+ // Set CORS headers through guard
147
+ req_ctx.set_cors(CorsConfig {
148
+ allow_origin: origin.clone(),
149
+ allow_credentials: true,
150
+ expose_headers: "*".to_string(),
151
+ // Not an options req, not required
152
+ allow_methods: None,
153
+ allow_headers: None,
154
+ max_age: None,
155
+ });
156
+
157
+ // NOTE: Size constraints have already been applied by guard
149
158
  let body_bytes = req
150
159
  .into_body()
151
160
  .collect()
@@ -153,10 +162,10 @@ impl CustomServeTrait for PegboardGateway {
153
162
  .context("failed to read body")?
154
163
  .to_bytes();
155
164
 
156
- let mut stopped_sub = self
157
- .ctx
158
- .subscribe::<pegboard::workflows::actor::Stopped>(("actor_id", self.actor_id))
159
- .await?;
165
+ let (mut stopped_sub, runner_protocol_version) = tokio::try_join!(
166
+ ctx.subscribe::<pegboard::workflows::actor::Stopped>(("actor_id", self.actor_id)),
167
+ get_runner_protocol_version(&ctx, self.runner_id),
168
+ )?;
160
169
 
161
170
  // Build subject to publish to
162
171
  let tunnel_subject =
@@ -169,14 +178,14 @@ impl CustomServeTrait for PegboardGateway {
169
178
  ..
170
179
  } = self
171
180
  .shared_state
172
- .start_in_flight_request(tunnel_subject, request_id)
181
+ .start_in_flight_request(tunnel_subject, runner_protocol_version, request_id)
173
182
  .await;
174
183
 
175
184
  // Start request
176
- let message = protocol::ToClientTunnelMessageKind::ToClientRequestStart(
177
- protocol::ToClientRequestStart {
185
+ let message = protocol::mk2::ToClientTunnelMessageKind::ToClientRequestStart(
186
+ protocol::mk2::ToClientRequestStart {
178
187
  actor_id: actor_id.clone(),
179
- method,
188
+ method: req_ctx.method().to_string(),
180
189
  path: self.path.clone(),
181
190
  headers,
182
191
  body: if body_bytes.is_empty() {
@@ -197,12 +206,12 @@ impl CustomServeTrait for PegboardGateway {
197
206
  res = msg_rx.recv() => {
198
207
  if let Some(msg) = res {
199
208
  match msg {
200
- protocol::ToServerTunnelMessageKind::ToServerResponseStart(
209
+ protocol::mk2::ToServerTunnelMessageKind::ToServerResponseStart(
201
210
  response_start,
202
211
  ) => {
203
212
  return anyhow::Ok(response_start);
204
213
  }
205
- protocol::ToServerTunnelMessageKind::ToServerResponseAbort => {
214
+ protocol::mk2::ToServerTunnelMessageKind::ToServerResponseAbort => {
206
215
  tracing::warn!("request aborted");
207
216
  return Err(ServiceUnavailable.build());
208
217
  }
@@ -223,7 +232,7 @@ impl CustomServeTrait for PegboardGateway {
223
232
  return Err(ServiceUnavailable.build());
224
233
  }
225
234
  _ = drop_rx.changed() => {
226
- tracing::warn!("tunnel message timeout");
235
+ tracing::warn!(reason=?drop_rx.borrow(), "tunnel message timeout");
227
236
  return Err(ServiceUnavailable.build());
228
237
  }
229
238
  }
@@ -231,7 +240,13 @@ impl CustomServeTrait for PegboardGateway {
231
240
 
232
241
  Err(ServiceUnavailable.build())
233
242
  };
234
- let response_start = tokio::time::timeout(RESPONSE_START_TIMEOUT, fut)
243
+ let response_start_timeout = Duration::from_millis(
244
+ self.ctx
245
+ .config()
246
+ .pegboard()
247
+ .gateway_response_start_timeout_ms(),
248
+ );
249
+ let response_start = tokio::time::timeout(response_start_timeout, fut)
235
250
  .await
236
251
  .map_err(|_| {
237
252
  tracing::warn!("timed out waiting for response start from runner");
@@ -249,17 +264,6 @@ impl CustomServeTrait for PegboardGateway {
249
264
  response_builder = response_builder.header(key, value);
250
265
  }
251
266
 
252
- // Add CORS headers to actual request
253
- response_builder = response_builder
254
- .header("access-control-allow-origin", &origin)
255
- .header("access-control-allow-credentials", "true")
256
- .header("access-control-expose-headers", "*");
257
-
258
- // Add Vary header to prevent cache poisoning when echoing origin
259
- if origin != "*" {
260
- response_builder = response_builder.header("vary", "Origin");
261
- }
262
-
263
267
  // Add body
264
268
  let body = response_start.body.unwrap_or_default();
265
269
  let response = response_builder.body(ResponseBody::Full(Full::new(Bytes::from(body))))?;
@@ -267,31 +271,27 @@ impl CustomServeTrait for PegboardGateway {
267
271
  Ok(response)
268
272
  }
269
273
 
270
- #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id, runner_id=?self.runner_id, request_id=%protocol::util::id_to_string(&request_id)))]
271
- async fn handle_websocket(
274
+ async fn handle_websocket_inner(
272
275
  &self,
276
+ ctx: &StandaloneCtx,
277
+ req_ctx: &mut RequestContext,
273
278
  client_ws: WebSocketHandle,
274
- headers: &hyper::HeaderMap,
275
- _path: &str,
276
- _request_context: &mut RequestContext,
277
- request_id: protocol::RequestId,
278
279
  after_hibernation: bool,
279
280
  ) -> Result<Option<CloseFrame>> {
280
- // Use the actor ID from the gateway instance
281
- let actor_id = self.actor_id.to_string();
281
+ let request_id = req_ctx.in_flight_request_id()?;
282
282
 
283
283
  // Extract headers
284
284
  let mut request_headers = HashableMap::new();
285
- for (name, value) in headers {
285
+ for (name, value) in req_ctx.headers() {
286
286
  if let Result::Ok(value_str) = value.to_str() {
287
287
  request_headers.insert(name.to_string(), value_str.to_string());
288
288
  }
289
289
  }
290
290
 
291
- let mut stopped_sub = self
292
- .ctx
293
- .subscribe::<pegboard::workflows::actor::Stopped>(("actor_id", self.actor_id))
294
- .await?;
291
+ let (mut stopped_sub, runner_protocol_version) = tokio::try_join!(
292
+ ctx.subscribe::<pegboard::workflows::actor::Stopped>(("actor_id", self.actor_id)),
293
+ get_runner_protocol_version(&ctx, self.runner_id),
294
+ )?;
295
295
 
296
296
  // Build subject to publish to
297
297
  let tunnel_subject =
@@ -304,7 +304,7 @@ impl CustomServeTrait for PegboardGateway {
304
304
  new,
305
305
  } = self
306
306
  .shared_state
307
- .start_in_flight_request(tunnel_subject.clone(), request_id)
307
+ .start_in_flight_request(tunnel_subject.clone(), runner_protocol_version, request_id)
308
308
  .await;
309
309
 
310
310
  ensure!(
@@ -317,9 +317,9 @@ impl CustomServeTrait for PegboardGateway {
317
317
  true
318
318
  } else {
319
319
  // Send WebSocket open message
320
- let open_message = protocol::ToClientTunnelMessageKind::ToClientWebSocketOpen(
321
- protocol::ToClientWebSocketOpen {
322
- actor_id: actor_id.clone(),
320
+ let open_message = protocol::mk2::ToClientTunnelMessageKind::ToClientWebSocketOpen(
321
+ protocol::mk2::ToClientWebSocketOpen {
322
+ actor_id: self.actor_id.to_string(),
323
323
  path: self.path.clone(),
324
324
  headers: request_headers,
325
325
  },
@@ -338,10 +338,10 @@ impl CustomServeTrait for PegboardGateway {
338
338
  res = msg_rx.recv() => {
339
339
  if let Some(msg) = res {
340
340
  match msg {
341
- protocol::ToServerTunnelMessageKind::ToServerWebSocketOpen(msg) => {
341
+ protocol::mk2::ToServerTunnelMessageKind::ToServerWebSocketOpen(msg) => {
342
342
  return anyhow::Ok(msg);
343
343
  }
344
- protocol::ToServerTunnelMessageKind::ToServerWebSocketClose(close) => {
344
+ protocol::mk2::ToServerTunnelMessageKind::ToServerWebSocketClose(close) => {
345
345
  tracing::warn!(?close, "websocket closed before opening");
346
346
  return Err(WebSocketServiceUnavailable.build());
347
347
  }
@@ -364,7 +364,7 @@ impl CustomServeTrait for PegboardGateway {
364
364
  return Err(WebSocketServiceUnavailable.build());
365
365
  }
366
366
  _ = drop_rx.changed() => {
367
- tracing::warn!("websocket open timeout");
367
+ tracing::warn!(reason=?drop_rx.borrow(), "websocket open timeout");
368
368
  return Err(WebSocketServiceUnavailable.build());
369
369
  }
370
370
  }
@@ -373,7 +373,13 @@ impl CustomServeTrait for PegboardGateway {
373
373
  Err(WebSocketServiceUnavailable.build())
374
374
  };
375
375
 
376
- let open_msg = tokio::time::timeout(WEBSOCKET_OPEN_TIMEOUT, fut)
376
+ let websocket_open_timeout = Duration::from_millis(
377
+ self.ctx
378
+ .config()
379
+ .pegboard()
380
+ .gateway_websocket_open_timeout_ms(),
381
+ );
382
+ let open_msg = tokio::time::timeout(websocket_open_timeout, fut)
377
383
  .await
378
384
  .map_err(|_| {
379
385
  tracing::warn!("timed out waiting for websocket open from runner");
@@ -388,6 +394,9 @@ impl CustomServeTrait for PegboardGateway {
388
394
  open_msg.can_hibernate
389
395
  };
390
396
 
397
+ let ingress_bytes = Arc::new(AtomicU64::new(0));
398
+ let egress_bytes = Arc::new(AtomicU64::new(0));
399
+
391
400
  // Send pending messages
392
401
  self.shared_state
393
402
  .resend_pending_websocket_messages(request_id)
@@ -399,6 +408,7 @@ impl CustomServeTrait for PegboardGateway {
399
408
  let (ws_to_tunnel_abort_tx, ws_to_tunnel_abort_rx) = watch::channel(());
400
409
  let (ping_abort_tx, ping_abort_rx) = watch::channel(());
401
410
  let (keepalive_abort_tx, keepalive_abort_rx) = watch::channel(());
411
+ let (metrics_abort_tx, metrics_abort_rx) = watch::channel(());
402
412
 
403
413
  let tunnel_to_ws = tokio::spawn(tunnel_to_ws_task::task(
404
414
  self.shared_state.clone(),
@@ -408,23 +418,40 @@ impl CustomServeTrait for PegboardGateway {
408
418
  msg_rx,
409
419
  drop_rx,
410
420
  can_hibernate,
421
+ egress_bytes.clone(),
411
422
  tunnel_to_ws_abort_rx,
412
423
  ));
413
424
  let ws_to_tunnel = tokio::spawn(ws_to_tunnel_task::task(
414
425
  self.shared_state.clone(),
415
426
  request_id,
416
427
  ws_rx,
428
+ ingress_bytes.clone(),
417
429
  ws_to_tunnel_abort_rx,
418
430
  ));
431
+ let update_ping_interval = Duration::from_millis(
432
+ self.ctx
433
+ .config()
434
+ .pegboard()
435
+ .gateway_update_ping_interval_ms(),
436
+ );
419
437
  let ping = tokio::spawn(ping_task::task(
420
438
  self.shared_state.clone(),
421
439
  request_id,
422
440
  ping_abort_rx,
441
+ update_ping_interval,
442
+ ));
443
+ let metrics = tokio::spawn(metrics_task::task(
444
+ ctx.clone(),
445
+ self.actor_id,
446
+ self.runner_id,
447
+ ingress_bytes,
448
+ egress_bytes,
449
+ metrics_abort_rx,
423
450
  ));
424
451
  let keepalive = if can_hibernate {
425
452
  Some(tokio::spawn(keepalive_task::task(
426
453
  self.shared_state.clone(),
427
- self.ctx.clone(),
454
+ ctx.clone(),
428
455
  self.actor_id,
429
456
  self.shared_state.gateway_id(),
430
457
  request_id,
@@ -434,12 +461,8 @@ impl CustomServeTrait for PegboardGateway {
434
461
  None
435
462
  };
436
463
 
437
- let tunnel_to_ws_abort_tx2 = tunnel_to_ws_abort_tx.clone();
438
- let ws_to_tunnel_abort_tx2 = ws_to_tunnel_abort_tx.clone();
439
- let ping_abort_tx2 = ping_abort_tx.clone();
440
-
441
464
  // Wait for all tasks to complete
442
- let (tunnel_to_ws_res, ws_to_tunnel_res, ping_res, keepalive_res) = tokio::join!(
465
+ let (tunnel_to_ws_res, ws_to_tunnel_res, ping_res, keepalive_res, metrics_res) = tokio::join!(
443
466
  async {
444
467
  let res = tunnel_to_ws.await?;
445
468
 
@@ -450,6 +473,7 @@ impl CustomServeTrait for PegboardGateway {
450
473
  let _ = ping_abort_tx.send(());
451
474
  let _ = ws_to_tunnel_abort_tx.send(());
452
475
  let _ = keepalive_abort_tx.send(());
476
+ let _ = metrics_abort_tx.send(());
453
477
  } else {
454
478
  tracing::debug!(?res, "tunnel to ws task completed");
455
479
  }
@@ -463,9 +487,10 @@ impl CustomServeTrait for PegboardGateway {
463
487
  if !matches!(res, Ok(LifecycleResult::Aborted)) {
464
488
  tracing::debug!(?res, "ws to tunnel task completed, aborting counterpart");
465
489
 
466
- let _ = ping_abort_tx2.send(());
490
+ let _ = ping_abort_tx.send(());
467
491
  let _ = tunnel_to_ws_abort_tx.send(());
468
492
  let _ = keepalive_abort_tx.send(());
493
+ let _ = metrics_abort_tx.send(());
469
494
  } else {
470
495
  tracing::debug!(?res, "ws to tunnel task completed");
471
496
  }
@@ -479,9 +504,10 @@ impl CustomServeTrait for PegboardGateway {
479
504
  if !matches!(res, Ok(LifecycleResult::Aborted)) {
480
505
  tracing::debug!(?res, "ping task completed, aborting others");
481
506
 
482
- let _ = ws_to_tunnel_abort_tx2.send(());
483
- let _ = tunnel_to_ws_abort_tx2.send(());
507
+ let _ = ws_to_tunnel_abort_tx.send(());
508
+ let _ = tunnel_to_ws_abort_tx.send(());
484
509
  let _ = keepalive_abort_tx.send(());
510
+ let _ = metrics_abort_tx.send(());
485
511
  } else {
486
512
  tracing::debug!(?res, "ping task completed");
487
513
  }
@@ -499,30 +525,54 @@ impl CustomServeTrait for PegboardGateway {
499
525
  if !matches!(res, Ok(LifecycleResult::Aborted)) {
500
526
  tracing::debug!(?res, "keepalive task completed, aborting others");
501
527
 
502
- let _ = ws_to_tunnel_abort_tx2.send(());
503
- let _ = tunnel_to_ws_abort_tx2.send(());
504
- let _ = ping_abort_tx2.send(());
528
+ let _ = ws_to_tunnel_abort_tx.send(());
529
+ let _ = tunnel_to_ws_abort_tx.send(());
530
+ let _ = ping_abort_tx.send(());
531
+ let _ = metrics_abort_tx.send(());
505
532
  } else {
506
533
  tracing::debug!(?res, "keepalive task completed");
507
534
  }
508
535
 
536
+ res
537
+ },
538
+ async {
539
+ let res = metrics.await?;
540
+
541
+ // Abort others if not aborted
542
+ if !matches!(res, Ok(LifecycleResult::Aborted)) {
543
+ tracing::debug!(?res, "metrics task completed, aborting others");
544
+
545
+ let _ = ws_to_tunnel_abort_tx.send(());
546
+ let _ = tunnel_to_ws_abort_tx.send(());
547
+ let _ = ping_abort_tx.send(());
548
+ let _ = keepalive_abort_tx.send(());
549
+ } else {
550
+ tracing::debug!(?res, "metrics task completed");
551
+ }
552
+
509
553
  res
510
554
  },
511
555
  );
512
556
 
513
557
  // Determine single result from all tasks
514
- let mut lifecycle_res = match (tunnel_to_ws_res, ws_to_tunnel_res, ping_res, keepalive_res)
515
- {
558
+ let mut lifecycle_res = match (
559
+ tunnel_to_ws_res,
560
+ ws_to_tunnel_res,
561
+ ping_res,
562
+ keepalive_res,
563
+ metrics_res,
564
+ ) {
516
565
  // Prefer error
517
- (Err(err), _, _, _) => Err(err),
518
- (_, Err(err), _, _) => Err(err),
519
- (_, _, Err(err), _) => Err(err),
520
- (_, _, _, Err(err)) => Err(err),
566
+ (Err(err), _, _, _, _) => Err(err),
567
+ (_, Err(err), _, _, _) => Err(err),
568
+ (_, _, Err(err), _, _) => Err(err),
569
+ (_, _, _, Err(err), _) => Err(err),
570
+ (_, _, _, _, Err(err)) => Err(err),
521
571
  // Prefer non aborted result if all succeed
522
- (Ok(res), Ok(LifecycleResult::Aborted), _, _) => Ok(res),
523
- (Ok(LifecycleResult::Aborted), Ok(res), _, _) => Ok(res),
572
+ (Ok(res), Ok(LifecycleResult::Aborted), _, _, _) => Ok(res),
573
+ (Ok(LifecycleResult::Aborted), Ok(res), _, _, _) => Ok(res),
524
574
  // Unlikely case
525
- (res, _, _, _) => res,
575
+ (res, _, _, _, _) => res,
526
576
  };
527
577
 
528
578
  // Send close frame to runner if not hibernating
@@ -538,8 +588,8 @@ impl CustomServeTrait for PegboardGateway {
538
588
  Ok(_) => (CloseCode::Normal.into(), None),
539
589
  Err(_) => (CloseCode::Error.into(), Some("ws.downstream_closed".into())),
540
590
  };
541
- let close_message = protocol::ToClientTunnelMessageKind::ToClientWebSocketClose(
542
- protocol::ToClientWebSocketClose {
591
+ let close_message = protocol::mk2::ToClientTunnelMessageKind::ToClientWebSocketClose(
592
+ protocol::mk2::ToClientWebSocketClose {
543
593
  code: Some(close_code.into()),
544
594
  reason: close_reason.map(|x| x.as_str().to_string()),
545
595
  },
@@ -570,13 +620,100 @@ impl CustomServeTrait for PegboardGateway {
570
620
  Err(err) => Err(err),
571
621
  }
572
622
  }
623
+ }
573
624
 
574
- #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id, request_id=%protocol::util::id_to_string(&request_id)))]
625
+ #[async_trait]
626
+ impl CustomServeTrait for PegboardGateway {
627
+ #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id, runner_id=?self.runner_id))]
628
+ async fn handle_request(
629
+ &self,
630
+ req: Request<Full<Bytes>>,
631
+ req_ctx: &mut RequestContext,
632
+ ) -> Result<Response<ResponseBody>> {
633
+ let ctx = self.ctx.with_ray(req_ctx.ray_id(), req_ctx.req_id())?;
634
+ let req_body_size_hint = req.body().size_hint();
635
+
636
+ let (res, metrics_res) = tokio::join!(
637
+ self.handle_request_inner(&ctx, req, req_ctx),
638
+ record_req_metrics(
639
+ &ctx,
640
+ self.runner_id,
641
+ self.actor_id,
642
+ Metric::HttpIngress(
643
+ req_body_size_hint
644
+ .upper()
645
+ .unwrap_or(req_body_size_hint.lower()) as usize
646
+ ),
647
+ ),
648
+ );
649
+
650
+ let response_size = match &res {
651
+ Ok(res) => res.size_hint().upper().unwrap_or(res.size_hint().lower()),
652
+ Err(_) => 0,
653
+ };
654
+
655
+ if let Err(err) = metrics_res {
656
+ tracing::error!(?err, "http req ingress metrics failed");
657
+ } else {
658
+ if let Err(err) = record_req_metrics(
659
+ &ctx,
660
+ self.runner_id,
661
+ self.actor_id,
662
+ Metric::HttpEgress(response_size as usize),
663
+ )
664
+ .await
665
+ {
666
+ tracing::error!(
667
+ ?err,
668
+ runner_id=?self.runner_id,
669
+ "http req egress metrics failed, likely corrupt now",
670
+ );
671
+ }
672
+ }
673
+
674
+ res
675
+ }
676
+
677
+ #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id, runner_id=?self.runner_id))]
678
+ async fn handle_websocket(
679
+ &self,
680
+ req_ctx: &mut RequestContext,
681
+ client_ws: WebSocketHandle,
682
+ after_hibernation: bool,
683
+ ) -> Result<Option<CloseFrame>> {
684
+ let ctx = self.ctx.with_ray(req_ctx.ray_id(), req_ctx.req_id())?;
685
+ let (res, metrics_res) = tokio::join!(
686
+ self.handle_websocket_inner(&ctx, req_ctx, client_ws, after_hibernation),
687
+ record_req_metrics(&ctx, self.runner_id, self.actor_id, Metric::WebsocketOpen),
688
+ );
689
+
690
+ if let Err(err) = metrics_res {
691
+ tracing::error!(?err, "ws open metrics failed");
692
+ } else {
693
+ if let Err(err) =
694
+ record_req_metrics(&ctx, self.runner_id, self.actor_id, Metric::WebsocketClose)
695
+ .await
696
+ {
697
+ tracing::error!(
698
+ ?err,
699
+ runner_id=?self.runner_id,
700
+ "ws close metrics failed, likely corrupt now",
701
+ );
702
+ }
703
+ }
704
+
705
+ res
706
+ }
707
+
708
+ #[tracing::instrument(skip_all, fields(actor_id=?self.actor_id))]
575
709
  async fn handle_websocket_hibernation(
576
710
  &self,
711
+ req_ctx: &mut RequestContext,
577
712
  client_ws: WebSocketHandle,
578
- request_id: protocol::RequestId,
579
713
  ) -> Result<HibernationResult> {
714
+ let ctx = self.ctx.with_ray(req_ctx.ray_id(), req_ctx.req_id())?;
715
+ let request_id = req_ctx.in_flight_request_id()?;
716
+
580
717
  // Immediately rewake if we have pending messages
581
718
  if self
582
719
  .shared_state
@@ -592,31 +729,66 @@ impl CustomServeTrait for PegboardGateway {
592
729
  let (keepalive_abort_tx, keepalive_abort_rx) = watch::channel(());
593
730
  let keepalive_handle = tokio::spawn(keepalive_task::task(
594
731
  self.shared_state.clone(),
595
- self.ctx.clone(),
732
+ ctx.clone(),
596
733
  self.actor_id,
597
734
  self.shared_state.gateway_id(),
598
735
  request_id,
599
736
  keepalive_abort_rx,
600
737
  ));
601
738
 
602
- let res = self.handle_websocket_hibernation_inner(client_ws).await;
739
+ let (res, metrics_res) = tokio::join!(
740
+ self.handle_websocket_hibernation_inner(client_ws),
741
+ record_req_metrics(
742
+ &ctx,
743
+ self.runner_id,
744
+ self.actor_id,
745
+ Metric::WebsocketHibernate
746
+ )
747
+ );
603
748
 
604
749
  let _ = keepalive_abort_tx.send(());
605
750
  let _ = keepalive_handle.await;
606
751
 
607
- match &res {
608
- Ok(HibernationResult::Continue) => {}
609
- Ok(HibernationResult::Close) | Err(_) => {
610
- // No longer an active hibernating request, delete entry
611
- self.ctx
612
- .op(pegboard::ops::actor::hibernating_request::delete::Input {
613
- actor_id: self.actor_id,
614
- gateway_id: self.shared_state.gateway_id(),
615
- request_id,
616
- })
617
- .await?;
618
- }
619
- }
752
+ let (delete_res, _) = tokio::join!(
753
+ async {
754
+ match &res {
755
+ Ok(HibernationResult::Continue) => {}
756
+ Ok(HibernationResult::Close) | Err(_) => {
757
+ // No longer an active hibernating request, delete entry
758
+ ctx.op(pegboard::ops::actor::hibernating_request::delete::Input {
759
+ actor_id: self.actor_id,
760
+ gateway_id: self.shared_state.gateway_id(),
761
+ request_id,
762
+ })
763
+ .await?;
764
+ }
765
+ }
766
+
767
+ anyhow::Ok(())
768
+ },
769
+ async {
770
+ if let Err(err) = metrics_res {
771
+ tracing::error!(?err, "ws hibernate metrics failed");
772
+ } else {
773
+ if let Err(err) = record_req_metrics(
774
+ &ctx,
775
+ self.runner_id,
776
+ self.actor_id,
777
+ Metric::WebsocketStopHibernate,
778
+ )
779
+ .await
780
+ {
781
+ tracing::error!(
782
+ ?err,
783
+ runner_id=?self.runner_id,
784
+ "ws stop hibernate metrics failed, likely corrupt now"
785
+ );
786
+ }
787
+ }
788
+ },
789
+ );
790
+
791
+ delete_res?;
620
792
 
621
793
  res
622
794
  }
@@ -696,3 +868,209 @@ async fn hibernate_ws(ws_rx: Arc<Mutex<WebSocketReceiver>>) -> Result<Hibernatio
696
868
  }
697
869
  }
698
870
  }
871
+
872
+ async fn get_runner_protocol_version(ctx: &StandaloneCtx, runner_id: Id) -> Result<u16> {
873
+ ctx.udb()?
874
+ .run(|tx| async move {
875
+ let tx = tx.with_subspace(pegboard::keys::subspace());
876
+
877
+ let protocol_version_entry = tx
878
+ .read_opt(
879
+ &pegboard::keys::runner::ProtocolVersionKey::new(runner_id),
880
+ Serializable,
881
+ )
882
+ .await?;
883
+
884
+ Ok(protocol_version_entry.unwrap_or(PROTOCOL_MK1_VERSION))
885
+ })
886
+ .await
887
+ }
888
+
889
+ enum Metric {
890
+ HttpIngress(usize),
891
+ HttpEgress(usize),
892
+ WebsocketOpen,
893
+ // Ingress, Egress
894
+ WebsocketTransfer(usize, usize),
895
+ WebsocketClose,
896
+ WebsocketHibernate,
897
+ WebsocketStopHibernate,
898
+ }
899
+
900
+ async fn record_req_metrics(
901
+ ctx: &StandaloneCtx,
902
+ runner_id: Id,
903
+ actor_id: Id,
904
+ metric: Metric,
905
+ ) -> Result<u16> {
906
+ let metric = &metric;
907
+ // Read runner protocol version
908
+ let (protocol_version, has_name, actor_workflow_id) = ctx
909
+ .udb()?
910
+ .run(|tx| async move {
911
+ let tx = tx.with_subspace(pegboard::keys::subspace());
912
+
913
+ let protocol_version_key = pegboard::keys::runner::ProtocolVersionKey::new(runner_id);
914
+ let namespace_id_key = pegboard::keys::runner::NamespaceIdKey::new(runner_id);
915
+ let actor_name_key = pegboard::keys::actor::NameKey::new(actor_id);
916
+ let actor_workflow_id_key = pegboard::keys::actor::WorkflowIdKey::new(actor_id);
917
+ let (protocol_version_entry, namespace_id, actor_name_entry, actor_workflow_id) = tokio::try_join!(
918
+ tx.read_opt(&protocol_version_key, Serializable),
919
+ tx.read(&namespace_id_key, Serializable),
920
+ tx.read_opt(&actor_name_key, Serializable),
921
+ tx.read(&actor_workflow_id_key, Serializable),
922
+ )?;
923
+ let has_name = actor_name_entry.is_some();
924
+
925
+ if let Some(name) = &actor_name_entry {
926
+ metric_inc(&tx, namespace_id, name, metric);
927
+ }
928
+
929
+ Ok((
930
+ protocol_version_entry.unwrap_or(PROTOCOL_MK1_VERSION),
931
+ has_name,
932
+ actor_workflow_id,
933
+ ))
934
+ })
935
+ .await?;
936
+
937
+ // NOTE: The name key was added via backfill. If the actor has not backfilled the key yet (key is none),
938
+ // we need to fetch it from the actor state
939
+ if !has_name {
940
+ let wf = ctx
941
+ .workflow::<pegboard::workflows::actor::Input>(actor_workflow_id)
942
+ .get()
943
+ .await?
944
+ .context("actor not found")?;
945
+ let actor_state = &wf
946
+ .parse_state::<Option<pegboard::workflows::actor::State>>()?
947
+ .context("actor did not initialize state yet")?;
948
+
949
+ // Record metrics
950
+ ctx.udb()?
951
+ .run(|tx| async move {
952
+ let tx = tx.with_subspace(pegboard::keys::subspace());
953
+ metric_inc(&tx, actor_state.namespace_id, &actor_state.name, metric);
954
+
955
+ Ok(())
956
+ })
957
+ .await?;
958
+ }
959
+
960
+ Ok(protocol_version)
961
+ }
962
+
963
+ fn metric_inc(tx: &universaldb::Transaction, namespace_id: Id, name: &str, metric: &Metric) {
964
+ match metric {
965
+ Metric::HttpIngress(size) => {
966
+ namespace::keys::metric::inc(
967
+ &tx.with_subspace(namespace::keys::subspace()),
968
+ namespace_id,
969
+ namespace::keys::metric::Metric::GatewayIngress(
970
+ name.to_string(),
971
+ "http".to_string(),
972
+ ),
973
+ (*size).try_into().unwrap_or_default(),
974
+ );
975
+ namespace::keys::metric::inc(
976
+ &tx.with_subspace(namespace::keys::subspace()),
977
+ namespace_id,
978
+ namespace::keys::metric::Metric::Requests(name.to_string(), "http".to_string()),
979
+ 1,
980
+ );
981
+ namespace::keys::metric::inc(
982
+ &tx.with_subspace(namespace::keys::subspace()),
983
+ namespace_id,
984
+ namespace::keys::metric::Metric::ActiveRequests(
985
+ name.to_string(),
986
+ "http".to_string(),
987
+ ),
988
+ 1,
989
+ );
990
+ }
991
+ Metric::HttpEgress(size) => {
992
+ namespace::keys::metric::inc(
993
+ &tx.with_subspace(namespace::keys::subspace()),
994
+ namespace_id,
995
+ namespace::keys::metric::Metric::GatewayEgress(
996
+ name.to_string(),
997
+ "http".to_string(),
998
+ ),
999
+ (*size).try_into().unwrap_or_default(),
1000
+ );
1001
+ namespace::keys::metric::inc(
1002
+ &tx.with_subspace(namespace::keys::subspace()),
1003
+ namespace_id,
1004
+ namespace::keys::metric::Metric::ActiveRequests(
1005
+ name.to_string(),
1006
+ "http".to_string(),
1007
+ ),
1008
+ -1,
1009
+ );
1010
+ }
1011
+ Metric::WebsocketOpen => {
1012
+ namespace::keys::metric::inc(
1013
+ &tx.with_subspace(namespace::keys::subspace()),
1014
+ namespace_id,
1015
+ namespace::keys::metric::Metric::Requests(name.to_string(), "ws".to_string()),
1016
+ 1,
1017
+ );
1018
+ namespace::keys::metric::inc(
1019
+ &tx.with_subspace(namespace::keys::subspace()),
1020
+ namespace_id,
1021
+ namespace::keys::metric::Metric::ActiveRequests(name.to_string(), "ws".to_string()),
1022
+ 1,
1023
+ );
1024
+ }
1025
+ Metric::WebsocketTransfer(ingress_size, egress_size) => {
1026
+ namespace::keys::metric::inc(
1027
+ &tx.with_subspace(namespace::keys::subspace()),
1028
+ namespace_id,
1029
+ namespace::keys::metric::Metric::GatewayIngress(name.to_string(), "ws".to_string()),
1030
+ (*ingress_size).try_into().unwrap_or_default(),
1031
+ );
1032
+ namespace::keys::metric::inc(
1033
+ &tx.with_subspace(namespace::keys::subspace()),
1034
+ namespace_id,
1035
+ namespace::keys::metric::Metric::GatewayEgress(name.to_string(), "ws".to_string()),
1036
+ (*egress_size).try_into().unwrap_or_default(),
1037
+ );
1038
+ }
1039
+ Metric::WebsocketClose => {
1040
+ namespace::keys::metric::inc(
1041
+ &tx.with_subspace(namespace::keys::subspace()),
1042
+ namespace_id,
1043
+ namespace::keys::metric::Metric::ActiveRequests(name.to_string(), "ws".to_string()),
1044
+ -1,
1045
+ );
1046
+ }
1047
+ Metric::WebsocketHibernate => {
1048
+ namespace::keys::metric::inc(
1049
+ &tx.with_subspace(namespace::keys::subspace()),
1050
+ namespace_id,
1051
+ namespace::keys::metric::Metric::Requests(name.to_string(), "hws".to_string()),
1052
+ 1,
1053
+ );
1054
+ namespace::keys::metric::inc(
1055
+ &tx.with_subspace(namespace::keys::subspace()),
1056
+ namespace_id,
1057
+ namespace::keys::metric::Metric::ActiveRequests(
1058
+ name.to_string(),
1059
+ "hws".to_string(),
1060
+ ),
1061
+ 1,
1062
+ );
1063
+ }
1064
+ Metric::WebsocketStopHibernate => {
1065
+ namespace::keys::metric::inc(
1066
+ &tx.with_subspace(namespace::keys::subspace()),
1067
+ namespace_id,
1068
+ namespace::keys::metric::Metric::ActiveRequests(
1069
+ name.to_string(),
1070
+ "hws".to_string(),
1071
+ ),
1072
+ -1,
1073
+ );
1074
+ }
1075
+ }
1076
+ }