Compare commits
2 Commits
wmill-scri
...
rf/pg_embe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79780ff8ac | ||
|
|
da8f8e11b2 |
267
backend/Cargo.lock
generated
267
backend/Cargo.lock
generated
@@ -1268,7 +1268,7 @@ dependencies = [
|
|||||||
"hyper 1.8.1",
|
"hyper 1.8.1",
|
||||||
"hyper-util",
|
"hyper-util",
|
||||||
"itoa",
|
"itoa",
|
||||||
"matchit",
|
"matchit 0.7.3",
|
||||||
"memchr",
|
"memchr",
|
||||||
"mime",
|
"mime",
|
||||||
"multer",
|
"multer",
|
||||||
@@ -2823,7 +2823,7 @@ dependencies = [
|
|||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot_core",
|
"parking_lot_core 0.9.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2837,7 +2837,7 @@ dependencies = [
|
|||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot_core",
|
"parking_lot_core 0.9.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2894,7 +2894,7 @@ dependencies = [
|
|||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log",
|
||||||
"object_store",
|
"object_store",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"parquet",
|
"parquet",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"regex",
|
"regex",
|
||||||
@@ -2929,7 +2929,7 @@ dependencies = [
|
|||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log",
|
||||||
"object_store",
|
"object_store",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3102,7 +3102,7 @@ dependencies = [
|
|||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log",
|
||||||
"object_store",
|
"object_store",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"parquet",
|
"parquet",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"tokio",
|
"tokio",
|
||||||
@@ -3127,7 +3127,7 @@ dependencies = [
|
|||||||
"futures",
|
"futures",
|
||||||
"log",
|
"log",
|
||||||
"object_store",
|
"object_store",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"url",
|
"url",
|
||||||
@@ -3263,7 +3263,7 @@ dependencies = [
|
|||||||
"datafusion-common",
|
"datafusion-common",
|
||||||
"datafusion-expr",
|
"datafusion-expr",
|
||||||
"datafusion-physical-plan",
|
"datafusion-physical-plan",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"paste",
|
"paste",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3404,7 +3404,7 @@ dependencies = [
|
|||||||
"indexmap 2.11.1",
|
"indexmap 2.11.1",
|
||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
@@ -3429,7 +3429,7 @@ dependencies = [
|
|||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log",
|
||||||
"object_store",
|
"object_store",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3558,7 +3558,7 @@ dependencies = [
|
|||||||
"indexmap 2.11.1",
|
"indexmap 2.11.1",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.9",
|
"sha2 0.10.9",
|
||||||
@@ -3640,7 +3640,7 @@ dependencies = [
|
|||||||
"indexmap 2.11.1",
|
"indexmap 2.11.1",
|
||||||
"libc",
|
"libc",
|
||||||
"memoffset",
|
"memoffset",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -3885,7 +3885,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"os_pipe",
|
"os_pipe",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"tokio",
|
"tokio",
|
||||||
@@ -4265,7 +4265,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"node_resolver",
|
"node_resolver",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"sys_traits",
|
"sys_traits",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
"url",
|
"url",
|
||||||
@@ -4422,7 +4422,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "6742a724e8becb372a74c650a1aefb8924a5b8107f7d75b3848763ea24b27a87"
|
checksum = "6742a724e8becb372a74c650a1aefb8924a5b8107f7d75b3848763ea24b27a87"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -5667,7 +5667,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -6565,7 +6565,7 @@ dependencies = [
|
|||||||
"ipconfig",
|
"ipconfig",
|
||||||
"moka",
|
"moka",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"rand 0.9.0",
|
"rand 0.9.0",
|
||||||
"resolv-conf",
|
"resolv-conf",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -7162,6 +7162,18 @@ dependencies = [
|
|||||||
"generic-array",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "instant"
|
||||||
|
version = "0.1.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "integer-encoding"
|
name = "integer-encoding"
|
||||||
version = "3.0.4"
|
version = "3.0.4"
|
||||||
@@ -7621,7 +7633,7 @@ dependencies = [
|
|||||||
"json-patch",
|
"json-patch",
|
||||||
"k8s-openapi",
|
"k8s-openapi",
|
||||||
"kube-client",
|
"kube-client",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -8135,6 +8147,12 @@ version = "0.7.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
|
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "matchit"
|
||||||
|
version = "0.8.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2f926ade0c4e170215ae43342bf13b9310a437609c81f29f86c5df6657582ef9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "md-5"
|
name = "md-5"
|
||||||
version = "0.9.1"
|
version = "0.9.1"
|
||||||
@@ -8341,7 +8359,7 @@ dependencies = [
|
|||||||
"crossbeam-epoch",
|
"crossbeam-epoch",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"portable-atomic",
|
"portable-atomic",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"tagptr",
|
"tagptr",
|
||||||
@@ -9059,7 +9077,7 @@ dependencies = [
|
|||||||
"hyper 1.8.1",
|
"hyper 1.8.1",
|
||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"md-5 0.10.6",
|
"md-5 0.10.6",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"quick-xml 0.37.5",
|
"quick-xml 0.37.5",
|
||||||
"rand 0.9.0",
|
"rand 0.9.0",
|
||||||
@@ -9473,6 +9491,17 @@ version = "2.2.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
|
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot"
|
||||||
|
version = "0.11.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
|
||||||
|
dependencies = [
|
||||||
|
"instant",
|
||||||
|
"lock_api",
|
||||||
|
"parking_lot_core 0.8.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.12.5"
|
version = "0.12.5"
|
||||||
@@ -9480,7 +9509,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"parking_lot_core",
|
"parking_lot_core 0.9.12",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot_core"
|
||||||
|
version = "0.8.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"instant",
|
||||||
|
"libc",
|
||||||
|
"redox_syscall 0.2.16",
|
||||||
|
"smallvec",
|
||||||
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -9959,6 +10002,64 @@ dependencies = [
|
|||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "postgresql_archive"
|
||||||
|
version = "0.18.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6c1e2f490f528e4eb06be6e9494ad28ea2b3f376bac7a9ad7c99b9062a7358e"
|
||||||
|
dependencies = [
|
||||||
|
"async-trait",
|
||||||
|
"flate2",
|
||||||
|
"futures-util",
|
||||||
|
"hex",
|
||||||
|
"num-format",
|
||||||
|
"regex-lite",
|
||||||
|
"reqwest 0.12.28",
|
||||||
|
"reqwest-middleware 0.4.2",
|
||||||
|
"reqwest-retry 0.7.0",
|
||||||
|
"reqwest-tracing",
|
||||||
|
"semver 1.0.27",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"sha2 0.10.9",
|
||||||
|
"tar",
|
||||||
|
"target-triple",
|
||||||
|
"tempfile",
|
||||||
|
"thiserror 2.0.17",
|
||||||
|
"tracing",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "postgresql_commands"
|
||||||
|
version = "0.18.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56eae883251fb55f23ff8e9f16121cfb2b00a56ebe62c56183c67904af26fa1d"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror 2.0.17",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "postgresql_embedded"
|
||||||
|
version = "0.18.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "47d56d311cb5868a3d91ba40dab5f87050dfd462ee81c39616735eb1f992cb17"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"postgresql_archive",
|
||||||
|
"postgresql_commands",
|
||||||
|
"rand 0.9.0",
|
||||||
|
"semver 1.0.27",
|
||||||
|
"sqlx",
|
||||||
|
"target-triple",
|
||||||
|
"tempfile",
|
||||||
|
"thiserror 2.0.17",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "potential_utf"
|
name = "potential_utf"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
@@ -10150,7 +10251,7 @@ dependencies = [
|
|||||||
"fnv",
|
"fnv",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"memchr",
|
"memchr",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -10319,7 +10420,7 @@ dependencies = [
|
|||||||
"ahash 0.8.12",
|
"ahash 0.8.12",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.16.1",
|
"hashbrown 0.16.1",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -10608,6 +10709,15 @@ dependencies = [
|
|||||||
"syn 2.0.114",
|
"syn 2.0.114",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "redox_syscall"
|
||||||
|
version = "0.2.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 1.3.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.5.18"
|
version = "0.5.18"
|
||||||
@@ -10811,6 +10921,21 @@ dependencies = [
|
|||||||
"web-sys",
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "reqwest-middleware"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"async-trait",
|
||||||
|
"http 1.4.0",
|
||||||
|
"reqwest 0.12.28",
|
||||||
|
"serde",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"tower-service",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest-middleware"
|
name = "reqwest-middleware"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@@ -10826,6 +10951,28 @@ dependencies = [
|
|||||||
"tower-service",
|
"tower-service",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "reqwest-retry"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"async-trait",
|
||||||
|
"futures",
|
||||||
|
"getrandom 0.2.16",
|
||||||
|
"http 1.4.0",
|
||||||
|
"hyper 1.8.1",
|
||||||
|
"parking_lot 0.11.2",
|
||||||
|
"reqwest 0.12.28",
|
||||||
|
"reqwest-middleware 0.4.2",
|
||||||
|
"retry-policies 0.4.0",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"wasm-timer",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest-retry"
|
name = "reqwest-retry"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@@ -10839,20 +10986,45 @@ dependencies = [
|
|||||||
"http 1.4.0",
|
"http 1.4.0",
|
||||||
"hyper 1.8.1",
|
"hyper 1.8.1",
|
||||||
"reqwest 0.13.1",
|
"reqwest 0.13.1",
|
||||||
"reqwest-middleware",
|
"reqwest-middleware 0.5.0",
|
||||||
"retry-policies",
|
"retry-policies 0.5.0",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"wasmtimer",
|
"wasmtimer",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "reqwest-tracing"
|
||||||
|
version = "0.5.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d70ea85f131b2ee9874f0b160ac5976f8af75f3c9badfe0d955880257d10bd83"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"async-trait",
|
||||||
|
"getrandom 0.2.16",
|
||||||
|
"http 1.4.0",
|
||||||
|
"matchit 0.8.6",
|
||||||
|
"reqwest 0.12.28",
|
||||||
|
"reqwest-middleware 0.4.2",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "resolv-conf"
|
name = "resolv-conf"
|
||||||
version = "0.7.6"
|
version = "0.7.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
|
checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "retry-policies"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.8.5",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "retry-policies"
|
name = "retry-policies"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@@ -13401,6 +13573,12 @@ dependencies = [
|
|||||||
"xattr",
|
"xattr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "target-triple"
|
||||||
|
version = "0.1.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1ac9aa371f599d22256307c24a9d748c041e548cbf599f35d890f9d365361790"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tempfile"
|
name = "tempfile"
|
||||||
version = "3.24.0"
|
version = "3.24.0"
|
||||||
@@ -13707,7 +13885,7 @@ dependencies = [
|
|||||||
"io-uring",
|
"io-uring",
|
||||||
"libc",
|
"libc",
|
||||||
"mio 1.1.1",
|
"mio 1.1.1",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"signal-hook-registry",
|
"signal-hook-registry",
|
||||||
"slab",
|
"slab",
|
||||||
@@ -13772,7 +13950,7 @@ dependencies = [
|
|||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"log",
|
"log",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"phf 0.11.3",
|
"phf 0.11.3",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
@@ -13798,7 +13976,7 @@ dependencies = [
|
|||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"log",
|
"log",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"phf 0.11.3",
|
"phf 0.11.3",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
@@ -14074,7 +14252,7 @@ dependencies = [
|
|||||||
"cookie 0.18.1",
|
"cookie 0.18.1",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http 1.4.0",
|
"http 1.4.0",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
@@ -14952,6 +15130,21 @@ dependencies = [
|
|||||||
"web-sys",
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-timer"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
|
||||||
|
dependencies = [
|
||||||
|
"futures",
|
||||||
|
"js-sys",
|
||||||
|
"parking_lot 0.11.2",
|
||||||
|
"pin-utils",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm_dep_analyzer"
|
name = "wasm_dep_analyzer"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -14970,7 +15163,7 @@ checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"slab",
|
"slab",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
@@ -15048,7 +15241,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"naga",
|
"naga",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"profiling",
|
"profiling",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
"ron",
|
"ron",
|
||||||
@@ -15090,7 +15283,7 @@ dependencies = [
|
|||||||
"ndk-sys",
|
"ndk-sys",
|
||||||
"objc",
|
"objc",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.12.5",
|
||||||
"profiling",
|
"profiling",
|
||||||
"range-alloc",
|
"range-alloc",
|
||||||
"raw-window-handle",
|
"raw-window-handle",
|
||||||
@@ -15213,6 +15406,7 @@ dependencies = [
|
|||||||
"object_store",
|
"object_store",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pep440_rs",
|
"pep440_rs",
|
||||||
|
"postgresql_embedded",
|
||||||
"prometheus",
|
"prometheus",
|
||||||
"quote",
|
"quote",
|
||||||
"rand 0.9.0",
|
"rand 0.9.0",
|
||||||
@@ -15304,7 +15498,7 @@ dependencies = [
|
|||||||
"libxml",
|
"libxml",
|
||||||
"magic-crypt",
|
"magic-crypt",
|
||||||
"mail-parser",
|
"mail-parser",
|
||||||
"matchit",
|
"matchit 0.7.3",
|
||||||
"mime_guess",
|
"mime_guess",
|
||||||
"native-tls",
|
"native-tls",
|
||||||
"nkeys",
|
"nkeys",
|
||||||
@@ -15468,13 +15662,14 @@ dependencies = [
|
|||||||
"phf 0.11.3",
|
"phf 0.11.3",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"postgres-native-tls 0.5.1",
|
"postgres-native-tls 0.5.1",
|
||||||
|
"postgresql_embedded",
|
||||||
"prometheus",
|
"prometheus",
|
||||||
"quick_cache",
|
"quick_cache",
|
||||||
"rand 0.9.0",
|
"rand 0.9.0",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest 0.13.1",
|
"reqwest 0.13.1",
|
||||||
"reqwest-middleware",
|
"reqwest-middleware 0.5.0",
|
||||||
"reqwest-retry",
|
"reqwest-retry 0.9.0",
|
||||||
"semver 1.0.27",
|
"semver 1.0.27",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -15916,7 +16111,7 @@ dependencies = [
|
|||||||
"rand 0.9.0",
|
"rand 0.9.0",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest 0.13.1",
|
"reqwest 0.13.1",
|
||||||
"reqwest-middleware",
|
"reqwest-middleware 0.5.0",
|
||||||
"rust_decimal",
|
"rust_decimal",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ oauth2 = ["windmill-api/oauth2"]
|
|||||||
zip = ["windmill-api/zip"]
|
zip = ["windmill-api/zip"]
|
||||||
static_frontend = ["windmill-api/static_frontend"]
|
static_frontend = ["windmill-api/static_frontend"]
|
||||||
scoped_cache = ["windmill-common/scoped_cache"]
|
scoped_cache = ["windmill-common/scoped_cache"]
|
||||||
|
pg_embed = ["windmill-common/pg_embed", "dep:postgresql_embedded"]
|
||||||
test_job_debouncing = []
|
test_job_debouncing = []
|
||||||
# Languages
|
# Languages
|
||||||
python = ["windmill-worker/python", "windmill-api/python"]
|
python = ["windmill-worker/python", "windmill-api/python"]
|
||||||
@@ -161,7 +162,7 @@ k8s-openapi.workspace = true
|
|||||||
libloading.workspace = true
|
libloading.workspace = true
|
||||||
bitflags.workspace = true
|
bitflags.workspace = true
|
||||||
globset.workspace = true
|
globset.workspace = true
|
||||||
|
postgresql_embedded = { version = "0.18.1", optional = true, features = ["theseus"], default-features = false }
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
windows-service = "0.7"
|
windows-service = "0.7"
|
||||||
|
|||||||
@@ -14,6 +14,55 @@ contains files used to build the "root" binary.
|
|||||||
| [windmill-worker](./windmill-worker/) | The worker. Used to process and execute flows & jobs. |
|
| [windmill-worker](./windmill-worker/) | The worker. Used to process and execute flows & jobs. |
|
||||||
| [parsers](./parsers/) | Contains code to parse signatures in different langauges. |
|
| [parsers](./parsers/) | Contains code to parse signatures in different langauges. |
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Embedded PostgreSQL (`pg_embed`)
|
||||||
|
|
||||||
|
The `pg_embed` feature allows Windmill to run with an embedded PostgreSQL database, eliminating the need for a separate PostgreSQL instance. This is useful for local development, testing, or single-machine deployments.
|
||||||
|
|
||||||
|
**Building with pg_embed:**
|
||||||
|
```bash
|
||||||
|
cargo build --features pg_embed
|
||||||
|
```
|
||||||
|
|
||||||
|
**System Dependencies:**
|
||||||
|
|
||||||
|
The embedded PostgreSQL requires certain system libraries to be installed:
|
||||||
|
|
||||||
|
- **Arch Linux:**
|
||||||
|
```bash
|
||||||
|
sudo pacman -S libxml2 icu openssl
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Ubuntu/Debian:**
|
||||||
|
```bash
|
||||||
|
sudo apt-get install libxml2 libicu-dev libssl-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
- **RHEL/Fedora:**
|
||||||
|
```bash
|
||||||
|
sudo dnf install libxml2 libicu openssl-libs
|
||||||
|
```
|
||||||
|
|
||||||
|
**Usage:**
|
||||||
|
|
||||||
|
When the `pg_embed` feature is enabled, if `DATABASE_URL` is not set, Windmill will automatically start an embedded PostgreSQL instance.
|
||||||
|
|
||||||
|
You can customize the embedded PostgreSQL behavior with these environment variables:
|
||||||
|
- `PG_EMBED_DATA_DIR`: Directory for PostgreSQL data (default: `./postgresql_data`)
|
||||||
|
- `PG_EMBED_PORT`: Port for PostgreSQL (default: `5432`)
|
||||||
|
- `PG_EMBED_DATABASE`: Database name (default: `windmill`)
|
||||||
|
- `PG_EMBED`: Set to any value to force embedded PostgreSQL even if DATABASE_URL exists
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
```bash
|
||||||
|
# Run with default embedded PostgreSQL
|
||||||
|
./windmill
|
||||||
|
|
||||||
|
# Or with custom settings
|
||||||
|
PG_EMBED_DATA_DIR=/my/data PG_EMBED_PORT=5433 ./windmill
|
||||||
|
```
|
||||||
|
|
||||||
### Compile sqlx for offline ci
|
### Compile sqlx for offline ci
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -332,6 +332,9 @@ fn print_help() {
|
|||||||
println!(" cache [hubPaths.json] Pre-cache hub scripts (default: ./hubPaths.json)");
|
println!(" cache [hubPaths.json] Pre-cache hub scripts (default: ./hubPaths.json)");
|
||||||
println!();
|
println!();
|
||||||
println!("Environment variables (name = default):");
|
println!("Environment variables (name = default):");
|
||||||
|
#[cfg(feature = "pg_embed")]
|
||||||
|
println!(" DATABASE_URL = <optional> The Postgres database url (auto-generated with pg_embed if not set).");
|
||||||
|
#[cfg(not(feature = "pg_embed"))]
|
||||||
println!(" DATABASE_URL = <required> The Postgres database url.");
|
println!(" DATABASE_URL = <required> The Postgres database url.");
|
||||||
println!(" MODE = standalone Mode: standalone | worker | server | agent");
|
println!(" MODE = standalone Mode: standalone | worker | server | agent");
|
||||||
println!(" BASE_URL = http://localhost:8000 Public base URL of your instance (overridden by instance settings)");
|
println!(" BASE_URL = http://localhost:8000 Public base URL of your instance (overridden by instance settings)");
|
||||||
@@ -339,16 +342,33 @@ fn print_help() {
|
|||||||
println!(" SERVER_BIND_ADDR = {} IP to bind the server to", DEFAULT_SERVER_BIND_ADDR);
|
println!(" SERVER_BIND_ADDR = {} IP to bind the server to", DEFAULT_SERVER_BIND_ADDR);
|
||||||
println!(" NUM_WORKERS = {} Number of workers (standalone/worker modes)", DEFAULT_NUM_WORKERS);
|
println!(" NUM_WORKERS = {} Number of workers (standalone/worker modes)", DEFAULT_NUM_WORKERS);
|
||||||
println!(" WORKER_GROUP = default Worker group this worker belongs to",);
|
println!(" WORKER_GROUP = default Worker group this worker belongs to",);
|
||||||
|
println!(" QUIT_AFTER_FIRST_PING = false Exit worker after first successful ping (useful for testing)");
|
||||||
println!(" JSON_FMT = false Output logs in JSON instead of logfmt");
|
println!(" JSON_FMT = false Output logs in JSON instead of logfmt");
|
||||||
println!(" METRICS_ADDR = None (EE only) Prometheus metrics addr at /metrics; set \"true\" to use :8001");
|
println!(" METRICS_ADDR = None (EE only) Prometheus metrics addr at /metrics; set \"true\" to use :8001");
|
||||||
println!(" SUPERADMIN_SECRET = None Virtual superadmin token (server)");
|
println!(" SUPERADMIN_SECRET = None Virtual superadmin token (server)");
|
||||||
println!(" LICENSE_KEY = None (EE only) Enterprise license key (workers require valid key)");
|
println!(" LICENSE_KEY = None (EE only) Enterprise license key (workers require valid key)");
|
||||||
println!(" RUN_UPDATE_CA_CERTIFICATE_AT_START = false Run system CA update at startup");
|
println!(" RUN_UPDATE_CA_CERTIFICATE_AT_START = false Run system CA update at startup");
|
||||||
println!(" RUN_UPDATE_CA_CERTIFICATE_PATH = /usr/sbin/update-ca-certificates Path to CA update tool");
|
println!(" RUN_UPDATE_CA_CERTIFICATE_PATH = /usr/sbin/update-ca-certificates Path to CA update tool");
|
||||||
|
#[cfg(feature = "pg_embed")]
|
||||||
|
{
|
||||||
|
println!();
|
||||||
|
println!("Embedded PostgreSQL settings (pg_embed feature):");
|
||||||
|
println!(" PG_EMBED = <unset> Force embedded PostgreSQL even if DATABASE_URL exists");
|
||||||
|
println!(" PG_EMBED_DATA_DIR = ./postgresql_data Directory for embedded PostgreSQL data");
|
||||||
|
println!(" PG_EMBED_PORT = 5432 Port for embedded PostgreSQL");
|
||||||
|
println!(" PG_EMBED_DATABASE = windmill Database name for embedded PostgreSQL");
|
||||||
|
println!();
|
||||||
|
println!("System dependencies required for pg_embed:");
|
||||||
|
println!(" Arch: sudo pacman -S libxml2 icu openssl");
|
||||||
|
println!(" Ubuntu/Debian: sudo apt-get install libxml2 libicu-dev libssl-dev");
|
||||||
|
println!(" RHEL/Fedora: sudo dnf install libxml2 libicu openssl-libs");
|
||||||
|
}
|
||||||
println!();
|
println!();
|
||||||
println!("Notes:");
|
println!("Notes:");
|
||||||
println!("- Advanced and less commonly used settings are managed via the database and are omitted here.");
|
println!("- Advanced and less commonly used settings are managed via the database and are omitted here.");
|
||||||
println!("- At startup, Windmill logs currently set configuration keys for visibility.");
|
println!("- At startup, Windmill logs currently set configuration keys for visibility.");
|
||||||
|
#[cfg(feature = "pg_embed")]
|
||||||
|
println!("- With pg_embed feature enabled, if DATABASE_URL is not set, an embedded PostgreSQL instance will be started automatically.");
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn windmill_main() -> anyhow::Result<()> {
|
async fn windmill_main() -> anyhow::Result<()> {
|
||||||
@@ -470,6 +490,15 @@ async fn windmill_main() -> anyhow::Result<()> {
|
|||||||
IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))
|
IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Initialize embedded PostgreSQL if pg_embed feature is enabled
|
||||||
|
#[cfg(feature = "pg_embed")]
|
||||||
|
let _embedded_pg = if std::env::var("PG_EMBED").is_ok() || (mode != Mode::Agent && std::env::var("DATABASE_URL").is_err() && std::env::var("DATABASE_URL_FILE").is_err()) {
|
||||||
|
println!("DATABASE_URL not set, starting embedded PostgreSQL...");
|
||||||
|
Some(windmill_common::pg_embed::init_embedded_postgres().await?)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let (conn, first_suffix) = if mode == Mode::Agent {
|
let (conn, first_suffix) = if mode == Mode::Agent {
|
||||||
tracing::info!(
|
tracing::info!(
|
||||||
"Creating http client for cluster using base internal url {}",
|
"Creating http client for cluster using base internal url {}",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ smtp = ["dep:mail-send"]
|
|||||||
scoped_cache = []
|
scoped_cache = []
|
||||||
cloud = []
|
cloud = []
|
||||||
openidconnect = ["dep:openidconnect"]
|
openidconnect = ["dep:openidconnect"]
|
||||||
|
pg_embed = ["dep:postgresql_embedded"]
|
||||||
[lib]
|
[lib]
|
||||||
name = "windmill_common"
|
name = "windmill_common"
|
||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
@@ -114,6 +115,7 @@ opentelemetry = { workspace = true, optional = true }
|
|||||||
tracing-opentelemetry = { workspace = true, optional = true }
|
tracing-opentelemetry = { workspace = true, optional = true }
|
||||||
opentelemetry-appender-tracing = { workspace = true, optional = true }
|
opentelemetry-appender-tracing = { workspace = true, optional = true }
|
||||||
tonic = { workspace = true, optional = true }
|
tonic = { workspace = true, optional = true }
|
||||||
|
postgresql_embedded = { version = "0.18.1", optional = true, features = ["theseus"], default-features = false }
|
||||||
|
|
||||||
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
||||||
tikv-jemalloc-ctl = { optional = true, workspace = true }
|
tikv-jemalloc-ctl = { optional = true, workspace = true }
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ pub mod oidc_oss;
|
|||||||
#[cfg(feature = "private")]
|
#[cfg(feature = "private")]
|
||||||
pub mod otel_ee;
|
pub mod otel_ee;
|
||||||
pub mod otel_oss;
|
pub mod otel_oss;
|
||||||
|
#[cfg(feature = "pg_embed")]
|
||||||
|
pub mod pg_embed;
|
||||||
pub mod queue;
|
pub mod queue;
|
||||||
pub mod result_stream;
|
pub mod result_stream;
|
||||||
pub mod runnable_settings;
|
pub mod runnable_settings;
|
||||||
|
|||||||
144
backend/windmill-common/src/pg_embed.rs
Normal file
144
backend/windmill-common/src/pg_embed.rs
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Author: Ruben Fiszel
|
||||||
|
* Copyright: Windmill Labs, Inc 2022
|
||||||
|
* This file and its contents are licensed under the AGPLv3 License.
|
||||||
|
* Please see the included NOTICE for copyright information and
|
||||||
|
* LICENSE-AGPL for a copy of the license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use crate::error::Error;
|
||||||
|
use postgresql_embedded::{PostgreSQL, Settings};
|
||||||
|
use std::sync::Arc;
|
||||||
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
|
/// Manages an embedded PostgreSQL instance
|
||||||
|
pub struct EmbeddedPostgres {
|
||||||
|
postgresql: Arc<RwLock<PostgreSQL>>,
|
||||||
|
database_url: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl EmbeddedPostgres {
|
||||||
|
/// Initialize and start an embedded PostgreSQL instance
|
||||||
|
pub async fn new() -> Result<Self, Error> {
|
||||||
|
tracing::info!("Initializing embedded PostgreSQL instance...");
|
||||||
|
|
||||||
|
// Configure the embedded PostgreSQL settings
|
||||||
|
let mut settings = Settings::default();
|
||||||
|
|
||||||
|
// Use environment variables if provided for customization
|
||||||
|
if let Ok(data_dir) = std::env::var("PG_EMBED_DATA_DIR") {
|
||||||
|
settings.installation_dir = data_dir.into();
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(port) = std::env::var("PG_EMBED_PORT") {
|
||||||
|
if let Ok(port_num) = port.parse::<u16>() {
|
||||||
|
settings.port = port_num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut postgresql = PostgreSQL::new(settings);
|
||||||
|
|
||||||
|
// Setup the PostgreSQL instance
|
||||||
|
postgresql
|
||||||
|
.setup()
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
let err_msg = format!("Failed to setup embedded PostgreSQL: {}", e);
|
||||||
|
if err_msg.contains("libxml2") || err_msg.contains("shared libraries") {
|
||||||
|
Error::InternalErr(format!(
|
||||||
|
"{}\n\n\
|
||||||
|
System dependencies are required for embedded PostgreSQL.\n\
|
||||||
|
On Arch Linux, install: sudo pacman -S libxml2 icu openssl\n\
|
||||||
|
On Ubuntu/Debian: sudo apt-get install libxml2 libicu-dev libssl-dev\n\
|
||||||
|
On RHEL/Fedora: sudo dnf install libxml2 libicu openssl-libs\n\n\
|
||||||
|
Alternatively, set DATABASE_URL to use an external PostgreSQL instance.",
|
||||||
|
err_msg
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
Error::InternalErr(err_msg)
|
||||||
|
}
|
||||||
|
})?;
|
||||||
|
|
||||||
|
tracing::info!("Starting embedded PostgreSQL...");
|
||||||
|
|
||||||
|
// Start the PostgreSQL instance
|
||||||
|
postgresql
|
||||||
|
.start()
|
||||||
|
.await
|
||||||
|
.map_err(|e| Error::InternalErr(format!("Failed to start embedded PostgreSQL: {}", e)))?;
|
||||||
|
|
||||||
|
tracing::info!("Embedded PostgreSQL started successfully");
|
||||||
|
|
||||||
|
// Get the database settings
|
||||||
|
let settings = postgresql.settings();
|
||||||
|
|
||||||
|
// Create the windmill database
|
||||||
|
let database_name = std::env::var("PG_EMBED_DATABASE")
|
||||||
|
.unwrap_or_else(|_| "windmill".to_string());
|
||||||
|
|
||||||
|
tracing::info!("Creating database: {}", database_name);
|
||||||
|
|
||||||
|
postgresql
|
||||||
|
.create_database(&database_name)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
Error::InternalErr(format!("Failed to create database '{}': {}", database_name, e))
|
||||||
|
})?;
|
||||||
|
|
||||||
|
// Build the connection string
|
||||||
|
let database_url = format!(
|
||||||
|
"postgres://{}:{}@{}:{}/{}",
|
||||||
|
settings.username,
|
||||||
|
settings.password,
|
||||||
|
settings.host,
|
||||||
|
settings.port,
|
||||||
|
database_name
|
||||||
|
);
|
||||||
|
|
||||||
|
tracing::info!("Embedded PostgreSQL ready at: postgres://{}:{}@{}:{}/{}",
|
||||||
|
settings.username,
|
||||||
|
"***", // Don't log password
|
||||||
|
settings.host,
|
||||||
|
settings.port,
|
||||||
|
database_name
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
postgresql: Arc::new(RwLock::new(postgresql)),
|
||||||
|
database_url,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the database connection URL
|
||||||
|
pub fn database_url(&self) -> &str {
|
||||||
|
&self.database_url
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Stop the embedded PostgreSQL instance
|
||||||
|
pub async fn stop(&self) -> Result<(), Error> {
|
||||||
|
tracing::info!("Stopping embedded PostgreSQL...");
|
||||||
|
|
||||||
|
let pg = self.postgresql.write().await;
|
||||||
|
pg.stop()
|
||||||
|
.await
|
||||||
|
.map_err(|e| Error::InternalErr(format!("Failed to stop embedded PostgreSQL: {}", e)))?;
|
||||||
|
|
||||||
|
tracing::info!("Embedded PostgreSQL stopped");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initialize an embedded PostgreSQL instance and set the DATABASE_URL environment variable
|
||||||
|
pub async fn init_embedded_postgres() -> Result<EmbeddedPostgres, Error> {
|
||||||
|
let embedded_pg = EmbeddedPostgres::new().await?;
|
||||||
|
|
||||||
|
// Set the DATABASE_URL environment variable so that the rest of the application
|
||||||
|
// can use it transparently
|
||||||
|
unsafe {
|
||||||
|
std::env::set_var("DATABASE_URL", embedded_pg.database_url());
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::info!("DATABASE_URL set to embedded PostgreSQL instance");
|
||||||
|
|
||||||
|
Ok(embedded_pg)
|
||||||
|
}
|
||||||
@@ -316,6 +316,11 @@ lazy_static::lazy_static! {
|
|||||||
.and_then(|x| x.parse::<bool>().ok())
|
.and_then(|x| x.parse::<bool>().ok())
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
|
pub static ref QUIT_AFTER_FIRST_PING: bool = std::env::var("QUIT_AFTER_FIRST_PING")
|
||||||
|
.ok()
|
||||||
|
.and_then(|x| x.parse::<bool>().ok())
|
||||||
|
.unwrap_or(false);
|
||||||
|
|
||||||
pub static ref UNSHARE_TINI_PATH: String = {
|
pub static ref UNSHARE_TINI_PATH: String = {
|
||||||
std::env::var("UNSHARE_TINI_PATH").unwrap_or_else(|_| "tini".to_string())
|
std::env::var("UNSHARE_TINI_PATH").unwrap_or_else(|_| "tini".to_string())
|
||||||
};
|
};
|
||||||
@@ -1265,6 +1270,14 @@ pub async fn run_worker(
|
|||||||
.await
|
.await
|
||||||
.expect("initial ping could be sent");
|
.expect("initial ping could be sent");
|
||||||
|
|
||||||
|
if *QUIT_AFTER_FIRST_PING {
|
||||||
|
tracing::info!(
|
||||||
|
worker = %worker_name, hostname = %hostname,
|
||||||
|
"QUIT_AFTER_FIRST_PING is set, exiting after successful initial ping"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "prometheus")]
|
#[cfg(feature = "prometheus")]
|
||||||
let uptime_metric = if METRICS_ENABLED.load(Ordering::Relaxed) {
|
let uptime_metric = if METRICS_ENABLED.load(Ordering::Relaxed) {
|
||||||
Some(
|
Some(
|
||||||
|
|||||||
Reference in New Issue
Block a user