@mark1russell7/machines 0.3.25 → 0.3.26

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.
package/README.md CHANGED
@@ -65,8 +65,9 @@ The algebra reads these documents. It gives the closed form of each timer, the f
65
65
  | `ISTIO_SIDECAR_OUTBOUND` | `istio-sidecar-outbound` | The client sidecar of Istio 1.31.3: Envoy 1.39.4 between the app and the mesh, its retries, an update of LDS and the SIGKILL | proxy | 31 implemented |
66
66
  | `ISTIO_SIDECAR_INBOUND` | `istio-sidecar-inbound` | The server sidecar of Istio 1.31.3: Envoy 1.39.4 between the mesh and the app, the policy, an update of LDS and the SIGKILL | proxy | 31 implemented |
67
67
  | `PILOT_AGENT` | `pilot-agent` | pilot-agent of Istio 1.31.3: the drain and the SIGKILL of the Envoy of a sidecar at the stop of its pod | proxy | 12 implemented |
68
+ | `ZTUNNEL_HBONE` | `ztunnel-hbone` | ztunnel 1.31.3 in in-pod mode: one HBONE connection from a client pod to a server pod, its PING, its drain and the close of each flow of the app | proxy | 14 implemented, 3 derived |
68
69
 
69
- Thirty-two documents operate on Linux TCP (`over`). Eight documents operate on no other document. They are Linux TCP, conntrack, the Sentinel, the replication of mongod, aten, the member of Ra, the `RetryAgent` of undici and pilot-agent.
70
+ Thirty-three documents operate on Linux TCP (`over`). Eight documents operate on no other document. They are Linux TCP, conntrack, the Sentinel, the replication of mongod, aten, the member of Ra, the `RetryAgent` of undici and pilot-agent.
70
71
 
71
72
  The `RetryAgent` is one request above the sockets of a `Client`. Its timer is the delay of a retry. Each retry can go on a new socket. The `conditions` of each document give the range where it holds, for example a range of kernels.
72
73
 
@@ -114,6 +115,15 @@ A change to the version of a system changes its sources too. Each fact of the do
114
115
 
115
116
  In this repository, a snapshot of the predictions of the cells (`packages/cells/src/__snapshots__/predictions.json`) shows each prediction that a change to a document moves.
116
117
 
118
+ ### 0.3.26
119
+
120
+ - **ztunnel 1.31.3 for T15** (`ztunnel-hbone`). This new document is one HBONE connection of the ambient mesh, from the source at its tag.
121
+ - The PING has a fixed cadence: a PING 10 s after the last PONG, then at most 20 s for its PONG. Both are constants, and data does not put a PING off. Thus a black hole is found 20 s to 30 s later.
122
+ - At the end of a stream or of its connection, ztunnel shuts down the socket of each app: a FIN. A connect to 15008 that fails closes the socket of the app before any byte of an answer.
123
+ - The connect times out at 10 s. At SIGTERM, ztunnel sends GOAWAY and ends what is left at its deadline of 25 s. It has no idle timeout and no maximum age of a connection.
124
+ - The HBONE socket is Linux TCP with a keepalive of 180 s, 180 s and 9 probes, and no TCP_USER_TIMEOUT.
125
+ - The cell T15.defaults.12 cites it. It reads no timer of the document, thus it moves no prediction of the snapshot.
126
+
117
127
  ### 0.3.25
118
128
 
119
129
  - **The sidecar of Istio 1.31.3 for T15.** Three new documents, each from the source at its tag. `istioSidecar(side)` builds the two sidecars from `envoy-http2`, because the proxy of Istio 1.31.3 has the code of Envoy 1.39.4.
package/build/index.d.ts CHANGED
@@ -510,6 +510,23 @@ export declare const TOXIPROXY_LINK: Machine;
510
510
  */
511
511
  export declare const DOCKER_PROXY_LINK: Machine;
512
512
  //#endregion
513
+ //#region src/proxy/ztunnel.d.ts
514
+ /**
515
+ * This document is ztunnel 1.31.3 in the ambient mesh of Istio, in in-pod mode. It is one HBONE
516
+ * connection from the ztunnel of a client pod to the port 15008 of a server pod. The flows of the
517
+ * apps are its streams. The agent istio-cni redirects each connection of an app to the listener
518
+ * 15001 of ztunnel, in the network namespace of the pod. Thus the HBONE socket has the address of the pod.
519
+ *
520
+ * The PING of the connection has a fixed cadence: 10 s of sleep, a PING, then at most 20 s for its
521
+ * PONG. Both are constants, and data does not put a PING off. Thus a link that fails is found 20 s to
522
+ * 30 s later.
523
+ *
524
+ * At the end of a stream or of its connection, ztunnel shuts down the socket of the app. The app then
525
+ * gets a FIN. No timer closes an idle connection or an old one. At SIGTERM, ztunnel sends GOAWAY, and
526
+ * it ends what is left at its deadline of 25 s.
527
+ */
528
+ export declare const ZTUNNEL_HBONE: Machine;
529
+ //#endregion
513
530
  //#region src/rabbit/amqplib.d.ts
514
531
  /**
515
532
  * This document is amqplib 2.2.0 on Node, for one connection to a broker of AMQP 0-9-1 and one channel
package/build/index.js CHANGED
@@ -15139,6 +15139,513 @@ const DOCKER_PROXY_LINK = machineSchema.parse({
15139
15139
  over: overOf(["linked", "half-closed"])
15140
15140
  });
15141
15141
  //#endregion
15142
+ //#region src/proxy/ztunnel.ts
15143
+ const Z = "ztunnel 1.31.3";
15144
+ const I = "istio 1.31.3";
15145
+ /**
15146
+ * This document is ztunnel 1.31.3 in the ambient mesh of Istio, in in-pod mode. It is one HBONE
15147
+ * connection from the ztunnel of a client pod to the port 15008 of a server pod. The flows of the
15148
+ * apps are its streams. The agent istio-cni redirects each connection of an app to the listener
15149
+ * 15001 of ztunnel, in the network namespace of the pod. Thus the HBONE socket has the address of the pod.
15150
+ *
15151
+ * The PING of the connection has a fixed cadence: 10 s of sleep, a PING, then at most 20 s for its
15152
+ * PONG. Both are constants, and data does not put a PING off. Thus a link that fails is found 20 s to
15153
+ * 30 s later.
15154
+ *
15155
+ * At the end of a stream or of its connection, ztunnel shuts down the socket of the app. The app then
15156
+ * gets a FIN. No timer closes an idle connection or an old one. At SIGTERM, ztunnel sends GOAWAY, and
15157
+ * it ends what is left at its deadline of 25 s.
15158
+ */
15159
+ const ZTUNNEL_HBONE = machineSchema.parse({
15160
+ format: "mark1russell7.machine/1",
15161
+ id: "ztunnel-hbone",
15162
+ title: "ztunnel 1.31.3 in in-pod mode: one HBONE connection from a client pod to a server pod, its PING, its drain and the close of each flow of the app",
15163
+ layer: "proxy",
15164
+ version: "1.31.3",
15165
+ conditions: {
15166
+ ztunnel: "1.31.3",
15167
+ istio: "1.31.3 with the profile ambient: istio-cni and ztunnel on each node",
15168
+ mode: "in-pod: istio-cni redirects the traffic of each pod to the listeners of ztunnel in the network namespace of the pod",
15169
+ connection: "one HBONE connection to the port 15008 of a server pod, with mTLS and HTTP/2, and its streams"
15170
+ },
15171
+ sources: [
15172
+ {
15173
+ ref: `${Z} src/proxy/h2/client.rs:50-58 and src/proxy/outbound.rs:446-452 the key of the pool: the source identity, the destination identities, the destination address and the source IP. In in-pod mode the destination is the server pod at port 15008`,
15174
+ rung: "implemented"
15175
+ },
15176
+ {
15177
+ ref: `${Z} src/config.rs:74, :106, :790 and src/proxy/h2/client.rs:183-190 at most 100 streams on one HBONE connection`,
15178
+ rung: "implemented"
15179
+ },
15180
+ {
15181
+ ref: `${Z} src/config.rs:75, :105, :795 and src/proxy/pool.rs:142-146 POOL_UNUSED_RELEASE_TIMEOUT is 5 min. A release does not close the connection: HTTP/2 closes it when no reference and no stream is left`,
15182
+ rung: "implemented"
15183
+ },
15184
+ {
15185
+ ref: `${Z} src/proxy.rs:645, :695 the TCP connect of ztunnel times out at 10 s, a constant`,
15186
+ rung: "implemented"
15187
+ },
15188
+ {
15189
+ ref: `${Z} src/proxy/h2.rs:31-76 the PING loop: 10 s of sleep, a PING, at most 20 s for its PONG, then again. PING_INTERVAL and PING_TIMEOUT are constants (:36-37)`,
15190
+ rung: "implemented"
15191
+ },
15192
+ {
15193
+ ref: `${Z} src/proxy/h2.rs:222-225 the PING is not data aware: data on the connection does not put a PING off`,
15194
+ rung: "implemented"
15195
+ },
15196
+ {
15197
+ ref: `${Z} src/proxy/h2/client.rs:237-238 and src/proxy/h2/server.rs:160-168 at a PING timeout the client drops the connection, and the server calls abrupt_shutdown(NO_ERROR)`,
15198
+ rung: "implemented"
15199
+ },
15200
+ {
15201
+ ref: `${Z} src/proxy/h2.rs:229-238 and src/copy.rs:176-183, :198-212 at the end of a stream or of its connection, the copy loop shuts down the socket of the app: a FIN`,
15202
+ rung: "implemented"
15203
+ },
15204
+ {
15205
+ ref: "linux v6.6 net/ipv4/tcp.c:2781-2807 the close of a socket with unread bytes in its receive queue sends a reset, and else a FIN",
15206
+ rung: "implemented"
15207
+ },
15208
+ {
15209
+ ref: `${Z} src/config.rs:44-48, :355-360, :913-931 and src/proxy.rs:109-126 the TCP keepalive: 180 s idle, 180 s between probes and 9 probes, on each socket that ztunnel connects. No TCP_USER_TIMEOUT`,
15210
+ rung: "implemented"
15211
+ },
15212
+ {
15213
+ ref: `${Z} src/proxy, src/copy.rs and src/config.rs: no idle timeout of L4 and no maximum age of a connection, from a search of the tag`,
15214
+ rung: "derived"
15215
+ },
15216
+ {
15217
+ ref: `${Z} src/proxy/outbound.rs: a connect of the pool that fails ends the flow of the app before its copy starts. The app sees its socket close before any byte of an answer`,
15218
+ rung: "derived"
15219
+ },
15220
+ {
15221
+ ref: `${I} cni/pkg/nodeagent/informers.go:316-325, :396-408 and ${Z} src/inpod/statemanager.rs:170-191 and src/drain.rs:58-70 at the deletion of a pod, the node agent sends DelWorkload, and ztunnel drains the proxy of that pod at once`,
15222
+ rung: "implemented"
15223
+ },
15224
+ {
15225
+ ref: `${Z} src/config.rs:101, :810-827 and src/app.rs:391-399 the deadline of the drain: CONNECTION_TERMINATION_DEADLINE, else the grace less 5 s. The chart sets the grace to 30 s (${I} manifests/charts/ztunnel/values.yaml:102): 25 s`,
15226
+ rung: "implemented"
15227
+ },
15228
+ {
15229
+ ref: `${Z} src/proxy/h2/server.rs:170-172 and src/proxy/outbound.rs:121 at SIGTERM the accept loops stop, and the HBONE server sends GOAWAY`,
15230
+ rung: "implemented"
15231
+ },
15232
+ {
15233
+ ref: `${Z} src/proxy/connection_manager.rs:133, :364-376 and src/proxy/inbound.rs:273-280 a CONNECT that a policy denies gets 401. At a change of a policy, ztunnel checks each open inbound connection again and closes each one that it now denies`,
15234
+ rung: "implemented"
15235
+ },
15236
+ {
15237
+ ref: `${Z} proto/workload.proto:148-198 the workload API has only routing preferences and a health policy for load balancing. No field of a DestinationRule reaches ztunnel on an L4 path`,
15238
+ rung: "derived"
15239
+ }
15240
+ ],
15241
+ states: {
15242
+ "[none]": {
15243
+ initial: true,
15244
+ pseudo: true,
15245
+ note: "Before the first flow of the app that needs the connection"
15246
+ },
15247
+ connecting: { note: "The TCP connect and the TLS handshake to the port 15008 of the server pod. The flow of the app waits" },
15248
+ ready: { note: "The connection carries the flows of the apps as streams. The PING loop runs" },
15249
+ draining: { note: "After SIGTERM: the HBONE server sent GOAWAY, and the open streams go on until the deadline" },
15250
+ ended: {
15251
+ final: true,
15252
+ note: "The connection closed. Each flow of the app on it got a FIN"
15253
+ }
15254
+ },
15255
+ events: {
15256
+ "local.accept": {
15257
+ kind: "local",
15258
+ note: "The listener 15001 accepts a connection of the app, and the pool has no connection for its key"
15259
+ },
15260
+ "local.connected": {
15261
+ kind: "local",
15262
+ note: "The TCP connect and the TLS handshake to 15008 complete"
15263
+ },
15264
+ "local.connect-failed": {
15265
+ kind: "local",
15266
+ note: "The connect to 15008 fails: a reset, a refusal or a failed handshake"
15267
+ },
15268
+ "local.stream-end": {
15269
+ kind: "local",
15270
+ note: "The last stream on the connection ends"
15271
+ },
15272
+ "local.policy-denied": {
15273
+ kind: "local",
15274
+ note: "A change of a policy denies the connection: on the side of the server"
15275
+ },
15276
+ "local.del-workload": {
15277
+ kind: "local",
15278
+ note: "DelWorkload of the node agent of istio-cni for the pod: its deletion"
15279
+ },
15280
+ "rx.pong": {
15281
+ kind: "rx",
15282
+ note: "The PONG of the last PING"
15283
+ },
15284
+ "peer.rst": {
15285
+ kind: "peer",
15286
+ note: "A reset of the HBONE socket"
15287
+ },
15288
+ "peer.fin": {
15289
+ kind: "peer",
15290
+ note: "An end of file of the HBONE socket, or the end of the HTTP/2 connection"
15291
+ },
15292
+ "app.stop": {
15293
+ kind: "app",
15294
+ note: "SIGTERM to ztunnel: a restart or a deletion of its pod"
15295
+ },
15296
+ "timer.connect": {
15297
+ kind: "timer",
15298
+ note: "The connect does not complete in 10 s"
15299
+ },
15300
+ "timer.ping": {
15301
+ kind: "timer",
15302
+ note: "10 s after the last PONG: the next PING"
15303
+ },
15304
+ "timer.pong": {
15305
+ kind: "timer",
15306
+ note: "No PONG for 20 s after a PING"
15307
+ },
15308
+ "timer.release": {
15309
+ kind: "timer",
15310
+ note: "No stream on the connection for the unused release timeout"
15311
+ },
15312
+ "timer.deadline": {
15313
+ kind: "timer",
15314
+ note: "The deadline of the drain after SIGTERM"
15315
+ },
15316
+ "tx.ping": {
15317
+ kind: "tx",
15318
+ note: "A PING of HTTP/2"
15319
+ },
15320
+ "tx.goaway": {
15321
+ kind: "tx",
15322
+ note: "A GOAWAY of the HBONE server"
15323
+ },
15324
+ "tx.close": {
15325
+ kind: "tx",
15326
+ note: "The close of the HBONE connection"
15327
+ },
15328
+ "tx.app-fin": {
15329
+ kind: "tx",
15330
+ note: "The shutdown of the socket of each flow of the app on the connection: a FIN, or a reset when bytes are unread"
15331
+ },
15332
+ "tx.app-close": {
15333
+ kind: "tx",
15334
+ note: "The close of the socket of the app whose flow waited for the connect, before any byte of an answer"
15335
+ }
15336
+ },
15337
+ knobs: {
15338
+ connect_timeout: {
15339
+ key: "the TCP connect timeout of ztunnel",
15340
+ scope: "build",
15341
+ unit: "s",
15342
+ default: 10,
15343
+ note: "proxy.rs:645: a constant"
15344
+ },
15345
+ ping_interval: {
15346
+ key: "PING_INTERVAL",
15347
+ scope: "build",
15348
+ unit: "s",
15349
+ default: 10,
15350
+ note: "h2.rs:36: a constant"
15351
+ },
15352
+ ping_timeout: {
15353
+ key: "PING_TIMEOUT",
15354
+ scope: "build",
15355
+ unit: "s",
15356
+ default: 20,
15357
+ note: "h2.rs:37: a constant"
15358
+ },
15359
+ pool_release: {
15360
+ key: "POOL_UNUSED_RELEASE_TIMEOUT",
15361
+ scope: "process",
15362
+ unit: "s",
15363
+ default: 300,
15364
+ note: "config.rs:75: 5 min, an environment variable"
15365
+ },
15366
+ deadline: {
15367
+ key: "CONNECTION_TERMINATION_DEADLINE",
15368
+ scope: "process",
15369
+ unit: "s",
15370
+ default: 25,
15371
+ note: "config.rs:810-827: unset, thus the grace of 30 s of the chart less 5 s"
15372
+ },
15373
+ keepidle: {
15374
+ key: "the TCP keepalive idle of ztunnel",
15375
+ scope: "process",
15376
+ unit: "s",
15377
+ default: 180,
15378
+ note: "config.rs:44-48"
15379
+ },
15380
+ keepintvl: {
15381
+ key: "the TCP keepalive interval of ztunnel",
15382
+ scope: "process",
15383
+ unit: "s",
15384
+ default: 180,
15385
+ note: "config.rs:44-48"
15386
+ },
15387
+ keepcnt: {
15388
+ key: "the TCP keepalive count of ztunnel",
15389
+ scope: "process",
15390
+ unit: "count",
15391
+ default: 9,
15392
+ note: "config.rs:44-48"
15393
+ },
15394
+ slack: {
15395
+ key: "the lateness of the runtime of tokio for one step",
15396
+ scope: "process",
15397
+ unit: "s",
15398
+ default: .01,
15399
+ note: "An assumption of this document, not a value of ztunnel"
15400
+ }
15401
+ },
15402
+ timers: {
15403
+ connect: {
15404
+ duration: {
15405
+ knob: "connect_timeout",
15406
+ unit: "s"
15407
+ },
15408
+ lateness: {
15409
+ knob: "slack",
15410
+ unit: "s"
15411
+ },
15412
+ arms: ["enter:connecting"],
15413
+ cancels: ["local.connected", "local.connect-failed"],
15414
+ fires: "timer.connect",
15415
+ note: "proxy.rs:645, :695"
15416
+ },
15417
+ ping: {
15418
+ duration: {
15419
+ knob: "ping_interval",
15420
+ unit: "s"
15421
+ },
15422
+ lateness: {
15423
+ knob: "slack",
15424
+ unit: "s"
15425
+ },
15426
+ arms: ["enter:ready", "rx.pong"],
15427
+ fires: "timer.ping",
15428
+ backoff: { resets: ["rx.pong"] },
15429
+ note: "h2.rs:39, :56: the sleep before each PING. It starts again after each PONG, thus it detects nothing by itself"
15430
+ },
15431
+ pong: {
15432
+ duration: {
15433
+ expr: "ping_interval + ping_timeout",
15434
+ unit: "s"
15435
+ },
15436
+ early: {
15437
+ knob: "ping_interval",
15438
+ unit: "s"
15439
+ },
15440
+ lateness: {
15441
+ expr: "2 * slack",
15442
+ unit: "s"
15443
+ },
15444
+ arms: ["enter:ready", "rx.pong"],
15445
+ cancels: ["peer.rst", "peer.fin"],
15446
+ fires: "timer.pong",
15447
+ note: "h2.rs:46: the wait of 20 s for the PONG of the PING that comes 10 s after the last PONG. A failure at a time in the cycle is found 20 s to 30 s later, and data does not change it"
15448
+ },
15449
+ release: {
15450
+ duration: {
15451
+ knob: "pool_release",
15452
+ unit: "s"
15453
+ },
15454
+ lateness: {
15455
+ knob: "slack",
15456
+ unit: "s"
15457
+ },
15458
+ arms: ["local.stream-end"],
15459
+ cancels: ["local.accept"],
15460
+ fires: "timer.release",
15461
+ note: "pool.rs:142-146: from the end of the last stream"
15462
+ },
15463
+ deadline: {
15464
+ duration: {
15465
+ knob: "deadline",
15466
+ unit: "s"
15467
+ },
15468
+ lateness: {
15469
+ knob: "slack",
15470
+ unit: "s"
15471
+ },
15472
+ arms: ["app.stop"],
15473
+ fires: "timer.deadline",
15474
+ note: "app.rs:391-399: from SIGTERM"
15475
+ }
15476
+ },
15477
+ realizes: {
15478
+ "systems.mechanism.heartbeat-interval": { timer: "ping" },
15479
+ "systems.mechanism.heartbeat-detection-time": {
15480
+ duration: {
15481
+ expr: "ping_interval + ping_timeout",
15482
+ unit: "s"
15483
+ },
15484
+ lateness: {
15485
+ expr: "2 * slack",
15486
+ unit: "s"
15487
+ },
15488
+ note: "The PING 10 s after the last PONG, and the drop 20 s after the PING"
15489
+ }
15490
+ },
15491
+ transitions: [
15492
+ {
15493
+ id: "zt.connect",
15494
+ from: "[none]",
15495
+ to: "connecting",
15496
+ on: "local.accept",
15497
+ timer: "connect",
15498
+ source: "outbound.rs:446-452, client.rs:50-58"
15499
+ },
15500
+ {
15501
+ id: "zt.connected",
15502
+ from: "connecting",
15503
+ to: "ready",
15504
+ on: "local.connected",
15505
+ timer: "pong",
15506
+ source: "client.rs:183-190"
15507
+ },
15508
+ {
15509
+ id: "zt.connect-failed",
15510
+ from: "connecting",
15511
+ to: "ended",
15512
+ on: "local.connect-failed",
15513
+ emits: ["tx.app-close"],
15514
+ note: "A reset of the SYN to 15008 fails the connect at once. The app sees its socket close before any byte of an answer: a client of gRPC counts a failed connect",
15515
+ source: "outbound.rs"
15516
+ },
15517
+ {
15518
+ id: "zt.connect-timeout",
15519
+ from: "connecting",
15520
+ to: "ended",
15521
+ on: "timer.connect",
15522
+ timer: "connect",
15523
+ emits: ["tx.app-close"],
15524
+ source: "proxy.rs:645, :695"
15525
+ },
15526
+ {
15527
+ id: "zt.ping",
15528
+ from: "ready",
15529
+ to: "ready",
15530
+ on: "timer.ping",
15531
+ timer: "ping",
15532
+ emits: ["tx.ping"],
15533
+ source: "h2.rs:39-46"
15534
+ },
15535
+ {
15536
+ id: "zt.pong",
15537
+ from: "ready",
15538
+ to: "ready",
15539
+ on: "rx.pong",
15540
+ note: "The PONG starts the sleep and the wait again",
15541
+ source: "h2.rs:46-56"
15542
+ },
15543
+ {
15544
+ id: "zt.pong-timeout",
15545
+ from: "ready",
15546
+ to: "ended",
15547
+ on: "timer.pong",
15548
+ timer: "pong",
15549
+ emits: ["tx.close", "tx.app-fin"],
15550
+ note: "The client drops the connection, and the server calls abrupt_shutdown(NO_ERROR). Each flow of the app on it gets a FIN",
15551
+ source: "client.rs:237-238, server.rs:160-168, copy.rs:176-183"
15552
+ },
15553
+ {
15554
+ id: "zt.reset",
15555
+ from: ["ready", "draining"],
15556
+ to: "ended",
15557
+ on: ["peer.rst", "peer.fin"],
15558
+ emits: ["tx.app-fin"],
15559
+ note: "A reset or an end of file of the HBONE socket ends each stream. The copy loop shuts down the socket of each app: a FIN, not a reset",
15560
+ source: "h2.rs:229-238, copy.rs:198-212"
15561
+ },
15562
+ {
15563
+ id: "zt.policy-denied",
15564
+ from: "ready",
15565
+ to: "ended",
15566
+ on: "local.policy-denied",
15567
+ emits: ["tx.close", "tx.app-fin"],
15568
+ note: "The server side checks each open inbound connection again at a change of a policy, and closes the ones that it now denies",
15569
+ source: "connection_manager.rs:364-376"
15570
+ },
15571
+ {
15572
+ id: "zt.release",
15573
+ from: "ready",
15574
+ to: "ended",
15575
+ on: "timer.release",
15576
+ timer: "release",
15577
+ guard: "no stream is open and no other flow holds the connection",
15578
+ emits: ["tx.close"],
15579
+ source: "pool.rs:142-146"
15580
+ },
15581
+ {
15582
+ id: "zt.stop",
15583
+ from: "ready",
15584
+ to: "draining",
15585
+ on: "app.stop",
15586
+ timer: "deadline",
15587
+ emits: ["tx.goaway"],
15588
+ note: "The accept loops stop, and the HBONE server sends GOAWAY",
15589
+ source: "server.rs:170-172, outbound.rs:121"
15590
+ },
15591
+ {
15592
+ id: "zt.drained",
15593
+ from: "draining",
15594
+ to: "ended",
15595
+ on: "local.stream-end",
15596
+ emits: ["tx.close"],
15597
+ source: "drain.rs:52-70"
15598
+ },
15599
+ {
15600
+ id: "zt.deadline",
15601
+ from: "draining",
15602
+ to: "ended",
15603
+ on: "timer.deadline",
15604
+ timer: "deadline",
15605
+ emits: ["tx.close", "tx.app-fin"],
15606
+ note: "ztunnel ends what is left itself, before the SIGKILL of the kubelet",
15607
+ source: "app.rs:391-399, pool.rs:345-347"
15608
+ },
15609
+ {
15610
+ id: "zt.del-workload",
15611
+ from: [
15612
+ "connecting",
15613
+ "ready",
15614
+ "draining"
15615
+ ],
15616
+ to: "ended",
15617
+ on: "local.del-workload",
15618
+ emits: ["tx.close", "tx.app-fin"],
15619
+ note: "The proxy of a deleted pod drains at once, with no deadline",
15620
+ source: "statemanager.rs:170-191, drain.rs:58-70"
15621
+ }
15622
+ ],
15623
+ over: {
15624
+ machine: "systems.machine.linux-tcp",
15625
+ states: {
15626
+ connecting: "SYN_SENT",
15627
+ ready: "ESTABLISHED",
15628
+ draining: "ESTABLISHED"
15629
+ },
15630
+ sets: {
15631
+ keepidle: {
15632
+ knob: "keepidle",
15633
+ unit: "s"
15634
+ },
15635
+ keepintvl: {
15636
+ knob: "keepintvl",
15637
+ unit: "s"
15638
+ },
15639
+ keepcnt: {
15640
+ knob: "keepcnt",
15641
+ unit: "count"
15642
+ }
15643
+ },
15644
+ ends: "peer.rst",
15645
+ note: "The HBONE socket in the network namespace of the client pod: a Linux TCP socket with the keepalive of ztunnel and no TCP_USER_TIMEOUT. A peer that is gone ends it at 180 + 9 × 180 = 1800 s, after the PING"
15646
+ }
15647
+ });
15648
+ //#endregion
15142
15649
  //#region src/rabbit/amqplib.ts
15143
15650
  const AT$1 = "amqplib 2.2.0 lib";
15144
15651
  /**
@@ -17217,9 +17724,10 @@ const MACHINES = byId([
17217
17724
  TRAEFIK_HTTP2,
17218
17725
  ISTIO_SIDECAR_OUTBOUND,
17219
17726
  ISTIO_SIDECAR_INBOUND,
17220
- PILOT_AGENT
17727
+ PILOT_AGENT,
17728
+ ZTUNNEL_HBONE
17221
17729
  ]);
17222
17730
  //#endregion
17223
- export { AMQPLIB, ATEN_DETECTOR, CADDY_HTTP2, DOCKER_PROXY_LINK, ENVOY_HTTP2, ETCD_SERVER, GO_TRANSPORT, GRPC_GO_SERVER, GRPC_JS, HIKARICP_PGJDBC, IOREDIS_SENTINEL, IOREDIS_STATUS, ISTIO_SIDECAR_INBOUND, ISTIO_SIDECAR_OUTBOUND, LINUX_TCP, MACHINES, MANIFESTATIONS, MONGODB_NODE, MONGOD_REPL, MONGOD_SESSION, NF_CONNTRACK_TCP, NGINX_GRPC, NODE_HTTP_AGENT, NODE_HTTP_SERVER, NODE_POSTGRES, NODE_TIMER_EARLY, PGBOUNCER_CLIENT, PGBOUNCER_SERVER, PGPOOL_SESSION, PILOT_AGENT, POSTGRES_SESSION, PROCEDURES_WS_CLIENT, PROCEDURES_WS_SERVER, RABBITMQ_CONNECTION, RA_MEMBER, REDIS_CLIENT, SENTINEL, SUPAVISOR_CLIENT, SUPAVISOR_SERVER, TOXIPROXY_LINK, TRAEFIK_HTTP2, UNDICI_CLIENT, UNDICI_RETRY, UNDICI_TICK_MS, goLateSeconds, goTimerLateness, istioSidecar, nodeEarlySeconds, nodeLateSeconds, nodeTimerLateness, undiciFastEarly, undiciFastLateness };
17731
+ export { AMQPLIB, ATEN_DETECTOR, CADDY_HTTP2, DOCKER_PROXY_LINK, ENVOY_HTTP2, ETCD_SERVER, GO_TRANSPORT, GRPC_GO_SERVER, GRPC_JS, HIKARICP_PGJDBC, IOREDIS_SENTINEL, IOREDIS_STATUS, ISTIO_SIDECAR_INBOUND, ISTIO_SIDECAR_OUTBOUND, LINUX_TCP, MACHINES, MANIFESTATIONS, MONGODB_NODE, MONGOD_REPL, MONGOD_SESSION, NF_CONNTRACK_TCP, NGINX_GRPC, NODE_HTTP_AGENT, NODE_HTTP_SERVER, NODE_POSTGRES, NODE_TIMER_EARLY, PGBOUNCER_CLIENT, PGBOUNCER_SERVER, PGPOOL_SESSION, PILOT_AGENT, POSTGRES_SESSION, PROCEDURES_WS_CLIENT, PROCEDURES_WS_SERVER, RABBITMQ_CONNECTION, RA_MEMBER, REDIS_CLIENT, SENTINEL, SUPAVISOR_CLIENT, SUPAVISOR_SERVER, TOXIPROXY_LINK, TRAEFIK_HTTP2, UNDICI_CLIENT, UNDICI_RETRY, UNDICI_TICK_MS, ZTUNNEL_HBONE, goLateSeconds, goTimerLateness, istioSidecar, nodeEarlySeconds, nodeLateSeconds, nodeTimerLateness, undiciFastEarly, undiciFastLateness };
17224
17732
 
17225
17733
  //# sourceMappingURL=index.js.map