@mark1russell7/machines 0.3.26 → 0.3.28

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,7 +65,7 @@ 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
+ | `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 | 15 implemented, 3 derived |
69
69
 
70
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.
71
71
 
@@ -115,6 +115,20 @@ A change to the version of a system changes its sources too. Each fact of the do
115
115
 
116
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.
117
117
 
118
+ ### 0.3.28
119
+
120
+ - **The release of the pool counts from the last checkout** (`ztunnel-hbone`). Each checkout of a connection, new or used again, puts it back in the pool with a new release timer (`pool.rs` of ztunnel 1.31.3, lines 150–176 and 338–341). The end of a stream does not start a timer.
121
+ - The timer `release` arms at the new event `local.checkout`, through the new transition `zt.checkout`. Before, it armed at the end of the last stream, and the cell of a gap cited that wrong fact.
122
+ - The release only drops the reference of the pool. HTTP/2 closes the connection when no reference and no stream is left (lines 142–146), thus an open flow keeps it.
123
+ - The cell T15.border-off.77 reads it. A fix of a fact is a PATCH.
124
+
125
+ ### 0.3.27
126
+
127
+ - **The SIGKILL at the end of the grace** (`ztunnel-hbone`). The document has the grace of the ztunnel pod as a knob (`grace`, 30 s from the chart) and a timer from SIGTERM.
128
+ - The drain ends at the first of the deadline and the grace. The transition `zt.deadline` has the guard `deadline < grace`, and the new transition `zt.killed` has the guard `grace <= deadline`.
129
+ - At the SIGKILL, the kernel closes each socket of ztunnel: a FIN, or a reset when bytes are unread. The source is the kubelet and the CRI of Kubernetes v1.37.0.
130
+ - The cells T15.border-off.85 and .86 read both timers. A new knob and a new timer are a feature, thus the version is a PATCH before 1.0.0.
131
+
118
132
  ### 0.3.26
119
133
 
120
134
  - **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.
package/build/index.d.ts CHANGED
@@ -522,8 +522,11 @@ export declare const DOCKER_PROXY_LINK: Machine;
522
522
  * 30 s later.
523
523
  *
524
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.
525
+ * gets a FIN. The release of the pool closes a connection with no stream, 5 min after its last
526
+ * checkout. No timer closes a connection with an open stream, or an old one.
527
+ *
528
+ * At SIGTERM, ztunnel sends GOAWAY, and it ends what is left at its deadline of 25 s. A deadline longer than the grace of 30 s does not
529
+ * come. The kubelet sends SIGKILL to ztunnel at the end of the grace, and the kernel closes each socket.
527
530
  */
528
531
  export declare const ZTUNNEL_HBONE: Machine;
529
532
  //#endregion
package/build/index.js CHANGED
@@ -15153,8 +15153,11 @@ const I = "istio 1.31.3";
15153
15153
  * 30 s later.
15154
15154
  *
15155
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.
15156
+ * gets a FIN. The release of the pool closes a connection with no stream, 5 min after its last
15157
+ * checkout. No timer closes a connection with an open stream, or an old one.
15158
+ *
15159
+ * At SIGTERM, ztunnel sends GOAWAY, and it ends what is left at its deadline of 25 s. A deadline longer than the grace of 30 s does not
15160
+ * come. The kubelet sends SIGKILL to ztunnel at the end of the grace, and the kernel closes each socket.
15158
15161
  */
15159
15162
  const ZTUNNEL_HBONE = machineSchema.parse({
15160
15163
  format: "mark1russell7.machine/1",
@@ -15178,7 +15181,7 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15178
15181
  rung: "implemented"
15179
15182
  },
15180
15183
  {
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`,
15184
+ ref: `${Z} src/config.rs:75, :105, :795 and src/proxy/pool.rs:142-176, :338-341 POOL_UNUSED_RELEASE_TIMEOUT is 5 min. Each checkout of a connection, new or used again, puts it back in the pool with a new release timer: the timer counts from the last checkout, the start of the last flow. A release does not close the connection: HTTP/2 closes it when no reference and no stream is left`,
15182
15185
  rung: "implemented"
15183
15186
  },
15184
15187
  {
@@ -15229,6 +15232,10 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15229
15232
  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
15233
  rung: "implemented"
15231
15234
  },
15235
+ {
15236
+ ref: `${I} manifests/charts/ztunnel/values.yaml:102 and templates/daemonset.yaml:215 the grace of the ztunnel pod is 30 s. kubernetes v1.37.0 pkg/kubelet/kuberuntime/kuberuntime_container.go:864-915, :1424-1427 the kubelet stops the container with that grace, and staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto:69-72 the runtime kills it at the end of the grace`,
15237
+ rung: "implemented"
15238
+ },
15232
15239
  {
15233
15240
  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
15241
  rung: "implemented"
@@ -15265,6 +15272,10 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15265
15272
  kind: "local",
15266
15273
  note: "The connect to 15008 fails: a reset, a refusal or a failed handshake"
15267
15274
  },
15275
+ "local.checkout": {
15276
+ kind: "local",
15277
+ note: "A new flow of an app takes the connection from the pool: the first flow, or each later flow to the same key"
15278
+ },
15268
15279
  "local.stream-end": {
15269
15280
  kind: "local",
15270
15281
  note: "The last stream on the connection ends"
@@ -15307,12 +15318,16 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15307
15318
  },
15308
15319
  "timer.release": {
15309
15320
  kind: "timer",
15310
- note: "No stream on the connection for the unused release timeout"
15321
+ note: "No checkout of the connection for the unused release timeout"
15311
15322
  },
15312
15323
  "timer.deadline": {
15313
15324
  kind: "timer",
15314
15325
  note: "The deadline of the drain after SIGTERM"
15315
15326
  },
15327
+ "timer.grace": {
15328
+ kind: "timer",
15329
+ note: "The end of the grace of the pod after SIGTERM: the kubelet kills ztunnel"
15330
+ },
15316
15331
  "tx.ping": {
15317
15332
  kind: "tx",
15318
15333
  note: "A PING of HTTP/2"
@@ -15370,6 +15385,13 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15370
15385
  default: 25,
15371
15386
  note: "config.rs:810-827: unset, thus the grace of 30 s of the chart less 5 s"
15372
15387
  },
15388
+ grace: {
15389
+ key: "terminationGracePeriodSeconds",
15390
+ scope: "pod",
15391
+ unit: "s",
15392
+ default: 30,
15393
+ note: "values.yaml:102 of the chart of ztunnel"
15394
+ },
15373
15395
  keepidle: {
15374
15396
  key: "the TCP keepalive idle of ztunnel",
15375
15397
  scope: "process",
@@ -15455,10 +15477,9 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15455
15477
  knob: "slack",
15456
15478
  unit: "s"
15457
15479
  },
15458
- arms: ["local.stream-end"],
15459
- cancels: ["local.accept"],
15480
+ arms: ["local.checkout"],
15460
15481
  fires: "timer.release",
15461
- note: "pool.rs:142-146: from the end of the last stream"
15482
+ note: "pool.rs:150-176, :338-341: from the last checkout. Each checkout starts a new timer, and the end of a stream does not start one"
15462
15483
  },
15463
15484
  deadline: {
15464
15485
  duration: {
@@ -15472,6 +15493,19 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15472
15493
  arms: ["app.stop"],
15473
15494
  fires: "timer.deadline",
15474
15495
  note: "app.rs:391-399: from SIGTERM"
15496
+ },
15497
+ grace: {
15498
+ duration: {
15499
+ knob: "grace",
15500
+ unit: "s"
15501
+ },
15502
+ lateness: {
15503
+ knob: "slack",
15504
+ unit: "s"
15505
+ },
15506
+ arms: ["app.stop"],
15507
+ fires: "timer.grace",
15508
+ note: "kuberuntime_container.go:864-915 and api.proto:69-72: the grace of the pod from SIGTERM, then the kill"
15475
15509
  }
15476
15510
  },
15477
15511
  realizes: {
@@ -15523,6 +15557,15 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15523
15557
  emits: ["tx.app-close"],
15524
15558
  source: "proxy.rs:645, :695"
15525
15559
  },
15560
+ {
15561
+ id: "zt.checkout",
15562
+ from: "ready",
15563
+ to: "ready",
15564
+ on: "local.checkout",
15565
+ timer: "release",
15566
+ note: "A new flow takes the connection as a new stream, and the pool starts a new release timer",
15567
+ source: "pool.rs:150-176, :338-341"
15568
+ },
15526
15569
  {
15527
15570
  id: "zt.ping",
15528
15571
  from: "ready",
@@ -15576,7 +15619,8 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15576
15619
  timer: "release",
15577
15620
  guard: "no stream is open and no other flow holds the connection",
15578
15621
  emits: ["tx.close"],
15579
- source: "pool.rs:142-146"
15622
+ note: "The pool drops its reference, and HTTP/2 closes the connection when no stream is left. Thus a flow that is open at the timer keeps the connection",
15623
+ source: "pool.rs:142-176, :338-341"
15580
15624
  },
15581
15625
  {
15582
15626
  id: "zt.stop",
@@ -15602,10 +15646,22 @@ const ZTUNNEL_HBONE = machineSchema.parse({
15602
15646
  to: "ended",
15603
15647
  on: "timer.deadline",
15604
15648
  timer: "deadline",
15649
+ guard: "deadline < grace",
15605
15650
  emits: ["tx.close", "tx.app-fin"],
15606
15651
  note: "ztunnel ends what is left itself, before the SIGKILL of the kubelet",
15607
15652
  source: "app.rs:391-399, pool.rs:345-347"
15608
15653
  },
15654
+ {
15655
+ id: "zt.killed",
15656
+ from: "draining",
15657
+ to: "ended",
15658
+ on: "timer.grace",
15659
+ timer: "grace",
15660
+ guard: "grace <= deadline",
15661
+ emits: ["tx.app-fin"],
15662
+ note: "The kubelet kills ztunnel at the end of the grace, before its deadline. The kernel closes each socket: a FIN, or a reset when bytes are unread",
15663
+ source: "kuberuntime_container.go:864-915, api.proto:69-72, tcp.c:2781-2807"
15664
+ },
15609
15665
  {
15610
15666
  id: "zt.del-workload",
15611
15667
  from: [