@mark1russell7/machines 0.3.9 → 0.3.11
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 +15 -1
- package/build/index.d.ts +33 -0
- package/build/index.js +782 -3
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -7824,6 +7824,10 @@ const PGBOUNCER_SERVER = machineSchema.parse({
|
|
|
7824
7824
|
ref: `${PB} src/janitor.c:558-570 the janitor closes a server in SV_LOGIN that is older than server_connect_timeout, from its launch: 'connect timeout'`,
|
|
7825
7825
|
rung: "implemented"
|
|
7826
7826
|
},
|
|
7827
|
+
{
|
|
7828
|
+
ref: "run 39160356281 of mark1russell7/systems: with server_connect_timeout 128 s, the connect timer closed the socket 127.998993 s after its SYN in 1 of 11 runs, 1.007 ms before 128 s. libevent 2.1 counts a timeout from its cached time of the pass (event.c event_add_nolock, gettime with tv_cache)",
|
|
7829
|
+
rung: "observed"
|
|
7830
|
+
},
|
|
7827
7831
|
{
|
|
7828
7832
|
ref: `${PB} src/objects.c:1385-1393, :1246-1248 a server in a login that closes marks the pool as failing, with the reason. A login that ends clears it`,
|
|
7829
7833
|
rung: "implemented"
|
|
@@ -8044,6 +8048,10 @@ const PGBOUNCER_SERVER = machineSchema.parse({
|
|
|
8044
8048
|
knob: "slack",
|
|
8045
8049
|
unit: "ms"
|
|
8046
8050
|
},
|
|
8051
|
+
early: {
|
|
8052
|
+
knob: "slack",
|
|
8053
|
+
unit: "ms"
|
|
8054
|
+
},
|
|
8047
8055
|
arms: ["enter:connecting"],
|
|
8048
8056
|
cancels: [
|
|
8049
8057
|
"socket.connect",
|
|
@@ -8051,7 +8059,7 @@ const PGBOUNCER_SERVER = machineSchema.parse({
|
|
|
8051
8059
|
"peer.rst"
|
|
8052
8060
|
],
|
|
8053
8061
|
fires: "timer.connect-timeout",
|
|
8054
|
-
note: "src/objects.c:1640-1641, src/sbuf.c:163-203: a timeout of libevent on the wait for EV_WRITE, in whole seconds. Which clock libevent reads is an assumption of this document: the monotonic one"
|
|
8062
|
+
note: "src/objects.c:1640-1641, src/sbuf.c:163-203: a timeout of libevent on the wait for EV_WRITE, in whole seconds. Which clock libevent reads is an assumption of this document: the monotonic one. libevent counts the timeout from the time that it caches for the callbacks of one pass of its loop, thus from up to one pass before the connect: the timer can fire up to that pass early"
|
|
8055
8063
|
},
|
|
8056
8064
|
login_timeout: {
|
|
8057
8065
|
duration: {
|
|
@@ -9592,6 +9600,775 @@ const POSTGRES_SESSION = machineSchema.parse({
|
|
|
9592
9600
|
}
|
|
9593
9601
|
});
|
|
9594
9602
|
//#endregion
|
|
9603
|
+
//#region src/pg/supavisor-client.ts
|
|
9604
|
+
const SV = "v2.9.13";
|
|
9605
|
+
/**
|
|
9606
|
+
* This document is Supavisor 2.9.13 in transaction mode, for one client connection. It gives the
|
|
9607
|
+
* states of the client handler (a gen_statem) from the accept to the close, and the timers that act
|
|
9608
|
+
* on it.
|
|
9609
|
+
*
|
|
9610
|
+
* Between two transactions the client holds no server connection. A message of the client checks one
|
|
9611
|
+
* out of the pool of the tenant, and ReadyForQuery of the server checks it in. Thus a fault of the
|
|
9612
|
+
* server reaches an idle client only through the pool. Its next query meets the pool, or the pool
|
|
9613
|
+
* shuts down and closes it, as after 57P03 at a login of the pool.
|
|
9614
|
+
*
|
|
9615
|
+
* At the defaults the handler writes a heartbeat to an idle client each 60 s: a ParameterStatus of
|
|
9616
|
+
* application_name. A failed write ends the client. client_idle_timeout does not end a session in
|
|
9617
|
+
* 2.9.13: its timer fires an event that no clause handles. Each client socket has SO_KEEPALIVE.
|
|
9618
|
+
*/
|
|
9619
|
+
const SUPAVISOR_CLIENT = machineSchema.parse({
|
|
9620
|
+
format: "mark1russell7.machine/1",
|
|
9621
|
+
id: "supavisor-client",
|
|
9622
|
+
title: "Supavisor 2.9.13 in transaction mode: one client connection, its checkout of a server and its heartbeat",
|
|
9623
|
+
layer: "proxy",
|
|
9624
|
+
version: "2.9.13",
|
|
9625
|
+
conditions: {
|
|
9626
|
+
supavisor: "2.9.13",
|
|
9627
|
+
mode: "transaction, the mode of the user of the tenant",
|
|
9628
|
+
client: "a PostgreSQL client over TCP, with no TLS, as the user <db_user>.<tenant>",
|
|
9629
|
+
tenant: "one tenant with one user and one server, client_heartbeat_interval 60 s and client_idle_timeout 0 at the defaults"
|
|
9630
|
+
},
|
|
9631
|
+
sources: [
|
|
9632
|
+
{
|
|
9633
|
+
ref: `${SV} lib/supavisor/tenants/tenant.ex:28-32 the defaults of a tenant: default_pool_size 15, default_max_clients 1000, client_idle_timeout 0, client_heartbeat_interval 60 s`,
|
|
9634
|
+
rung: "implemented"
|
|
9635
|
+
},
|
|
9636
|
+
{
|
|
9637
|
+
ref: `${SV} lib/supavisor/tenants/user.ex:16-19 a user: mode_type transaction or session, pool_size, pool_checkout_timeout 60_000 ms, max_clients`,
|
|
9638
|
+
rung: "implemented"
|
|
9639
|
+
},
|
|
9640
|
+
{
|
|
9641
|
+
ref: `${SV} lib/supavisor/application.ex:71-83 each listener is ranch_tcp with keepalive true: each client socket has SO_KEEPALIVE`,
|
|
9642
|
+
rung: "implemented"
|
|
9643
|
+
},
|
|
9644
|
+
{
|
|
9645
|
+
ref: `${SV} lib/supavisor/client_handler.ex:21-23, :123, :198 a state_timeout of 5_000 ms in :handshake, and 2_500 ms for a TLS handshake`,
|
|
9646
|
+
rung: "implemented"
|
|
9647
|
+
},
|
|
9648
|
+
{
|
|
9649
|
+
ref: `${SV} lib/supavisor/client_handler.ex:315, :600, :627 an event timeout of 15_000 ms on each wait of the authentication`,
|
|
9650
|
+
rung: "implemented"
|
|
9651
|
+
},
|
|
9652
|
+
{
|
|
9653
|
+
ref: `${SV} lib/supavisor/client_handler.ex:901-911 handle_actions arms the event timeout of client_idle_timeout, then the event timeout of the heartbeat. A gen_statem has one event timeout: the second action replaces the first`,
|
|
9654
|
+
rung: "implemented"
|
|
9655
|
+
},
|
|
9656
|
+
{
|
|
9657
|
+
ref: `${SV} lib/supavisor/client_handler.ex:430-433, :734-744 the timer of client_idle_timeout fires :idle_timeout, but the clause matches :idle_terminate. The catch-all clause logs 'Undefined msg' and keeps the state`,
|
|
9658
|
+
rung: "implemented"
|
|
9659
|
+
},
|
|
9660
|
+
{
|
|
9661
|
+
ref: `${SV} lib/supavisor/client_handler.ex:435-445, :1006 the heartbeat writes the ParameterStatus application_name each client_heartbeat_interval, and a failed write ends the client`,
|
|
9662
|
+
rung: "implemented"
|
|
9663
|
+
},
|
|
9664
|
+
{
|
|
9665
|
+
ref: `${SV} lib/supavisor/client_handler.ex:705-716, :836-870, :966-971 a message in :idle checks out a server: poolboy with pool_checkout_timeout, then DbHandler.checkout with its call timeout of 15 s (lib/supavisor/db_handler.ex:101-110). A server connection that connects postpones the call (db_handler.ex:500-516)`,
|
|
9666
|
+
rung: "implemented"
|
|
9667
|
+
},
|
|
9668
|
+
{
|
|
9669
|
+
ref: `${SV} lib/supavisor/errors/checkout_timeout_error.ex and lib/supavisor/error.ex:83-84 a checkout timeout reaches the client as FATAL XX000 'unable to check out connection from the pool after <ms>ms in Transaction mode'`,
|
|
9670
|
+
rung: "implemented"
|
|
9671
|
+
},
|
|
9672
|
+
{
|
|
9673
|
+
ref: `${SV} lib/supavisor/client_handler.ex:523-537, :872-876 ReadyForQuery of the server: the client checks the server in and goes to :idle, and handle_actions arms the heartbeat`,
|
|
9674
|
+
rung: "implemented"
|
|
9675
|
+
},
|
|
9676
|
+
{
|
|
9677
|
+
ref: `${SV} lib/supavisor/client_handler.ex:697-703 a Sync of the client in :busy goes to the server, and handle_actions arms the heartbeat in :busy too`,
|
|
9678
|
+
rung: "implemented"
|
|
9679
|
+
},
|
|
9680
|
+
{
|
|
9681
|
+
ref: `${SV} lib/supavisor/client_handler.ex:90, :485-497 and lib/supavisor/errors/db_handler_exited_error.ex:15-25 the handler traps exits. The exit of its server connection ends the client: after a fatal error of the server that the client got, or with no ErrorResponse for the close of the server (db_termination)`,
|
|
9682
|
+
rung: "implemented"
|
|
9683
|
+
},
|
|
9684
|
+
{
|
|
9685
|
+
ref: `${SV} lib/supavisor/client_handler.ex:556-566, :1016-1022 a close or an error of the client socket ends the client`,
|
|
9686
|
+
rung: "implemented"
|
|
9687
|
+
},
|
|
9688
|
+
{
|
|
9689
|
+
ref: `${SV} lib/supavisor/client_handler.ex:545-556 and lib/supavisor/protocol/server.ex:183-190 the graceful shutdown of the pool: a client outside a transaction gets FATAL 57P01 'terminating connection due to administrator command' and its close, and a client in a transaction waits for its end (postpone)`,
|
|
9690
|
+
rung: "implemented"
|
|
9691
|
+
}
|
|
9692
|
+
],
|
|
9693
|
+
states: {
|
|
9694
|
+
"[none]": {
|
|
9695
|
+
initial: true,
|
|
9696
|
+
pseudo: true,
|
|
9697
|
+
note: "Before ranch accepts the connection"
|
|
9698
|
+
},
|
|
9699
|
+
handshake: { note: "The startup packet, with a state timeout of 5 s" },
|
|
9700
|
+
auth: { note: "The authentication of the client by the password of its user, with a timeout of 15 s on each wait" },
|
|
9701
|
+
idle: { note: "Between two transactions: no server connection. The heartbeat runs" },
|
|
9702
|
+
checkout: { note: "A message of the client waits for a server connection of the pool. The handler does nothing else in this wait" },
|
|
9703
|
+
busy: { note: "A transaction: the client holds a server connection, and the server connection sends the replies to the client" },
|
|
9704
|
+
ended: {
|
|
9705
|
+
final: true,
|
|
9706
|
+
note: "The handler closed the client, with an ErrorResponse when it has one"
|
|
9707
|
+
}
|
|
9708
|
+
},
|
|
9709
|
+
events: {
|
|
9710
|
+
"local.accept": {
|
|
9711
|
+
kind: "local",
|
|
9712
|
+
note: "ranch accepts the TCP connection"
|
|
9713
|
+
},
|
|
9714
|
+
"rx.startup": {
|
|
9715
|
+
kind: "rx",
|
|
9716
|
+
note: "The startup packet of the client"
|
|
9717
|
+
},
|
|
9718
|
+
"local.authenticated": {
|
|
9719
|
+
kind: "local",
|
|
9720
|
+
note: "The password of the client matches, and the pool of the tenant serves"
|
|
9721
|
+
},
|
|
9722
|
+
"rx.query": {
|
|
9723
|
+
kind: "rx",
|
|
9724
|
+
note: "A message of the client between two transactions"
|
|
9725
|
+
},
|
|
9726
|
+
"local.checked-out": {
|
|
9727
|
+
kind: "local",
|
|
9728
|
+
note: "The pool gives a server connection, and it takes the client"
|
|
9729
|
+
},
|
|
9730
|
+
"server.ready": {
|
|
9731
|
+
kind: "local",
|
|
9732
|
+
note: "The server connection reads ReadyForQuery: the end of the transaction"
|
|
9733
|
+
},
|
|
9734
|
+
"server.exit": {
|
|
9735
|
+
kind: "peer",
|
|
9736
|
+
note: "The server connection of the client ends: the server closed it, reset it, or sent a fatal error"
|
|
9737
|
+
},
|
|
9738
|
+
"client.gone": {
|
|
9739
|
+
kind: "peer",
|
|
9740
|
+
note: "The client closes its connection, or a read or a write of its socket fails"
|
|
9741
|
+
},
|
|
9742
|
+
"pool.shutdown": {
|
|
9743
|
+
kind: "local",
|
|
9744
|
+
note: "The pool of the tenant shuts down gracefully, for example after 57P03 at a login of the pool"
|
|
9745
|
+
},
|
|
9746
|
+
"timer.handshake": {
|
|
9747
|
+
kind: "timer",
|
|
9748
|
+
note: "The state timeout of the handshake"
|
|
9749
|
+
},
|
|
9750
|
+
"timer.auth": {
|
|
9751
|
+
kind: "timer",
|
|
9752
|
+
note: "The timeout of a wait of the authentication"
|
|
9753
|
+
},
|
|
9754
|
+
"timer.heartbeat": {
|
|
9755
|
+
kind: "timer",
|
|
9756
|
+
note: "client_heartbeat_interval with no event of the handler"
|
|
9757
|
+
},
|
|
9758
|
+
"timer.checkout": {
|
|
9759
|
+
kind: "timer",
|
|
9760
|
+
note: "The pool gives no server connection in pool_checkout_timeout, or the server connection does not take the client in 15 s"
|
|
9761
|
+
},
|
|
9762
|
+
"tx.heartbeat": {
|
|
9763
|
+
kind: "tx",
|
|
9764
|
+
note: "The ParameterStatus application_name to the client"
|
|
9765
|
+
},
|
|
9766
|
+
"tx.error": {
|
|
9767
|
+
kind: "tx",
|
|
9768
|
+
note: "An ErrorResponse: FATAL with the SQLSTATE of the error, XX000 for an error of Supavisor"
|
|
9769
|
+
}
|
|
9770
|
+
},
|
|
9771
|
+
knobs: {
|
|
9772
|
+
client_heartbeat_interval: {
|
|
9773
|
+
key: "supavisor client_heartbeat_interval of the tenant",
|
|
9774
|
+
scope: "proxy",
|
|
9775
|
+
unit: "s",
|
|
9776
|
+
default: 60,
|
|
9777
|
+
off: 0,
|
|
9778
|
+
note: "lib/supavisor/tenants/tenant.ex:32"
|
|
9779
|
+
},
|
|
9780
|
+
client_idle_timeout: {
|
|
9781
|
+
key: "supavisor client_idle_timeout of the tenant",
|
|
9782
|
+
scope: "proxy",
|
|
9783
|
+
unit: "s",
|
|
9784
|
+
default: 0,
|
|
9785
|
+
off: 0,
|
|
9786
|
+
note: "lib/supavisor/tenants/tenant.ex:31. It ends no session in 2.9.13, thus this document gives it no timer. Its event timeout is armed only when the heartbeat is off, and it fires :idle_timeout, which goes to the catch-all clause (lib/supavisor/client_handler.ex:430-433, :734-744, :901-911)"
|
|
9787
|
+
},
|
|
9788
|
+
pool_checkout_timeout: {
|
|
9789
|
+
key: "supavisor pool_checkout_timeout of the user",
|
|
9790
|
+
scope: "proxy",
|
|
9791
|
+
unit: "ms",
|
|
9792
|
+
default: 6e4,
|
|
9793
|
+
note: "lib/supavisor/tenants/user.ex:18"
|
|
9794
|
+
},
|
|
9795
|
+
handshake: {
|
|
9796
|
+
key: "the state timeout of the handshake",
|
|
9797
|
+
scope: "process",
|
|
9798
|
+
unit: "ms",
|
|
9799
|
+
default: 5e3,
|
|
9800
|
+
note: "lib/supavisor/client_handler.ex:23: a constant of the source"
|
|
9801
|
+
},
|
|
9802
|
+
auth: {
|
|
9803
|
+
key: "the timeout of a wait of the authentication",
|
|
9804
|
+
scope: "process",
|
|
9805
|
+
unit: "ms",
|
|
9806
|
+
default: 15e3,
|
|
9807
|
+
note: "lib/supavisor/client_handler.ex:315: a constant of the source"
|
|
9808
|
+
},
|
|
9809
|
+
checkout_call: {
|
|
9810
|
+
key: "the call timeout of DbHandler.checkout",
|
|
9811
|
+
scope: "process",
|
|
9812
|
+
unit: "ms",
|
|
9813
|
+
default: 15e3,
|
|
9814
|
+
note: "lib/supavisor/db_handler.ex:106: a constant of the source"
|
|
9815
|
+
},
|
|
9816
|
+
slack: {
|
|
9817
|
+
key: "the lateness of the scheduler of the BEAM for one timer of a gen_statem",
|
|
9818
|
+
scope: "process",
|
|
9819
|
+
unit: "ms",
|
|
9820
|
+
default: 10,
|
|
9821
|
+
note: "An assumption of this document, not a value of Supavisor"
|
|
9822
|
+
}
|
|
9823
|
+
},
|
|
9824
|
+
timers: {
|
|
9825
|
+
handshake_timeout: {
|
|
9826
|
+
duration: {
|
|
9827
|
+
knob: "handshake",
|
|
9828
|
+
unit: "ms"
|
|
9829
|
+
},
|
|
9830
|
+
lateness: {
|
|
9831
|
+
knob: "slack",
|
|
9832
|
+
unit: "ms"
|
|
9833
|
+
},
|
|
9834
|
+
arms: ["enter:handshake"],
|
|
9835
|
+
cancels: ["rx.startup"],
|
|
9836
|
+
fires: "timer.handshake",
|
|
9837
|
+
note: "lib/supavisor/client_handler.ex:123, :198: a state timeout"
|
|
9838
|
+
},
|
|
9839
|
+
auth_timeout: {
|
|
9840
|
+
duration: {
|
|
9841
|
+
knob: "auth",
|
|
9842
|
+
unit: "ms"
|
|
9843
|
+
},
|
|
9844
|
+
lateness: {
|
|
9845
|
+
knob: "slack",
|
|
9846
|
+
unit: "ms"
|
|
9847
|
+
},
|
|
9848
|
+
arms: ["enter:auth"],
|
|
9849
|
+
cancels: ["local.authenticated"],
|
|
9850
|
+
fires: "timer.auth",
|
|
9851
|
+
note: "lib/supavisor/client_handler.ex:315, :600, :627"
|
|
9852
|
+
},
|
|
9853
|
+
heartbeat: {
|
|
9854
|
+
duration: {
|
|
9855
|
+
knob: "client_heartbeat_interval",
|
|
9856
|
+
unit: "s"
|
|
9857
|
+
},
|
|
9858
|
+
lateness: {
|
|
9859
|
+
knob: "slack",
|
|
9860
|
+
unit: "ms"
|
|
9861
|
+
},
|
|
9862
|
+
arms: ["enter:idle"],
|
|
9863
|
+
cancels: ["rx.query"],
|
|
9864
|
+
fires: "timer.heartbeat",
|
|
9865
|
+
backoff: { resets: ["enter:idle"] },
|
|
9866
|
+
note: "lib/supavisor/client_handler.ex:435-445, :901-911: an event timeout, thus any event of the handler cancels it. Each heartbeat arms the next, the same each time. A Sync in a transaction arms it too"
|
|
9867
|
+
},
|
|
9868
|
+
checkout_timeout: {
|
|
9869
|
+
duration: {
|
|
9870
|
+
knob: "checkout_call",
|
|
9871
|
+
unit: "ms"
|
|
9872
|
+
},
|
|
9873
|
+
lateness: {
|
|
9874
|
+
knob: "slack",
|
|
9875
|
+
unit: "ms"
|
|
9876
|
+
},
|
|
9877
|
+
arms: ["enter:checkout"],
|
|
9878
|
+
cancels: ["local.checked-out"],
|
|
9879
|
+
fires: "timer.checkout",
|
|
9880
|
+
note: "lib/supavisor/client_handler.ex:848-851, lib/supavisor/db_handler.ex:101-110: poolboy gives a worker of the pool at once while the pool has one, and the call to that worker waits up to 15 s while it connects. With each worker checked out, poolboy waits up to pool_checkout_timeout"
|
|
9881
|
+
}
|
|
9882
|
+
},
|
|
9883
|
+
transitions: [
|
|
9884
|
+
{
|
|
9885
|
+
id: "scl.accept",
|
|
9886
|
+
from: "[none]",
|
|
9887
|
+
to: "handshake",
|
|
9888
|
+
on: "local.accept",
|
|
9889
|
+
timer: "handshake_timeout",
|
|
9890
|
+
source: "lib/supavisor/client_handler.ex:89-125"
|
|
9891
|
+
},
|
|
9892
|
+
{
|
|
9893
|
+
id: "scl.startup",
|
|
9894
|
+
from: "handshake",
|
|
9895
|
+
to: "auth",
|
|
9896
|
+
on: "rx.startup",
|
|
9897
|
+
timer: "auth_timeout",
|
|
9898
|
+
source: "lib/supavisor/client_handler.ex:211-315"
|
|
9899
|
+
},
|
|
9900
|
+
{
|
|
9901
|
+
id: "scl.handshake-timed-out",
|
|
9902
|
+
from: "handshake",
|
|
9903
|
+
to: "ended",
|
|
9904
|
+
on: "timer.handshake",
|
|
9905
|
+
source: "lib/supavisor/client_handler.ex:198-200"
|
|
9906
|
+
},
|
|
9907
|
+
{
|
|
9908
|
+
id: "scl.auth-timed-out",
|
|
9909
|
+
from: "auth",
|
|
9910
|
+
to: "ended",
|
|
9911
|
+
on: "timer.auth",
|
|
9912
|
+
errno: "XX000",
|
|
9913
|
+
emits: ["tx.error"],
|
|
9914
|
+
source: "lib/supavisor/client_handler.ex:627-635"
|
|
9915
|
+
},
|
|
9916
|
+
{
|
|
9917
|
+
id: "scl.authenticated",
|
|
9918
|
+
from: "auth",
|
|
9919
|
+
to: "idle",
|
|
9920
|
+
on: "local.authenticated",
|
|
9921
|
+
timer: "heartbeat",
|
|
9922
|
+
source: "lib/supavisor/client_handler.ex:340-410"
|
|
9923
|
+
},
|
|
9924
|
+
{
|
|
9925
|
+
id: "scl.heartbeat",
|
|
9926
|
+
from: ["idle", "busy"],
|
|
9927
|
+
to: "idle",
|
|
9928
|
+
on: "timer.heartbeat",
|
|
9929
|
+
guard: "the write of the heartbeat succeeds",
|
|
9930
|
+
timer: "heartbeat",
|
|
9931
|
+
emits: ["tx.heartbeat"],
|
|
9932
|
+
source: "lib/supavisor/client_handler.ex:435-440"
|
|
9933
|
+
},
|
|
9934
|
+
{
|
|
9935
|
+
id: "scl.query",
|
|
9936
|
+
from: "idle",
|
|
9937
|
+
to: "checkout",
|
|
9938
|
+
on: "rx.query",
|
|
9939
|
+
timer: "checkout_timeout",
|
|
9940
|
+
source: "lib/supavisor/client_handler.ex:705-716"
|
|
9941
|
+
},
|
|
9942
|
+
{
|
|
9943
|
+
id: "scl.checked-out",
|
|
9944
|
+
from: "checkout",
|
|
9945
|
+
to: "busy",
|
|
9946
|
+
on: "local.checked-out",
|
|
9947
|
+
source: "lib/supavisor/client_handler.ex:708-711, :851-856"
|
|
9948
|
+
},
|
|
9949
|
+
{
|
|
9950
|
+
id: "scl.checkout-timed-out",
|
|
9951
|
+
from: "checkout",
|
|
9952
|
+
to: "ended",
|
|
9953
|
+
on: "timer.checkout",
|
|
9954
|
+
errno: "XX000",
|
|
9955
|
+
emits: ["tx.error"],
|
|
9956
|
+
note: "FATAL 'unable to check out connection from the pool after <ms>ms in Transaction mode'",
|
|
9957
|
+
source: "lib/supavisor/client_handler.ex:712-714, :966-971, lib/supavisor/errors/checkout_timeout_error.ex"
|
|
9958
|
+
},
|
|
9959
|
+
{
|
|
9960
|
+
id: "scl.ready",
|
|
9961
|
+
from: "busy",
|
|
9962
|
+
to: "idle",
|
|
9963
|
+
on: "server.ready",
|
|
9964
|
+
timer: "heartbeat",
|
|
9965
|
+
source: "lib/supavisor/client_handler.ex:523-537"
|
|
9966
|
+
},
|
|
9967
|
+
{
|
|
9968
|
+
id: "scl.server-gone",
|
|
9969
|
+
from: "busy",
|
|
9970
|
+
to: "ended",
|
|
9971
|
+
on: "server.exit",
|
|
9972
|
+
note: "A fatal error of the server reaches the client first. A close or a reset of the server has no ErrorResponse: the client gets the close only",
|
|
9973
|
+
source: "lib/supavisor/client_handler.ex:485-497, lib/supavisor/errors/db_handler_exited_error.ex:15-25"
|
|
9974
|
+
},
|
|
9975
|
+
{
|
|
9976
|
+
id: "scl.gone",
|
|
9977
|
+
from: [
|
|
9978
|
+
"handshake",
|
|
9979
|
+
"auth",
|
|
9980
|
+
"idle",
|
|
9981
|
+
"checkout",
|
|
9982
|
+
"busy"
|
|
9983
|
+
],
|
|
9984
|
+
to: "ended",
|
|
9985
|
+
on: "client.gone",
|
|
9986
|
+
source: "lib/supavisor/client_handler.ex:556-566, :1016-1022"
|
|
9987
|
+
},
|
|
9988
|
+
{
|
|
9989
|
+
id: "scl.pool-shutdown",
|
|
9990
|
+
from: "idle",
|
|
9991
|
+
to: "ended",
|
|
9992
|
+
on: "pool.shutdown",
|
|
9993
|
+
errno: "57P01",
|
|
9994
|
+
emits: ["tx.error"],
|
|
9995
|
+
note: "FATAL 57P01 'terminating connection due to administrator command', then the close. A client in a transaction gets it at the end of the transaction",
|
|
9996
|
+
source: "lib/supavisor/client_handler.ex:545-556, lib/supavisor/protocol/server.ex:183-190"
|
|
9997
|
+
}
|
|
9998
|
+
],
|
|
9999
|
+
over: {
|
|
10000
|
+
machine: "systems.machine.linux-tcp",
|
|
10001
|
+
states: {
|
|
10002
|
+
handshake: "ESTABLISHED",
|
|
10003
|
+
auth: "ESTABLISHED",
|
|
10004
|
+
idle: "ESTABLISHED",
|
|
10005
|
+
checkout: "ESTABLISHED",
|
|
10006
|
+
busy: "ESTABLISHED"
|
|
10007
|
+
},
|
|
10008
|
+
sets: {},
|
|
10009
|
+
ends: "client.gone",
|
|
10010
|
+
note: "The socket of the client. ranch sets SO_KEEPALIVE and no other keepalive option, thus the three keepalive sysctls of the namespace apply"
|
|
10011
|
+
}
|
|
10012
|
+
});
|
|
10013
|
+
//#endregion
|
|
10014
|
+
//#region src/pg/supavisor-server.ts
|
|
10015
|
+
/**
|
|
10016
|
+
* This document is Supavisor 2.9.13 in transaction mode, for one server connection of the pool of a
|
|
10017
|
+
* tenant. It is one DbHandler, a gen_statem, from its start by the pool to its end.
|
|
10018
|
+
*
|
|
10019
|
+
* The connect to the server has a timeout of 5 s, and the authentication 15 s. A failed connect ends the
|
|
10020
|
+
* DbHandler with FATAL 08006 'Failed to connect to database'. A client that waits for this connection gets
|
|
10021
|
+
* that error at once. The pool then starts a new DbHandler, which waits the rest of 2.5 s from the last
|
|
10022
|
+
* failure before it connects.
|
|
10023
|
+
*
|
|
10024
|
+
* The DbHandler reads its socket in each state. Thus a close or a reset of the server ends it at once, idle
|
|
10025
|
+
* or with a client. A client that holds the connection then gets the close. The server socket has
|
|
10026
|
+
* TCP_NODELAY and no keepalive, and no timer of Supavisor bounds a query.
|
|
10027
|
+
*/
|
|
10028
|
+
const SUPAVISOR_SERVER = machineSchema.parse({
|
|
10029
|
+
format: "mark1russell7.machine/1",
|
|
10030
|
+
id: "supavisor-server",
|
|
10031
|
+
title: "Supavisor 2.9.13 in transaction mode: one server connection of the pool of a tenant",
|
|
10032
|
+
layer: "proxy",
|
|
10033
|
+
version: "2.9.13",
|
|
10034
|
+
conditions: {
|
|
10035
|
+
supavisor: "2.9.13",
|
|
10036
|
+
mode: "transaction, the mode of the user of the tenant",
|
|
10037
|
+
server: "one PostgreSQL server over TCP, with no TLS, at the address of the tenant"
|
|
10038
|
+
},
|
|
10039
|
+
sources: [
|
|
10040
|
+
{
|
|
10041
|
+
ref: `${SV} lib/supavisor/tenant_supervisor.ex:72-80 the pool of a tenant: poolboy, worker DbHandler, size min_size, max_overflow pool_size, lifo, an overflow worker stops after 5 min idle`,
|
|
10042
|
+
rung: "implemented"
|
|
10043
|
+
},
|
|
10044
|
+
{
|
|
10045
|
+
ref: `${SV} lib/supavisor/db_handler.ex:66, :205-224, :1111-1119 a new DbHandler waits the rest of 2.5 s from the last failed connect of its pool (connect_cooldown)`,
|
|
10046
|
+
rung: "implemented"
|
|
10047
|
+
},
|
|
10048
|
+
{
|
|
10049
|
+
ref: `${SV} lib/supavisor/db_handler.ex:226-289 the connect: gen_tcp with nodelay and no keepalive, and a timeout of 5_000 ms (1_000 ms in proxy mode). Then the startup message, and a state timeout of 15_000 ms on the authentication`,
|
|
10050
|
+
rung: "implemented"
|
|
10051
|
+
},
|
|
10052
|
+
{
|
|
10053
|
+
ref: `${SV} lib/supavisor/db_handler.ex:1072-1085, :292-321 a failed connect: the circuit breaker and the backoff of the pool record it, FATAL 08006 'Failed to connect to database', and the DbHandler goes to terminating_with_error, then stops`,
|
|
10054
|
+
rung: "implemented"
|
|
10055
|
+
},
|
|
10056
|
+
{
|
|
10057
|
+
ref: `${SV} lib/supavisor/db_handler.ex:480-516 a checkout in :idle or :busy links the client and gives it the socket. In another state the call waits (postpone), and in terminating_with_error it gets the error`,
|
|
10058
|
+
rung: "implemented"
|
|
10059
|
+
},
|
|
10060
|
+
{
|
|
10061
|
+
ref: `${SV} lib/supavisor/db_handler.ex:551-574 a close of the server socket: in the authentication a failed connect, else the DbHandler stops with db_termination`,
|
|
10062
|
+
rung: "implemented"
|
|
10063
|
+
},
|
|
10064
|
+
{
|
|
10065
|
+
ref: `${SV} lib/supavisor/db_handler.ex:575-585 the exit of the client that holds the connection: Terminate to the server, close, stop`,
|
|
10066
|
+
rung: "implemented"
|
|
10067
|
+
},
|
|
10068
|
+
{
|
|
10069
|
+
ref: `${SV} lib/supavisor/circuit_breaker.ex:28-35 100 failed connects of a tenant in 150 s block its new connections for 30 s`,
|
|
10070
|
+
rung: "implemented"
|
|
10071
|
+
},
|
|
10072
|
+
{
|
|
10073
|
+
ref: `${SV} lib/supavisor/db_handler.ex:69-76, :362-372, :297-301 an ErrorResponse at the authentication: 57P03 (the server shuts down) shuts the pool down gracefully, 3D000, 42501 and 22023 shut it down, and 28P01 and 28000 keep it`,
|
|
10074
|
+
rung: "implemented"
|
|
10075
|
+
},
|
|
10076
|
+
{
|
|
10077
|
+
ref: `${SV} lib/supavisor/manager.ex:107-118, lib/supavisor/client_handler.ex:545-556 the graceful shutdown of a pool: each client outside a transaction gets FATAL 57P01 'terminating connection due to administrator command' and its close. A client in a transaction gets it after the transaction`,
|
|
10078
|
+
rung: "implemented"
|
|
10079
|
+
},
|
|
10080
|
+
{
|
|
10081
|
+
ref: `${SV} run 39164922565 of mark1russell7/systems: the server stopped, and the next connect of the pool got 57P03 in 6 of 11 runs. Each idle client then got FATAL 57P01 and its close, 8 to 10 ms after the server closed its connections. In 5 runs the connect came after the server, and the pool stayed`,
|
|
10082
|
+
rung: "observed"
|
|
10083
|
+
}
|
|
10084
|
+
],
|
|
10085
|
+
states: {
|
|
10086
|
+
"[none]": {
|
|
10087
|
+
initial: true,
|
|
10088
|
+
pseudo: true,
|
|
10089
|
+
note: "The pool starts a DbHandler"
|
|
10090
|
+
},
|
|
10091
|
+
cooldown: { note: "The pool had a failed connect in the last 2.5 s: the DbHandler waits for the rest" },
|
|
10092
|
+
connecting: { note: "The TCP connect, with its timeout of 5 s" },
|
|
10093
|
+
authentication: { note: "The startup message and the authentication, with a state timeout of 15 s" },
|
|
10094
|
+
idle: { note: "In the pool, ready for a client. The DbHandler reads the socket" },
|
|
10095
|
+
busy: { note: "Checked out by a client for a transaction: the DbHandler sends each message of the server to the client" },
|
|
10096
|
+
ended: {
|
|
10097
|
+
final: true,
|
|
10098
|
+
note: "The DbHandler stopped, and the pool starts a new one"
|
|
10099
|
+
}
|
|
10100
|
+
},
|
|
10101
|
+
events: {
|
|
10102
|
+
"local.start": {
|
|
10103
|
+
kind: "local",
|
|
10104
|
+
note: "The pool starts the DbHandler"
|
|
10105
|
+
},
|
|
10106
|
+
"socket.connect": {
|
|
10107
|
+
kind: "local",
|
|
10108
|
+
note: "The TCP connect ends"
|
|
10109
|
+
},
|
|
10110
|
+
"rx.ready-for-query": {
|
|
10111
|
+
kind: "rx",
|
|
10112
|
+
note: "ReadyForQuery of the server: the end of the authentication or of a transaction"
|
|
10113
|
+
},
|
|
10114
|
+
"local.checkout": {
|
|
10115
|
+
kind: "local",
|
|
10116
|
+
note: "A client checks the connection out of the pool"
|
|
10117
|
+
},
|
|
10118
|
+
"client.gone": {
|
|
10119
|
+
kind: "peer",
|
|
10120
|
+
note: "The client that holds the connection ends"
|
|
10121
|
+
},
|
|
10122
|
+
"peer.fin": {
|
|
10123
|
+
kind: "peer",
|
|
10124
|
+
note: "The server closes the connection"
|
|
10125
|
+
},
|
|
10126
|
+
"peer.rst": {
|
|
10127
|
+
kind: "peer",
|
|
10128
|
+
note: "A reset of the connection of the server"
|
|
10129
|
+
},
|
|
10130
|
+
"socket.error": {
|
|
10131
|
+
kind: "local",
|
|
10132
|
+
note: "The socket of the server fails with its own error"
|
|
10133
|
+
},
|
|
10134
|
+
"rx.shutting-down": {
|
|
10135
|
+
kind: "rx",
|
|
10136
|
+
note: "An ErrorResponse 57P03 at the authentication: the server shuts down"
|
|
10137
|
+
},
|
|
10138
|
+
"timer.cooldown": {
|
|
10139
|
+
kind: "timer",
|
|
10140
|
+
note: "The rest of 2.5 s from the last failed connect of the pool"
|
|
10141
|
+
},
|
|
10142
|
+
"timer.connect": {
|
|
10143
|
+
kind: "timer",
|
|
10144
|
+
note: "The timeout of gen_tcp.connect"
|
|
10145
|
+
},
|
|
10146
|
+
"timer.auth": {
|
|
10147
|
+
kind: "timer",
|
|
10148
|
+
note: "The state timeout of the authentication"
|
|
10149
|
+
},
|
|
10150
|
+
"tx.terminate": {
|
|
10151
|
+
kind: "tx",
|
|
10152
|
+
note: "The Terminate message, then the close of the socket"
|
|
10153
|
+
},
|
|
10154
|
+
"tx.error": {
|
|
10155
|
+
kind: "tx",
|
|
10156
|
+
note: "FATAL 08006 'Failed to connect to database' to the client that waits for the connection"
|
|
10157
|
+
},
|
|
10158
|
+
"tx.pool-shutdown": {
|
|
10159
|
+
kind: "local",
|
|
10160
|
+
note: "The graceful shutdown of the pool: FATAL 57P01 and the close of each client outside a transaction"
|
|
10161
|
+
}
|
|
10162
|
+
},
|
|
10163
|
+
knobs: {
|
|
10164
|
+
cooldown: {
|
|
10165
|
+
key: "the cooldown of the pool after a failed connect",
|
|
10166
|
+
scope: "process",
|
|
10167
|
+
unit: "ms",
|
|
10168
|
+
default: 2500,
|
|
10169
|
+
note: "lib/supavisor/db_handler.ex:66: a constant of the source"
|
|
10170
|
+
},
|
|
10171
|
+
connect: {
|
|
10172
|
+
key: "the timeout of the TCP connect to the server",
|
|
10173
|
+
scope: "process",
|
|
10174
|
+
unit: "ms",
|
|
10175
|
+
default: 5e3,
|
|
10176
|
+
note: "lib/supavisor/db_handler.ex:240: a constant of the source, 1_000 ms in proxy mode"
|
|
10177
|
+
},
|
|
10178
|
+
auth: {
|
|
10179
|
+
key: "the state timeout of the authentication to the server",
|
|
10180
|
+
scope: "process",
|
|
10181
|
+
unit: "ms",
|
|
10182
|
+
default: 15e3,
|
|
10183
|
+
note: "lib/supavisor/db_handler.ex:67: a constant of the source"
|
|
10184
|
+
},
|
|
10185
|
+
keepalive_idle: {
|
|
10186
|
+
key: "the keepalive idle time of the server socket of Supavisor",
|
|
10187
|
+
scope: "proxy",
|
|
10188
|
+
unit: "s",
|
|
10189
|
+
default: 0,
|
|
10190
|
+
off: 0,
|
|
10191
|
+
note: "lib/supavisor/db_handler.ex:229-236: Supavisor sets no SO_KEEPALIVE on a server socket, thus no bound"
|
|
10192
|
+
},
|
|
10193
|
+
slack: {
|
|
10194
|
+
key: "the lateness of the scheduler of the BEAM for one timer of a gen_statem",
|
|
10195
|
+
scope: "process",
|
|
10196
|
+
unit: "ms",
|
|
10197
|
+
default: 10,
|
|
10198
|
+
note: "An assumption of this document, not a value of Supavisor"
|
|
10199
|
+
}
|
|
10200
|
+
},
|
|
10201
|
+
timers: {
|
|
10202
|
+
cooldown: {
|
|
10203
|
+
duration: {
|
|
10204
|
+
knob: "cooldown",
|
|
10205
|
+
unit: "ms"
|
|
10206
|
+
},
|
|
10207
|
+
lateness: {
|
|
10208
|
+
knob: "slack",
|
|
10209
|
+
unit: "ms"
|
|
10210
|
+
},
|
|
10211
|
+
arms: ["enter:cooldown"],
|
|
10212
|
+
fires: "timer.cooldown",
|
|
10213
|
+
note: "lib/supavisor/db_handler.ex:205-224, :1111-1119: the rest of 2.5 s from the last failure, thus at most 2.5 s"
|
|
10214
|
+
},
|
|
10215
|
+
connect_timeout: {
|
|
10216
|
+
duration: {
|
|
10217
|
+
knob: "connect",
|
|
10218
|
+
unit: "ms"
|
|
10219
|
+
},
|
|
10220
|
+
lateness: {
|
|
10221
|
+
knob: "slack",
|
|
10222
|
+
unit: "ms"
|
|
10223
|
+
},
|
|
10224
|
+
arms: ["enter:connecting"],
|
|
10225
|
+
cancels: [
|
|
10226
|
+
"socket.connect",
|
|
10227
|
+
"socket.error",
|
|
10228
|
+
"peer.rst"
|
|
10229
|
+
],
|
|
10230
|
+
fires: "timer.connect",
|
|
10231
|
+
note: "lib/supavisor/db_handler.ex:240-248: the timeout of gen_tcp.connect. Its end closes the socket in SYN_SENT"
|
|
10232
|
+
},
|
|
10233
|
+
authentication_timeout: {
|
|
10234
|
+
duration: {
|
|
10235
|
+
knob: "auth",
|
|
10236
|
+
unit: "ms"
|
|
10237
|
+
},
|
|
10238
|
+
lateness: {
|
|
10239
|
+
knob: "slack",
|
|
10240
|
+
unit: "ms"
|
|
10241
|
+
},
|
|
10242
|
+
arms: ["enter:authentication"],
|
|
10243
|
+
cancels: [
|
|
10244
|
+
"rx.ready-for-query",
|
|
10245
|
+
"peer.fin",
|
|
10246
|
+
"peer.rst",
|
|
10247
|
+
"socket.error"
|
|
10248
|
+
],
|
|
10249
|
+
fires: "timer.auth",
|
|
10250
|
+
note: "lib/supavisor/db_handler.ex:272, :329-331"
|
|
10251
|
+
}
|
|
10252
|
+
},
|
|
10253
|
+
transitions: [
|
|
10254
|
+
{
|
|
10255
|
+
id: "ssv.start",
|
|
10256
|
+
from: "[none]",
|
|
10257
|
+
to: "connecting",
|
|
10258
|
+
on: "local.start",
|
|
10259
|
+
guard: "no failed connect of the pool in the last 2.5 s",
|
|
10260
|
+
timer: "connect_timeout",
|
|
10261
|
+
source: "lib/supavisor/db_handler.ex:205-228"
|
|
10262
|
+
},
|
|
10263
|
+
{
|
|
10264
|
+
id: "ssv.start-late",
|
|
10265
|
+
from: "[none]",
|
|
10266
|
+
to: "cooldown",
|
|
10267
|
+
on: "local.start",
|
|
10268
|
+
guard: "a failed connect of the pool in the last 2.5 s",
|
|
10269
|
+
timer: "cooldown",
|
|
10270
|
+
source: "lib/supavisor/db_handler.ex:205-211"
|
|
10271
|
+
},
|
|
10272
|
+
{
|
|
10273
|
+
id: "ssv.cooldown-over",
|
|
10274
|
+
from: "cooldown",
|
|
10275
|
+
to: "connecting",
|
|
10276
|
+
on: "timer.cooldown",
|
|
10277
|
+
timer: "connect_timeout",
|
|
10278
|
+
source: "lib/supavisor/db_handler.ex:222-224"
|
|
10279
|
+
},
|
|
10280
|
+
{
|
|
10281
|
+
id: "ssv.connected",
|
|
10282
|
+
from: "connecting",
|
|
10283
|
+
to: "authentication",
|
|
10284
|
+
on: "socket.connect",
|
|
10285
|
+
timer: "authentication_timeout",
|
|
10286
|
+
source: "lib/supavisor/db_handler.ex:248-273"
|
|
10287
|
+
},
|
|
10288
|
+
{
|
|
10289
|
+
id: "ssv.connect-failed",
|
|
10290
|
+
from: ["connecting", "authentication"],
|
|
10291
|
+
to: "ended",
|
|
10292
|
+
on: [
|
|
10293
|
+
"timer.connect",
|
|
10294
|
+
"socket.error",
|
|
10295
|
+
"peer.rst",
|
|
10296
|
+
"peer.fin",
|
|
10297
|
+
"timer.auth"
|
|
10298
|
+
],
|
|
10299
|
+
errno: "08006",
|
|
10300
|
+
emits: ["tx.error"],
|
|
10301
|
+
note: "FATAL 'Failed to connect to database: <reason>' to a client that waits for the connection, then the DbHandler stops",
|
|
10302
|
+
source: "lib/supavisor/db_handler.ex:282-289, :329-331, :551-555, :1072-1085, :292-321"
|
|
10303
|
+
},
|
|
10304
|
+
{
|
|
10305
|
+
id: "ssv.authenticated",
|
|
10306
|
+
from: "authentication",
|
|
10307
|
+
to: "idle",
|
|
10308
|
+
on: "rx.ready-for-query",
|
|
10309
|
+
source: "lib/supavisor/db_handler.ex:380-390"
|
|
10310
|
+
},
|
|
10311
|
+
{
|
|
10312
|
+
id: "ssv.server-shutting-down",
|
|
10313
|
+
from: "authentication",
|
|
10314
|
+
to: "ended",
|
|
10315
|
+
on: "rx.shutting-down",
|
|
10316
|
+
emits: ["tx.pool-shutdown"],
|
|
10317
|
+
note: "57P03 at the login: Supavisor shuts the whole pool down gracefully, thus a server that shuts down can end each idle client of the tenant",
|
|
10318
|
+
source: "lib/supavisor/db_handler.ex:69-76, :362-372, :297-301"
|
|
10319
|
+
},
|
|
10320
|
+
{
|
|
10321
|
+
id: "ssv.checkout",
|
|
10322
|
+
from: "idle",
|
|
10323
|
+
to: "busy",
|
|
10324
|
+
on: "local.checkout",
|
|
10325
|
+
source: "lib/supavisor/db_handler.ex:500-512"
|
|
10326
|
+
},
|
|
10327
|
+
{
|
|
10328
|
+
id: "ssv.release",
|
|
10329
|
+
from: "busy",
|
|
10330
|
+
to: "idle",
|
|
10331
|
+
on: "rx.ready-for-query",
|
|
10332
|
+
source: "lib/supavisor/db_handler.ex:415-425"
|
|
10333
|
+
},
|
|
10334
|
+
{
|
|
10335
|
+
id: "ssv.closed",
|
|
10336
|
+
from: ["idle", "busy"],
|
|
10337
|
+
to: "ended",
|
|
10338
|
+
on: [
|
|
10339
|
+
"peer.fin",
|
|
10340
|
+
"peer.rst",
|
|
10341
|
+
"socket.error"
|
|
10342
|
+
],
|
|
10343
|
+
note: "db_termination: a client that holds the connection gets the close, with no ErrorResponse",
|
|
10344
|
+
source: "lib/supavisor/db_handler.ex:557-574"
|
|
10345
|
+
},
|
|
10346
|
+
{
|
|
10347
|
+
id: "ssv.client-gone",
|
|
10348
|
+
from: "busy",
|
|
10349
|
+
to: "ended",
|
|
10350
|
+
on: "client.gone",
|
|
10351
|
+
emits: ["tx.terminate"],
|
|
10352
|
+
source: "lib/supavisor/db_handler.ex:575-585"
|
|
10353
|
+
}
|
|
10354
|
+
],
|
|
10355
|
+
over: {
|
|
10356
|
+
machine: "systems.machine.linux-tcp",
|
|
10357
|
+
states: {
|
|
10358
|
+
connecting: "SYN_SENT",
|
|
10359
|
+
authentication: "ESTABLISHED",
|
|
10360
|
+
idle: "ESTABLISHED",
|
|
10361
|
+
busy: "ESTABLISHED"
|
|
10362
|
+
},
|
|
10363
|
+
sets: { keepidle: {
|
|
10364
|
+
knob: "keepalive_idle",
|
|
10365
|
+
unit: "s"
|
|
10366
|
+
} },
|
|
10367
|
+
ends: "socket.error",
|
|
10368
|
+
note: "The server socket, with TCP_NODELAY and no SO_KEEPALIVE. The DbHandler reads it in each state, thus the end of the socket reaches it at once"
|
|
10369
|
+
}
|
|
10370
|
+
});
|
|
10371
|
+
//#endregion
|
|
9595
10372
|
//#region src/procedures-ws.ts
|
|
9596
10373
|
/**
|
|
9597
10374
|
* This module holds the machine documents of the WebSocket transport of `@procedures/client`
|
|
@@ -10842,9 +11619,11 @@ const MACHINES = byId([
|
|
|
10842
11619
|
HIKARICP_PGJDBC,
|
|
10843
11620
|
PGBOUNCER_CLIENT,
|
|
10844
11621
|
PGBOUNCER_SERVER,
|
|
10845
|
-
PGPOOL_SESSION
|
|
11622
|
+
PGPOOL_SESSION,
|
|
11623
|
+
SUPAVISOR_CLIENT,
|
|
11624
|
+
SUPAVISOR_SERVER
|
|
10846
11625
|
]);
|
|
10847
11626
|
//#endregion
|
|
10848
|
-
export { GO_TRANSPORT, HIKARICP_PGJDBC, IOREDIS_SENTINEL, IOREDIS_STATUS, LINUX_TCP, MACHINES, MANIFESTATIONS, MONGODB_NODE, MONGOD_REPL, MONGOD_SESSION, NF_CONNTRACK_TCP, NODE_HTTP_AGENT, NODE_HTTP_SERVER, NODE_POSTGRES, NODE_TIMER_EARLY, PGBOUNCER_CLIENT, PGBOUNCER_SERVER, PGPOOL_SESSION, POSTGRES_SESSION, PROCEDURES_WS_CLIENT, PROCEDURES_WS_SERVER, REDIS_CLIENT, SENTINEL, UNDICI_CLIENT, UNDICI_TICK_MS, goLateSeconds, goTimerLateness, nodeEarlySeconds, nodeLateSeconds, nodeTimerLateness, undiciFastEarly, undiciFastLateness };
|
|
11627
|
+
export { GO_TRANSPORT, HIKARICP_PGJDBC, IOREDIS_SENTINEL, IOREDIS_STATUS, LINUX_TCP, MACHINES, MANIFESTATIONS, MONGODB_NODE, MONGOD_REPL, MONGOD_SESSION, NF_CONNTRACK_TCP, NODE_HTTP_AGENT, NODE_HTTP_SERVER, NODE_POSTGRES, NODE_TIMER_EARLY, PGBOUNCER_CLIENT, PGBOUNCER_SERVER, PGPOOL_SESSION, POSTGRES_SESSION, PROCEDURES_WS_CLIENT, PROCEDURES_WS_SERVER, REDIS_CLIENT, SENTINEL, SUPAVISOR_CLIENT, SUPAVISOR_SERVER, UNDICI_CLIENT, UNDICI_TICK_MS, goLateSeconds, goTimerLateness, nodeEarlySeconds, nodeLateSeconds, nodeTimerLateness, undiciFastEarly, undiciFastLateness };
|
|
10849
11628
|
|
|
10850
11629
|
//# sourceMappingURL=index.js.map
|