From 26d937b9d0219242265ad97cedd21dd34ada0736 Mon Sep 17 00:00:00 2001 From: Peter Kotula Date: Mon, 15 Jul 2024 08:31:10 +0200 Subject: [PATCH] golem-host - get worker metadata (#659) * golem-host - get worker metadata * fixes * runtime-service test component - get worker metadata * rebase fixes * rebase fixes * helm chart fix --- Cargo.lock | 356 +++---- golem-cli/Cargo.toml | 2 +- golem-worker-executor-base/Cargo.toml | 2 +- golem-worker-executor-base/build.rs | 18 +- .../src/durable_host/golem/mod.rs | 46 + .../src/durable_host/mod.rs | 10 +- golem-worker-executor-base/src/worker.rs | 2 +- golem-worker-executor-base/src/workerctx.rs | 6 +- golem-worker-executor-base/tests/api.rs | 86 ++ .../tests/common/mod.rs | 4 +- golem-worker-executor/src/context.rs | 6 +- kube/golem-chart/templates/deployment.yaml | 11 + test-components/runtime-service.wasm | Bin 527446 -> 532046 bytes .../runtime-service/src/bindings.rs | 913 ++++++++++++++---- test-components/runtime-service/src/lib.rs | 10 + .../wit/deps/golem/golem-host.wit | 6 + .../runtime-service/wit/runtime.wit | 2 + 17 files changed, 1100 insertions(+), 380 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfbf373094..a761e44277 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "regex", ] @@ -298,7 +298,7 @@ dependencies = [ "async-trait", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "tokio", ] @@ -444,7 +444,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -505,7 +505,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -522,7 +522,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -611,9 +611,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.8.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a47f2fb521b70c11ce7369a6c5fa4bd6af7e5d62ec06303875bafe7c6ba245" +checksum = "bf7d844e282b4b56750b2d4e893b2205581ded8709fddd2b6aa5418c150ca877" dependencies = [ "aws-lc-sys", "mirai-annotations", @@ -623,9 +623,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.19.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2927c7af777b460b7ccd95f8b67acd7b4c04ec8896bf0c8e80ba30523cffc057" +checksum = "c3a2c29203f6bf296d01141cc8bb9dbd5ecd4c27843f2ee0767bcd5985a927da" dependencies = [ "bindgen", "cc", @@ -1121,11 +1121,11 @@ version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "cexpr", "clang-sys", "itertools 0.12.1", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "lazycell", "log", "prettyplease", @@ -1134,7 +1134,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.68", + "syn 2.0.67", "which 4.4.2", ] @@ -1161,9 +1161,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ "serde 1.0.203", ] @@ -1355,7 +1355,7 @@ dependencies = [ "cargo-component-core", "cargo-config2", "cargo_metadata", - "clap 4.5.8", + "clap 4.5.7", "futures", "heck 0.5.0", "indexmap 2.2.6", @@ -1394,7 +1394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf60eee7916f926d079ac6dc1851bfd8e2869bbdfc3ff997013cf7b802565f86" dependencies = [ "anyhow", - "clap 4.5.8", + "clap 4.5.7", "futures", "indexmap 2.2.6", "libc", @@ -1476,9 +1476,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.101" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" dependencies = [ "jobserver", "libc", @@ -1555,9 +1555,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.8" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -1569,15 +1569,15 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb9b20c0dd58e4c2e991c8d203bbeb76c11304d1011659686b5b644bc29aa478" dependencies = [ - "clap 4.5.8", + "clap 4.5.7", "log", ] [[package]] name = "clap_builder" -version = "4.5.8" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -1587,14 +1587,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -1659,7 +1659,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "windows-sys 0.48.0", ] @@ -1688,7 +1688,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "nom 5.1.3", "rust-ini", "serde 1.0.203", @@ -1705,7 +1705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "libc", "unicode-width", "windows-sys 0.52.0", @@ -2024,7 +2024,7 @@ dependencies = [ "criterion-plot", "csv", "itertools 0.10.5", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "num-traits 0.2.19", "oorandom", "plotters", @@ -2189,7 +2189,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2246,7 +2246,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2268,7 +2268,7 @@ checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core 0.20.9", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2349,7 +2349,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2362,7 +2362,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2513,7 +2513,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "libc", "winapi", "wio", @@ -2553,9 +2553,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" dependencies = [ "serde 1.0.203", ] @@ -2639,7 +2639,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -2899,7 +2899,7 @@ dependencies = [ "futures-core", "futures-sink", "nanorand", - "spin", + "spin 0.9.8", ] [[package]] @@ -2920,7 +2920,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2845a73bbd781e691ab7c2a028c579727cd254942e8ced57ff73e0eafd60de87" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "byteorder", "core-foundation", "core-graphics", @@ -2929,7 +2929,7 @@ dependencies = [ "dwrote", "float-ord", "freetype-sys", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "libc", "log", "pathfinder_geometry", @@ -2966,7 +2966,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -3148,7 +3148,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -3217,7 +3217,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "debugid", "fxhash", "serde 1.0.203", @@ -3344,7 +3344,7 @@ dependencies = [ "async-recursion", "async-trait", "chrono", - "clap 4.5.8", + "clap 4.5.7", "clap-verbosity-flag", "cli-table", "colored", @@ -3439,7 +3439,7 @@ dependencies = [ "http 0.2.12", "humantime-serde", "iso8601-timestamp", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "poem", "poem-openapi", "prometheus", @@ -3475,7 +3475,7 @@ dependencies = [ "golem-worker-executor-base", "http 0.2.12", "http 1.1.0", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "prometheus", "serde 1.0.203", "thiserror", @@ -3505,7 +3505,7 @@ dependencies = [ "golem-wasm-rpc", "http 0.2.12", "humantime-serde", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "mappable-rc", "opentelemetry 0.23.0", "opentelemetry-prometheus 0.16.0", @@ -3561,9 +3561,9 @@ dependencies = [ [[package]] name = "golem-examples" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cfa9f8fb387ea21638d3e68aacd3ef2ab646f7748998cfba997d9105d05deaf" +checksum = "a39ae0f0f7ebef01a1250f97600dcfeb373d569b6d2f93710e55f607d5d3ebf7" dependencies = [ "Inflector", "cargo_metadata", @@ -3571,7 +3571,7 @@ dependencies = [ "derive_more", "dir-diff", "fancy-regex", - "golem-wit 0.2.10", + "golem-wit", "include_dir", "once_cell", "serde 1.0.203", @@ -3586,7 +3586,7 @@ version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93808434ae66e60e3316b99a3c2333a112bdb0662efb9a52d81ba7713e1d5808" dependencies = [ - "clap 4.5.8", + "clap 4.5.7", "convert_case 0.6.0", "fmt", "indexmap 2.2.6", @@ -3690,7 +3690,7 @@ dependencies = [ "async-dropper-simple", "async-scoped", "async-trait", - "clap 4.5.8", + "clap 4.5.7", "cli-table", "colored", "console-subscriber", @@ -3766,7 +3766,7 @@ dependencies = [ "cargo-component", "cargo-component-core", "cargo_toml", - "clap 4.5.8", + "clap 4.5.7", "dir-diff", "fs_extra", "golem-wasm-ast", @@ -3780,7 +3780,7 @@ dependencies = [ "quote", "regex", "serde 1.0.203", - "syn 2.0.68", + "syn 2.0.67", "tempdir", "tokio", "toml 0.8.14", @@ -3791,15 +3791,9 @@ dependencies = [ [[package]] name = "golem-wit" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a9f3d1abc406d69396138285161f49bef5ce4faa3d840ca27c7b2cefe49449" - -[[package]] -name = "golem-wit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe38e8abe5a18164ccb7e8c08736a9a8bae4f3368872e349d526057b1a09cc0f" +checksum = "e8b4e1c1cad2fa57e4490c85b1fb1f93ee89720cafcc26ed1b672bb64c635f74" [[package]] name = "golem-worker-executor" @@ -3844,7 +3838,7 @@ dependencies = [ "aws-config", "aws-sdk-s3", "bincode", - "bitflags 2.6.0", + "bitflags 2.5.0", "bytes 1.6.0", "cap-fs-ext", "cap-std", @@ -3868,7 +3862,7 @@ dependencies = [ "golem-test-framework", "golem-wasm-ast", "golem-wasm-rpc", - "golem-wit 0.3.0", + "golem-wit", "http 0.2.12", "http 1.1.0", "http-body 1.0.0", @@ -3877,7 +3871,7 @@ dependencies = [ "hyper 1.3.1", "io-extras", "iso8601-timestamp", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "log", "md5", "metrohash", @@ -3938,7 +3932,7 @@ dependencies = [ "http 1.1.0", "humantime-serde", "hyper 1.3.1", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "nom 7.1.3", "openapiv3", "opentelemetry 0.23.0", @@ -3990,7 +3984,7 @@ dependencies = [ "http 1.1.0", "humantime-serde", "hyper 1.3.1", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "nom 7.1.3", "openapiv3", "opentelemetry 0.23.0", @@ -4652,7 +4646,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "crossterm", "dyn-clone", "fuzzy-matcher", @@ -4679,7 +4673,7 @@ dependencies = [ "anyhow", "assert2", "async-trait", - "clap 4.5.8", + "clap 4.5.7", "console-subscriber", "ctor", "golem-api-grpc", @@ -4878,7 +4872,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d8fe85bd70ff715f31ce8c739194b423d79811a19602115d611a3ec85d6200" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "once_cell", "pest", "pest_derive", @@ -4918,7 +4912,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "363387f0019d714aa60cc30ab4fe501a747f4c08fc58f069dd14be971bd495a0" dependencies = [ "byteorder", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "linux-keyutils", "secret-service", "security-framework", @@ -5016,7 +5010,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -5055,11 +5049,11 @@ checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -5095,9 +5089,9 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", "windows-targets 0.52.5", @@ -5115,7 +5109,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "libc", ] @@ -5135,7 +5129,7 @@ name = "libtest-mimic" version = "0.7.0" source = "git+https://github.com/senia-psm/libtest-mimic.git?branch=async_and_context_tests#904a9367691b7eb47dc25a876391ee4a958c0319" dependencies = [ - "clap 4.5.8", + "clap 4.5.7", "escape8259", "termcolor", "threadpool", @@ -5154,7 +5148,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "761e49ec5fd8a5a463f9b84e877c373d888935b71c6be78f3767fe2ae6bed18e" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "libc", ] @@ -5182,9 +5176,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "logos" @@ -5203,11 +5197,11 @@ checksum = "8e31badd9de5131fdf4921f6473d457e3dd85b11b7f091ceb50e4df7c3eeb12a" dependencies = [ "beef", "fnv", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "proc-macro2", "quote", "regex-syntax 0.8.4", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -5339,7 +5333,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -5406,7 +5400,7 @@ dependencies = [ "log", "memchr", "mime", - "spin", + "spin 0.9.8", "version_check", ] @@ -5423,7 +5417,7 @@ dependencies = [ "httparse", "memchr", "mime", - "spin", + "spin 0.9.8", "tokio", "version_check", ] @@ -5487,7 +5481,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "cfg-if", "libc", ] @@ -5498,7 +5492,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "cfg-if", "cfg_aliases", "libc", @@ -5527,9 +5521,9 @@ dependencies = [ [[package]] name = "nonempty-collections" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2220c0aadad0ee210950152e56eb14a1a4415367151d1f2a2cad24ab5eaecb58" +checksum = "ce843257ad9150ef688ce56753ef461fb2de929fa980fd5692828d1df5fe6f4d" [[package]] name = "normpath" @@ -5575,9 +5569,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ "num-integer", "num-traits 0.2.19", @@ -5590,7 +5584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ "byteorder", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "libm", "num-integer", "num-iter", @@ -5731,7 +5725,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -5748,7 +5742,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -5870,7 +5864,7 @@ dependencies = [ "futures-executor", "futures-util", "glob", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "once_cell", "opentelemetry 0.23.0", "ordered-float 4.2.0", @@ -6086,7 +6080,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -6145,7 +6139,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -6224,7 +6218,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -6296,7 +6290,7 @@ dependencies = [ "chrono", "font-kit", "image", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "num-traits 0.2.19", "pathfinder_geometry", "plotters-backend", @@ -6404,7 +6398,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -6451,7 +6445,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.68", + "syn 2.0.67", "thiserror", ] @@ -6581,7 +6575,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -6629,7 +6623,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "version_check", "yansi 1.0.1", ] @@ -6640,9 +6634,9 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "hex", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "procfs-core", "rustix 0.38.34", ] @@ -6653,7 +6647,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "hex", ] @@ -6665,7 +6659,7 @@ checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ "cfg-if", "fnv", - "lazy_static 1.5.0", + "lazy_static 1.4.0", "libc", "memchr", "parking_lot", @@ -6676,14 +6670,14 @@ dependencies = [ [[package]] name = "proptest" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.6.0", - "lazy_static 1.5.0", + "bitflags 2.5.0", + "lazy_static 1.4.0", "num-traits 0.2.19", "rand 0.8.5", "rand_chacha", @@ -6721,7 +6715,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.68", + "syn 2.0.67", "tempfile", ] @@ -6735,7 +6729,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7004,7 +6998,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", ] [[package]] @@ -7184,7 +7178,7 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin", + "spin 0.9.8", "untrusted", "windows-sys 0.52.0", ] @@ -7286,7 +7280,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "errno", "itoa", "libc", @@ -7472,7 +7466,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7560,7 +7554,7 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -7607,7 +7601,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", "num-traits 0.1.43", "regex", "serde 0.8.23", @@ -7641,7 +7635,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7652,14 +7646,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] name = "serde_json" -version = "1.0.118" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d947f6b3163d8857ea16c4fa0dd4840d52f3041039a85decd46867eb1abef2e4" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -7716,7 +7710,7 @@ checksum = "75dde5a1d2ed78dfc411fc45592f72d3694436524d3353683ecb3d22009731dc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7727,7 +7721,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7800,7 +7794,7 @@ dependencies = [ "darling 0.20.9", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -7863,7 +7857,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "lazy_static 1.5.0", + "lazy_static 1.4.0", ] [[package]] @@ -8024,6 +8018,12 @@ dependencies = [ "smallvec", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "spin" version = "0.9.8" @@ -8170,7 +8170,7 @@ checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" dependencies = [ "atoi", "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.5.0", "byteorder", "bytes 1.6.0", "chrono", @@ -8214,7 +8214,7 @@ checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" dependencies = [ "atoi", "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.5.0", "byteorder", "chrono", "crc", @@ -8329,9 +8329,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.26.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" [[package]] name = "strum_macros" @@ -8343,14 +8343,14 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] name = "subtle" -version = "2.6.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" [[package]] name = "syn" @@ -8365,9 +8365,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.68" +version = "2.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" dependencies = [ "proc-macro2", "quote", @@ -8431,7 +8431,7 @@ version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b858526d22750088a9b3cf2e3c2aacebd5377f13adeec02860c30d09113010a6" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "cap-fs-ext", "cap-std", "fd-lock", @@ -8549,7 +8549,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -8623,9 +8623,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -8674,7 +8674,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -8912,7 +8912,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -8968,7 +8968,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.5.0", "bytes 1.6.0", "http 1.1.0", "http-body 1.0.0", @@ -9012,7 +9012,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -9095,7 +9095,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -9307,9 +9307,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.9.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "getrandom", "serde 1.0.203", @@ -9430,7 +9430,7 @@ dependencies = [ "async-recursion", "async-trait", "bytes 1.6.0", - "clap 4.5.8", + "clap 4.5.7", "dialoguer", "dirs 5.0.1", "futures-util", @@ -9605,7 +9605,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "wasm-bindgen-shared", ] @@ -9639,7 +9639,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9732,9 +9732,9 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.212.0" +version = "0.211.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501940df4418b8929eb6d52f1aade1fdd15a5b86c92453cb696e3c906bd3fc33" +checksum = "5e7d931a1120ef357f32b74547646b6fa68ea25e377772b72874b131a9ed70d4" dependencies = [ "leb128", ] @@ -9819,7 +9819,7 @@ version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "indexmap 2.2.6", "semver", ] @@ -9831,7 +9831,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e19bb9f8ab07616da582ef8adb24c54f1424c7ec876720b7da9db8ec0626c92c" dependencies = [ "ahash", - "bitflags 2.6.0", + "bitflags 2.5.0", "hashbrown 0.14.5", "indexmap 2.2.6", "semver", @@ -9844,7 +9844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd921789c9dcc495f589cb37d200155dee65b4a4beeb853323b5e24e0a5f9c58" dependencies = [ "ahash", - "bitflags 2.6.0", + "bitflags 2.5.0", "hashbrown 0.14.5", "indexmap 2.2.6", "semver", @@ -9858,7 +9858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07035cc9a9b41e62d3bb3a3815a66ab87c993c06fe1cf6b2a3f2a18499d937db" dependencies = [ "ahash", - "bitflags 2.6.0", + "bitflags 2.5.0", "hashbrown 0.14.5", "indexmap 2.2.6", "semver", @@ -9974,7 +9974,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "wasmtime-component-util", "wasmtime-wit-bindgen", "wit-parser 0.207.0", @@ -10092,7 +10092,7 @@ source = "git+https://github.com/golemcloud/wasmtime.git?branch=golem-wasmtime-v dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -10102,7 +10102,7 @@ source = "git+https://github.com/golemcloud/wasmtime.git?branch=golem-wasmtime-v dependencies = [ "anyhow", "async-trait", - "bitflags 2.6.0", + "bitflags 2.5.0", "bytes 1.6.0", "cap-fs-ext", "cap-net-ext", @@ -10185,24 +10185,24 @@ dependencies = [ [[package]] name = "wast" -version = "212.0.0" +version = "211.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4606a05fb0aae5d11dd7d8280a640d88a63ee019360ba9be552da3d294b8d1f5" +checksum = "b25506dd82d00da6b14a87436b3d52b1d264083fa79cdb72a0d1b04a8595ccaa" dependencies = [ "bumpalo", "leb128", "memchr", "unicode-width", - "wasm-encoder 0.212.0", + "wasm-encoder 0.211.1", ] [[package]] name = "wat" -version = "1.212.0" +version = "1.211.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c74ca7f93f11a5d6eed8499f2a8daaad6e225cab0151bc25a091fff3b987532f" +checksum = "eb716ca6c86eecac2d82541ffc39860118fc0af9309c4f2670637bea2e1bdd7d" dependencies = [ - "wast 212.0.0", + "wast 211.0.1", ] [[package]] @@ -10272,7 +10272,7 @@ source = "git+https://github.com/golemcloud/wasmtime.git?branch=golem-wasmtime-v dependencies = [ "anyhow", "async-trait", - "bitflags 2.6.0", + "bitflags 2.5.0", "thiserror", "tracing", "wasmtime", @@ -10289,7 +10289,7 @@ dependencies = [ "proc-macro2", "quote", "shellexpand", - "syn 2.0.68", + "syn 2.0.67", "witx", ] @@ -10300,7 +10300,7 @@ source = "git+https://github.com/golemcloud/wasmtime.git?branch=golem-wasmtime-v dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", "wiggle-generate", ] @@ -10555,7 +10555,7 @@ version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9643b83820c0cd246ecabe5fa454dd04ba4fa67996369466d0747472d337346" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", "windows-sys 0.52.0", ] @@ -10596,7 +10596,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29c7526379ace8709ee9ab9f2bb50f112d95581063a59ef3097d9c10153886c9" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.5.0", ] [[package]] @@ -10634,7 +10634,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fef7dd0e47f5135dd8739ccc5b188ab8b7e27e1d64df668aa36680f0b8646db8" dependencies = [ "anyhow", - "bitflags 2.6.0", + "bitflags 2.5.0", "indexmap 2.2.6", "log", "serde 1.0.203", @@ -10653,7 +10653,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a2bb5b039f9cb03425e1d5a6e54b441ca4ca1b1d4fa6a0924db67a55168f99" dependencies = [ "anyhow", - "bitflags 2.6.0", + "bitflags 2.5.0", "indexmap 2.2.6", "log", "serde 1.0.203", @@ -10863,7 +10863,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] @@ -10883,7 +10883,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.67", ] [[package]] diff --git a/golem-cli/Cargo.toml b/golem-cli/Cargo.toml index 1fad477927..268be7bdb2 100644 --- a/golem-cli/Cargo.toml +++ b/golem-cli/Cargo.toml @@ -31,7 +31,7 @@ clap-verbosity-flag = "2.1.1" derive_more = { workspace = true } dirs = "5.0.1" futures-util = { workspace = true } -golem-examples = "0.3.0" +golem-examples = "0.3.1" golem-wasm-ast = { workspace = true } golem-wasm-rpc = { workspace = true } golem-wasm-rpc-stubgen = { version = "0.0.33", optional = true } diff --git a/golem-worker-executor-base/Cargo.toml b/golem-worker-executor-base/Cargo.toml index 1badcee2e5..18057dcf7d 100644 --- a/golem-worker-executor-base/Cargo.toml +++ b/golem-worker-executor-base/Cargo.toml @@ -46,7 +46,7 @@ fs-set-times = "0.20.1" futures = { workspace = true } futures-util = { workspace = true } gethostname = "0.4.3" -golem-wit = { version = "0.3.0" } +golem-wit = { version = "0.3.1" } http = { workspace = true } http_02 = { workspace = true } http-body = "1.0.0" # keep in sync with wasmtime diff --git a/golem-worker-executor-base/build.rs b/golem-worker-executor-base/build.rs index 39fa57a99b..9605e4536e 100644 --- a/golem-worker-executor-base/build.rs +++ b/golem-worker-executor-base/build.rs @@ -20,7 +20,23 @@ fn find_package_root(name: &str) -> String { .manifest_path("./Cargo.toml") .exec() .unwrap(); - let package = metadata.packages.iter().find(|p| p.name == name).unwrap(); + + let package = metadata + .packages + .into_iter() + .fold(None, |acc, p| { + if p.name == name { + match acc { + None => Some(p), + Some(cp) if cp.version < p.version => Some(p), + _ => acc, + } + } else { + acc + } + }) + .unwrap(); + package.manifest_path.parent().unwrap().to_string() } diff --git a/golem-worker-executor-base/src/durable_host/golem/mod.rs b/golem-worker-executor-base/src/durable_host/golem/mod.rs index aa422fe623..58fe8e43d3 100644 --- a/golem-worker-executor-base/src/durable_host/golem/mod.rs +++ b/golem-worker-executor-base/src/durable_host/golem/mod.rs @@ -31,7 +31,9 @@ use crate::model::InterruptKind; use crate::preview2::golem; use crate::preview2::golem::api::host::{ ComponentVersion, HostGetWorkers, PersistenceLevel, RetryPolicy, UpdateMode, Uri, + WorkerMetadata, }; +use crate::services::HasWorker; use crate::workerctx::WorkerCtx; use golem_common::model::oplog::{OplogEntry, OplogIndex, WrappedFunctionType}; use golem_common::model::regions::OplogRegion; @@ -462,6 +464,39 @@ impl golem::api::host::Host for DurableWorkerCtx { Ok(()) } + + async fn get_self_metadata(&mut self) -> anyhow::Result { + record_host_function_call("golem::api", "get_self_metadata"); + let metadata = self.public_state.worker().get_metadata().await?; + Ok(metadata.into()) + } + + async fn get_worker_metadata( + &mut self, + worker_id: golem::api::host::WorkerId, + ) -> anyhow::Result> { + record_host_function_call("golem::api", "get_worker_metadata"); + let worker_id: WorkerId = worker_id.into(); + let owned_worker_id = OwnedWorkerId::new(&self.owned_worker_id.account_id, &worker_id); + let metadata = self.state.worker_service.get(&owned_worker_id).await; + + match metadata { + Some(metadata) => { + let last_known_status = Ctx::compute_latest_worker_status( + &self.state, + &owned_worker_id, + &Some(metadata.clone()), + ) + .await?; + let updated_metadata = golem_common::model::WorkerMetadata { + last_known_status, + ..metadata + }; + Ok(Some(updated_metadata.into())) + } + None => Ok(None), + } + } } #[async_trait] @@ -586,6 +621,17 @@ impl golem::api::host::Host for &mut DurableWorkerCtx { ) -> anyhow::Result<()> { (*self).update_worker(worker_id, target_version, mode).await } + + async fn get_self_metadata(&mut self) -> anyhow::Result { + (*self).get_self_metadata().await + } + + async fn get_worker_metadata( + &mut self, + worker_id: golem::api::host::WorkerId, + ) -> anyhow::Result> { + (*self).get_worker_metadata(worker_id).await + } } impl From for golem::api::host::WorkerId { diff --git a/golem-worker-executor-base/src/durable_host/mod.rs b/golem-worker-executor-base/src/durable_host/mod.rs index 2ec29bd022..be9a42dbb9 100644 --- a/golem-worker-executor-base/src/durable_host/mod.rs +++ b/golem-worker-executor-base/src/durable_host/mod.rs @@ -35,7 +35,7 @@ use crate::services::key_value::KeyValueService; use crate::services::promise::PromiseService; use crate::services::worker::WorkerService; use crate::services::worker_event::WorkerEventService; -use crate::services::{worker_enumeration, HasAll, HasOplog, HasWorker}; +use crate::services::{golem_config, worker_enumeration, HasAll, HasConfig, HasOplog, HasWorker}; use crate::wasi_host::managed_stdio::ManagedStandardIo; use crate::workerctx::{ ExternalOperations, IndexedResourceStore, InvocationHooks, InvocationManagement, IoCapturing, @@ -1012,7 +1012,7 @@ impl> ExternalOperations for Dur last_error_and_retry_count(this, owned_worker_id).await } - async fn compute_latest_worker_status + Send + Sync>( + async fn compute_latest_worker_status( this: &T, owned_worker_id: &OwnedWorkerId, metadata: &Option, @@ -1735,6 +1735,12 @@ impl HasOplog for PrivateDurableWorkerState { } } +impl HasConfig for PrivateDurableWorkerState { + fn config(&self) -> Arc { + self.config.clone() + } +} + pub struct PublicDurableWorkerState { promise_service: Arc, event_service: Arc, diff --git a/golem-worker-executor-base/src/worker.rs b/golem-worker-executor-base/src/worker.rs index 466869bd6c..79a3c4ec62 100644 --- a/golem-worker-executor-base/src/worker.rs +++ b/golem-worker-executor-base/src/worker.rs @@ -1684,7 +1684,7 @@ pub async fn calculate_last_known_status( metadata: &Option, ) -> Result where - T: HasOplogService + HasWorkerService + HasConfig, + T: HasOplogService + HasConfig, { let last_known = metadata .as_ref() diff --git a/golem-worker-executor-base/src/workerctx.rs b/golem-worker-executor-base/src/workerctx.rs index cc9a179dab..0d705057ed 100644 --- a/golem-worker-executor-base/src/workerctx.rs +++ b/golem-worker-executor-base/src/workerctx.rs @@ -41,7 +41,9 @@ use crate::services::scheduler::SchedulerService; use crate::services::worker::WorkerService; use crate::services::worker_event::WorkerEventService; use crate::services::worker_proxy::WorkerProxy; -use crate::services::{worker_enumeration, HasAll, HasOplog, HasWorker}; +use crate::services::{ + worker_enumeration, HasAll, HasConfig, HasOplog, HasOplogService, HasWorker, +}; use crate::worker::{RetryDecision, Worker}; /// WorkerCtx is the primary customization and extension point of worker executor. It is the context @@ -330,7 +332,7 @@ pub trait ExternalOperations { ) -> Option; /// Gets a best-effort current worker status without activating the worker - async fn compute_latest_worker_status + Send + Sync>( + async fn compute_latest_worker_status( this: &T, owned_worker_id: &OwnedWorkerId, metadata: &Option, diff --git a/golem-worker-executor-base/tests/api.rs b/golem-worker-executor-base/tests/api.rs index 8ed0facd09..09377767d6 100644 --- a/golem-worker-executor-base/tests/api.rs +++ b/golem-worker-executor-base/tests/api.rs @@ -438,6 +438,92 @@ async fn get_workers_from_worker() { drop(executor); } +#[tokio::test] +#[tracing::instrument] +async fn get_metadata_from_worker() { + let context = TestContext::new(); + let mut executor = start(&context).await.unwrap(); + + let component_id = executor.store_component("runtime-service").await; + + let worker_id1 = executor + .start_worker(&component_id, "runtime-service-1") + .await; + + let worker_id2 = executor + .start_worker(&component_id, "runtime-service-2") + .await; + + fn get_worker_id_val(worker_id: &WorkerId) -> Value { + let component_id_val = { + let (high, low) = worker_id.component_id.0.as_u64_pair(); + Value::Record(vec![Value::Record(vec![Value::U64(high), Value::U64(low)])]) + }; + + Value::Record(vec![ + component_id_val, + Value::String(worker_id.worker_name.clone()), + ]) + } + + async fn get_check( + worker_id1: &WorkerId, + worker_id2: &WorkerId, + executor: &mut TestWorkerExecutor, + ) { + let worker_id_val1 = get_worker_id_val(worker_id1); + + let result = executor + .invoke_and_await(worker_id1, "golem:it/api.{get-self-metadata}", vec![]) + .await + .unwrap(); + + match result.first() { + Some(Value::Record(values)) if !values.is_empty() => { + let id_val = values.first().unwrap(); + check!(worker_id_val1 == *id_val); + } + _ => { + check!(false); + } + } + + let worker_id_val2 = get_worker_id_val(worker_id2); + + let result = executor + .invoke_and_await( + worker_id1, + "golem:it/api.{get-worker-metadata}", + vec![worker_id_val2.clone()], + ) + .await + .unwrap(); + + match result.first() { + Some(Value::Option(value)) if value.is_some() => { + let result = *value.clone().unwrap(); + match result { + Value::Record(values) if !values.is_empty() => { + let id_val = values.first().unwrap(); + check!(worker_id_val2 == *id_val); + } + _ => { + check!(false); + } + } + } + _ => { + check!(false); + } + } + } + + get_check(&worker_id1, &worker_id2, &mut executor).await; + get_check(&worker_id2, &worker_id1, &mut executor).await; + + drop(executor); +} + #[tokio::test] #[tracing::instrument] async fn invoking_with_same_idempotency_key_is_idempotent() { diff --git a/golem-worker-executor-base/tests/common/mod.rs b/golem-worker-executor-base/tests/common/mod.rs index af8adb7d91..1ed8e5b4c8 100644 --- a/golem-worker-executor-base/tests/common/mod.rs +++ b/golem-worker-executor-base/tests/common/mod.rs @@ -45,7 +45,7 @@ use golem_worker_executor_base::services::shard_manager::ShardManagerService; use golem_worker_executor_base::services::worker::WorkerService; use golem_worker_executor_base::services::worker_activator::WorkerActivator; use golem_worker_executor_base::services::worker_event::WorkerEventService; -use golem_worker_executor_base::services::{All, HasAll}; +use golem_worker_executor_base::services::{All, HasAll, HasConfig, HasOplogService}; use golem_worker_executor_base::wasi_host::create_linker; use golem_worker_executor_base::workerctx::{ ExternalOperations, FuelManagement, IndexedResourceStore, InvocationHooks, @@ -429,7 +429,7 @@ impl ExternalOperations for TestWorkerCtx { .await } - async fn compute_latest_worker_status + Send + Sync>( + async fn compute_latest_worker_status( this: &T, owned_worker_id: &OwnedWorkerId, metadata: &Option, diff --git a/golem-worker-executor/src/context.rs b/golem-worker-executor/src/context.rs index a066cc9f89..e137e59cda 100644 --- a/golem-worker-executor/src/context.rs +++ b/golem-worker-executor/src/context.rs @@ -45,7 +45,9 @@ use golem_worker_executor_base::services::scheduler::SchedulerService; use golem_worker_executor_base::services::worker::WorkerService; use golem_worker_executor_base::services::worker_event::WorkerEventService; use golem_worker_executor_base::services::worker_proxy::WorkerProxy; -use golem_worker_executor_base::services::{worker_enumeration, HasAll}; +use golem_worker_executor_base::services::{ + worker_enumeration, HasAll, HasConfig, HasOplogService, +}; use golem_worker_executor_base::worker::{RetryDecision, Worker}; use golem_worker_executor_base::workerctx::{ ExternalOperations, FuelManagement, IndexedResourceStore, InvocationHooks, @@ -96,7 +98,7 @@ impl ExternalOperations for Context { DurableWorkerCtx::::get_last_error_and_retry_count(this, worker_id).await } - async fn compute_latest_worker_status + Send + Sync>( + async fn compute_latest_worker_status( this: &T, worker_id: &OwnedWorkerId, metadata: &Option, diff --git a/kube/golem-chart/templates/deployment.yaml b/kube/golem-chart/templates/deployment.yaml index 5db7b5ee13..054129fe06 100644 --- a/kube/golem-chart/templates/deployment.yaml +++ b/kube/golem-chart/templates/deployment.yaml @@ -285,6 +285,17 @@ spec: value: {{ .Values.workerService.postgres.schema }} - name: GOLEM__DB__CONFIG__HOST value: {{ .Values.workerService.postgres.host }} +{{- if .Values.workerService.postgres.password.plain }} + - name: GOLEM__DB__CONFIG__PASSWORD + value: "{{ .Values.workerService.postgres.password.plain }}" +{{- end }} +{{- if .Values.workerService.postgres.password.fromSecret.name }} + - name: GOLEM__DB__CONFIG__PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.workerService.postgres.password.fromSecret.name }} + key: {{ .Values.workerService.postgres.password.fromSecret.key }} +{{- end }} - name: GOLEM__DB__CONFIG__PORT value: "{{ .Values.workerService.postgres.port }}" - name: GOLEM__DB__CONFIG__USERNAME diff --git a/test-components/runtime-service.wasm b/test-components/runtime-service.wasm index 8ec229e686f6acadd503d256c392f3974adb51e7..b1b1a6ec313c8d16bd2e26872a0097da3da8ca40 100755 GIT binary patch delta 66516 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 delta 63109 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 G>3;xQ&^u57 diff --git a/test-components/runtime-service/src/bindings.rs b/test-components/runtime-service/src/bindings.rs index 47a5c4b086..c692612d2e 100644 --- a/test-components/runtime-service/src/bindings.rs +++ b/test-components/runtime-service/src/bindings.rs @@ -1373,6 +1373,212 @@ pub mod golem { ); } } + #[allow(unused_unsafe, clippy::all)] + /// Get current worker metadata + pub fn get_self_metadata() -> WorkerMetadata { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 64]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 64]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "golem:api/host@0.2.0")] + extern "C" { + #[link_name = "get-self-metadata"] + fn wit_import(_: *mut u8); + } + + #[cfg(not(target_arch = "wasm32"))] + fn wit_import(_: *mut u8) { + unreachable!() + } + wit_import(ptr0); + let l1 = *ptr0.add(0).cast::(); + let l2 = *ptr0.add(8).cast::(); + let l3 = *ptr0.add(16).cast::<*mut u8>(); + let l4 = *ptr0.add(20).cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts(l3.cast(), len5, len5); + let l6 = *ptr0.add(24).cast::<*mut u8>(); + let l7 = *ptr0.add(28).cast::(); + let base11 = l6; + let len11 = l7; + let mut result11 = _rt::Vec::with_capacity(len11); + for i in 0..len11 { + let base = base11.add(i * 8); + let e11 = { + let l8 = *base.add(0).cast::<*mut u8>(); + let l9 = *base.add(4).cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts(l8.cast(), len10, len10); + + _rt::string_lift(bytes10) + }; + result11.push(e11); + } + _rt::cabi_dealloc(base11, len11 * 8, 4); + let l12 = *ptr0.add(32).cast::<*mut u8>(); + let l13 = *ptr0.add(36).cast::(); + let base20 = l12; + let len20 = l13; + let mut result20 = _rt::Vec::with_capacity(len20); + for i in 0..len20 { + let base = base20.add(i * 16); + let e20 = { + let l14 = *base.add(0).cast::<*mut u8>(); + let l15 = *base.add(4).cast::(); + let len16 = l15; + let bytes16 = _rt::Vec::from_raw_parts(l14.cast(), len16, len16); + let l17 = *base.add(8).cast::<*mut u8>(); + let l18 = *base.add(12).cast::(); + let len19 = l18; + let bytes19 = _rt::Vec::from_raw_parts(l17.cast(), len19, len19); + + (_rt::string_lift(bytes16), _rt::string_lift(bytes19)) + }; + result20.push(e20); + } + _rt::cabi_dealloc(base20, len20 * 16, 4); + let l21 = i32::from(*ptr0.add(40).cast::()); + let l22 = *ptr0.add(48).cast::(); + let l23 = *ptr0.add(56).cast::(); + WorkerMetadata { + worker_id: WorkerId { + component_id: ComponentId { + uuid: Uuid { + high_bits: l1 as u64, + low_bits: l2 as u64, + }, + }, + worker_name: _rt::string_lift(bytes5), + }, + args: result11, + env: result20, + status: WorkerStatus::_lift(l21 as u8), + component_version: l22 as u64, + retry_count: l23 as u64, + } + } + } + #[allow(unused_unsafe, clippy::all)] + /// Get worker metadata + pub fn get_worker_metadata(worker_id: &WorkerId) -> Option { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 72]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 72]); + let WorkerId { + component_id: component_id0, + worker_name: worker_name0, + } = worker_id; + let ComponentId { uuid: uuid1 } = component_id0; + let Uuid { + high_bits: high_bits2, + low_bits: low_bits2, + } = uuid1; + let vec3 = worker_name0; + let ptr3 = vec3.as_ptr().cast::(); + let len3 = vec3.len(); + let ptr4 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "golem:api/host@0.2.0")] + extern "C" { + #[link_name = "get-worker-metadata"] + fn wit_import(_: i64, _: i64, _: *mut u8, _: usize, _: *mut u8); + } + + #[cfg(not(target_arch = "wasm32"))] + fn wit_import(_: i64, _: i64, _: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + wit_import( + _rt::as_i64(high_bits2), + _rt::as_i64(low_bits2), + ptr3.cast_mut(), + len3, + ptr4, + ); + let l5 = i32::from(*ptr4.add(0).cast::()); + match l5 { + 0 => None, + 1 => { + let e = { + let l6 = *ptr4.add(8).cast::(); + let l7 = *ptr4.add(16).cast::(); + let l8 = *ptr4.add(24).cast::<*mut u8>(); + let l9 = *ptr4.add(28).cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts(l8.cast(), len10, len10); + let l11 = *ptr4.add(32).cast::<*mut u8>(); + let l12 = *ptr4.add(36).cast::(); + let base16 = l11; + let len16 = l12; + let mut result16 = _rt::Vec::with_capacity(len16); + for i in 0..len16 { + let base = base16.add(i * 8); + let e16 = { + let l13 = *base.add(0).cast::<*mut u8>(); + let l14 = *base.add(4).cast::(); + let len15 = l14; + let bytes15 = + _rt::Vec::from_raw_parts(l13.cast(), len15, len15); + + _rt::string_lift(bytes15) + }; + result16.push(e16); + } + _rt::cabi_dealloc(base16, len16 * 8, 4); + let l17 = *ptr4.add(40).cast::<*mut u8>(); + let l18 = *ptr4.add(44).cast::(); + let base25 = l17; + let len25 = l18; + let mut result25 = _rt::Vec::with_capacity(len25); + for i in 0..len25 { + let base = base25.add(i * 16); + let e25 = { + let l19 = *base.add(0).cast::<*mut u8>(); + let l20 = *base.add(4).cast::(); + let len21 = l20; + let bytes21 = + _rt::Vec::from_raw_parts(l19.cast(), len21, len21); + let l22 = *base.add(8).cast::<*mut u8>(); + let l23 = *base.add(12).cast::(); + let len24 = l23; + let bytes24 = + _rt::Vec::from_raw_parts(l22.cast(), len24, len24); + + (_rt::string_lift(bytes21), _rt::string_lift(bytes24)) + }; + result25.push(e25); + } + _rt::cabi_dealloc(base25, len25 * 16, 4); + let l26 = i32::from(*ptr4.add(48).cast::()); + let l27 = *ptr4.add(56).cast::(); + let l28 = *ptr4.add(64).cast::(); + + WorkerMetadata { + worker_id: WorkerId { + component_id: ComponentId { + uuid: Uuid { + high_bits: l6 as u64, + low_bits: l7 as u64, + }, + }, + worker_name: _rt::string_lift(bytes10), + }, + args: result16, + env: result25, + status: WorkerStatus::_lift(l26 as u8), + component_version: l27 as u64, + retry_count: l28 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } } } #[allow(dead_code)] @@ -11771,6 +11977,312 @@ pub mod exports { } #[doc(hidden)] #[allow(non_snake_case)] + pub unsafe fn _export_get_self_metadata_cabi() -> *mut u8 { + #[cfg(target_arch = "wasm32")] + _rt::run_ctors_once(); + let result0 = T::get_self_metadata(); + let ptr1 = _RET_AREA.0.as_mut_ptr().cast::(); + let super::super::super::super::golem::api::host::WorkerMetadata { + worker_id: worker_id2, + args: args2, + env: env2, + status: status2, + component_version: component_version2, + retry_count: retry_count2, + } = result0; + let super::super::super::super::golem::api::host::WorkerId { + component_id: component_id3, + worker_name: worker_name3, + } = worker_id2; + let super::super::super::super::golem::api::host::ComponentId { uuid: uuid4 } = + component_id3; + let super::super::super::super::golem::api::host::Uuid { + high_bits: high_bits5, + low_bits: low_bits5, + } = uuid4; + *ptr1.add(0).cast::() = _rt::as_i64(high_bits5); + *ptr1.add(8).cast::() = _rt::as_i64(low_bits5); + let vec6 = (worker_name3.into_bytes()).into_boxed_slice(); + let ptr6 = vec6.as_ptr().cast::(); + let len6 = vec6.len(); + ::core::mem::forget(vec6); + *ptr1.add(20).cast::() = len6; + *ptr1.add(16).cast::<*mut u8>() = ptr6.cast_mut(); + let vec8 = args2; + let len8 = vec8.len(); + let layout8 = _rt::alloc::Layout::from_size_align_unchecked(vec8.len() * 8, 4); + let result8 = if layout8.size() != 0 { + let ptr = _rt::alloc::alloc(layout8).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout8); + } + ptr + } else { + { + ::core::ptr::null_mut() + } + }; + for (i, e) in vec8.into_iter().enumerate() { + let base = result8.add(i * 8); + { + let vec7 = (e.into_bytes()).into_boxed_slice(); + let ptr7 = vec7.as_ptr().cast::(); + let len7 = vec7.len(); + ::core::mem::forget(vec7); + *base.add(4).cast::() = len7; + *base.add(0).cast::<*mut u8>() = ptr7.cast_mut(); + } + } + *ptr1.add(28).cast::() = len8; + *ptr1.add(24).cast::<*mut u8>() = result8; + let vec12 = env2; + let len12 = vec12.len(); + let layout12 = + _rt::alloc::Layout::from_size_align_unchecked(vec12.len() * 16, 4); + let result12 = if layout12.size() != 0 { + let ptr = _rt::alloc::alloc(layout12).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout12); + } + ptr + } else { + { + ::core::ptr::null_mut() + } + }; + for (i, e) in vec12.into_iter().enumerate() { + let base = result12.add(i * 16); + { + let (t9_0, t9_1) = e; + let vec10 = (t9_0.into_bytes()).into_boxed_slice(); + let ptr10 = vec10.as_ptr().cast::(); + let len10 = vec10.len(); + ::core::mem::forget(vec10); + *base.add(4).cast::() = len10; + *base.add(0).cast::<*mut u8>() = ptr10.cast_mut(); + let vec11 = (t9_1.into_bytes()).into_boxed_slice(); + let ptr11 = vec11.as_ptr().cast::(); + let len11 = vec11.len(); + ::core::mem::forget(vec11); + *base.add(12).cast::() = len11; + *base.add(8).cast::<*mut u8>() = ptr11.cast_mut(); + } + } + *ptr1.add(36).cast::() = len12; + *ptr1.add(32).cast::<*mut u8>() = result12; + *ptr1.add(40).cast::() = (status2.clone() as i32) as u8; + *ptr1.add(48).cast::() = _rt::as_i64(component_version2); + *ptr1.add(56).cast::() = _rt::as_i64(retry_count2); + ptr1 + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn __post_return_get_self_metadata(arg0: *mut u8) { + let l0 = *arg0.add(16).cast::<*mut u8>(); + let l1 = *arg0.add(20).cast::(); + _rt::cabi_dealloc(l0, l1, 1); + let l4 = *arg0.add(24).cast::<*mut u8>(); + let l5 = *arg0.add(28).cast::(); + let base6 = l4; + let len6 = l5; + for i in 0..len6 { + let base = base6.add(i * 8); + { + let l2 = *base.add(0).cast::<*mut u8>(); + let l3 = *base.add(4).cast::(); + _rt::cabi_dealloc(l2, l3, 1); + } + } + _rt::cabi_dealloc(base6, len6 * 8, 4); + let l11 = *arg0.add(32).cast::<*mut u8>(); + let l12 = *arg0.add(36).cast::(); + let base13 = l11; + let len13 = l12; + for i in 0..len13 { + let base = base13.add(i * 16); + { + let l7 = *base.add(0).cast::<*mut u8>(); + let l8 = *base.add(4).cast::(); + _rt::cabi_dealloc(l7, l8, 1); + let l9 = *base.add(8).cast::<*mut u8>(); + let l10 = *base.add(12).cast::(); + _rt::cabi_dealloc(l9, l10, 1); + } + } + _rt::cabi_dealloc(base13, len13 * 16, 4); + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn _export_get_worker_metadata_cabi( + arg0: i64, + arg1: i64, + arg2: *mut u8, + arg3: usize, + ) -> *mut u8 { + #[cfg(target_arch = "wasm32")] + _rt::run_ctors_once(); + let len0 = arg3; + let bytes0 = _rt::Vec::from_raw_parts(arg2.cast(), len0, len0); + let result1 = T::get_worker_metadata( + super::super::super::super::golem::api::host::WorkerId { + component_id: + super::super::super::super::golem::api::host::ComponentId { + uuid: super::super::super::super::golem::api::host::Uuid { + high_bits: arg0 as u64, + low_bits: arg1 as u64, + }, + }, + worker_name: _rt::string_lift(bytes0), + }, + ); + let ptr2 = _RET_AREA.0.as_mut_ptr().cast::(); + match result1 { + Some(e) => { + *ptr2.add(0).cast::() = (1i32) as u8; + let super::super::super::super::golem::api::host::WorkerMetadata { + worker_id: worker_id3, + args: args3, + env: env3, + status: status3, + component_version: component_version3, + retry_count: retry_count3, + } = e; + let super::super::super::super::golem::api::host::WorkerId { + component_id: component_id4, + worker_name: worker_name4, + } = worker_id3; + let super::super::super::super::golem::api::host::ComponentId { + uuid: uuid5, + } = component_id4; + let super::super::super::super::golem::api::host::Uuid { + high_bits: high_bits6, + low_bits: low_bits6, + } = uuid5; + *ptr2.add(8).cast::() = _rt::as_i64(high_bits6); + *ptr2.add(16).cast::() = _rt::as_i64(low_bits6); + let vec7 = (worker_name4.into_bytes()).into_boxed_slice(); + let ptr7 = vec7.as_ptr().cast::(); + let len7 = vec7.len(); + ::core::mem::forget(vec7); + *ptr2.add(28).cast::() = len7; + *ptr2.add(24).cast::<*mut u8>() = ptr7.cast_mut(); + let vec9 = args3; + let len9 = vec9.len(); + let layout9 = + _rt::alloc::Layout::from_size_align_unchecked(vec9.len() * 8, 4); + let result9 = if layout9.size() != 0 { + let ptr = _rt::alloc::alloc(layout9).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout9); + } + ptr + } else { + { + ::core::ptr::null_mut() + } + }; + for (i, e) in vec9.into_iter().enumerate() { + let base = result9.add(i * 8); + { + let vec8 = (e.into_bytes()).into_boxed_slice(); + let ptr8 = vec8.as_ptr().cast::(); + let len8 = vec8.len(); + ::core::mem::forget(vec8); + *base.add(4).cast::() = len8; + *base.add(0).cast::<*mut u8>() = ptr8.cast_mut(); + } + } + *ptr2.add(36).cast::() = len9; + *ptr2.add(32).cast::<*mut u8>() = result9; + let vec13 = env3; + let len13 = vec13.len(); + let layout13 = + _rt::alloc::Layout::from_size_align_unchecked(vec13.len() * 16, 4); + let result13 = if layout13.size() != 0 { + let ptr = _rt::alloc::alloc(layout13).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout13); + } + ptr + } else { + { + ::core::ptr::null_mut() + } + }; + for (i, e) in vec13.into_iter().enumerate() { + let base = result13.add(i * 16); + { + let (t10_0, t10_1) = e; + let vec11 = (t10_0.into_bytes()).into_boxed_slice(); + let ptr11 = vec11.as_ptr().cast::(); + let len11 = vec11.len(); + ::core::mem::forget(vec11); + *base.add(4).cast::() = len11; + *base.add(0).cast::<*mut u8>() = ptr11.cast_mut(); + let vec12 = (t10_1.into_bytes()).into_boxed_slice(); + let ptr12 = vec12.as_ptr().cast::(); + let len12 = vec12.len(); + ::core::mem::forget(vec12); + *base.add(12).cast::() = len12; + *base.add(8).cast::<*mut u8>() = ptr12.cast_mut(); + } + } + *ptr2.add(44).cast::() = len13; + *ptr2.add(40).cast::<*mut u8>() = result13; + *ptr2.add(48).cast::() = (status3.clone() as i32) as u8; + *ptr2.add(56).cast::() = _rt::as_i64(component_version3); + *ptr2.add(64).cast::() = _rt::as_i64(retry_count3); + } + None => { + *ptr2.add(0).cast::() = (0i32) as u8; + } + }; + ptr2 + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn __post_return_get_worker_metadata(arg0: *mut u8) { + let l0 = i32::from(*arg0.add(0).cast::()); + match l0 { + 0 => (), + _ => { + let l1 = *arg0.add(24).cast::<*mut u8>(); + let l2 = *arg0.add(28).cast::(); + _rt::cabi_dealloc(l1, l2, 1); + let l5 = *arg0.add(32).cast::<*mut u8>(); + let l6 = *arg0.add(36).cast::(); + let base7 = l5; + let len7 = l6; + for i in 0..len7 { + let base = base7.add(i * 8); + { + let l3 = *base.add(0).cast::<*mut u8>(); + let l4 = *base.add(4).cast::(); + _rt::cabi_dealloc(l3, l4, 1); + } + } + _rt::cabi_dealloc(base7, len7 * 8, 4); + let l12 = *arg0.add(40).cast::<*mut u8>(); + let l13 = *arg0.add(44).cast::(); + let base14 = l12; + let len14 = l13; + for i in 0..len14 { + let base = base14.add(i * 16); + { + let l8 = *base.add(0).cast::<*mut u8>(); + let l9 = *base.add(4).cast::(); + _rt::cabi_dealloc(l8, l9, 1); + let l10 = *base.add(8).cast::<*mut u8>(); + let l11 = *base.add(12).cast::(); + _rt::cabi_dealloc(l10, l11, 1); + } + } + _rt::cabi_dealloc(base14, len14 * 16, 4); + } + } + } + #[doc(hidden)] + #[allow(non_snake_case)] pub unsafe fn _export_update_worker_cabi( arg0: i64, arg1: i64, @@ -11811,6 +12323,8 @@ pub mod exports { filter: Option, precise: bool, ) -> _rt::Vec; + fn get_self_metadata() -> WorkerMetadata; + fn get_worker_metadata(worker_id: WorkerId) -> Option; fn update_worker( worker_id: WorkerId, component_version: ComponentVersion, @@ -11820,59 +12334,75 @@ pub mod exports { #[doc(hidden)] macro_rules! __export_golem_it_api_cabi{ - ($ty:ident with_types_in $($path_to_types:tt)*) => (const _: () = { + ($ty:ident with_types_in $($path_to_types:tt)*) => (const _: () = { - #[export_name = "golem:it/api#get-self-uri"] - unsafe extern "C" fn export_get_self_uri(arg0: *mut u8,arg1: usize,) -> *mut u8 { - $($path_to_types)*::_export_get_self_uri_cabi::<$ty>(arg0, arg1) - } - #[export_name = "cabi_post_golem:it/api#get-self-uri"] - unsafe extern "C" fn _post_return_get_self_uri(arg0: *mut u8,) { - $($path_to_types)*::__post_return_get_self_uri::<$ty>(arg0) - } - #[export_name = "golem:it/api#jump"] - unsafe extern "C" fn export_jump() -> i64 { - $($path_to_types)*::_export_jump_cabi::<$ty>() - } - #[export_name = "golem:it/api#fail-with-custom-max-retries"] - unsafe extern "C" fn export_fail_with_custom_max_retries(arg0: i64,) { - $($path_to_types)*::_export_fail_with_custom_max_retries_cabi::<$ty>(arg0) - } - #[export_name = "golem:it/api#explicit-commit"] - unsafe extern "C" fn export_explicit_commit(arg0: i32,) { - $($path_to_types)*::_export_explicit_commit_cabi::<$ty>(arg0) - } - #[export_name = "golem:it/api#atomic-region"] - unsafe extern "C" fn export_atomic_region() { - $($path_to_types)*::_export_atomic_region_cabi::<$ty>() - } - #[export_name = "golem:it/api#idempotence-flag"] - unsafe extern "C" fn export_idempotence_flag(arg0: i32,) { - $($path_to_types)*::_export_idempotence_flag_cabi::<$ty>(arg0) - } - #[export_name = "golem:it/api#persist-nothing"] - unsafe extern "C" fn export_persist_nothing() { - $($path_to_types)*::_export_persist_nothing_cabi::<$ty>() - } - #[export_name = "golem:it/api#get-workers"] - unsafe extern "C" fn export_get_workers(arg0: i64,arg1: i64,arg2: i32,arg3: *mut u8,arg4: usize,arg5: i32,) -> *mut u8 { - $($path_to_types)*::_export_get_workers_cabi::<$ty>(arg0, arg1, arg2, arg3, arg4, arg5) - } - #[export_name = "cabi_post_golem:it/api#get-workers"] - unsafe extern "C" fn _post_return_get_workers(arg0: *mut u8,) { - $($path_to_types)*::__post_return_get_workers::<$ty>(arg0) - } - #[export_name = "golem:it/api#update-worker"] - unsafe extern "C" fn export_update_worker(arg0: i64,arg1: i64,arg2: *mut u8,arg3: usize,arg4: i64,arg5: i32,) { - $($path_to_types)*::_export_update_worker_cabi::<$ty>(arg0, arg1, arg2, arg3, arg4, arg5) - } - };); + #[export_name = "golem:it/api#get-self-uri"] + unsafe extern "C" fn export_get_self_uri(arg0: *mut u8,arg1: usize,) -> *mut u8 { + $($path_to_types)*::_export_get_self_uri_cabi::<$ty>(arg0, arg1) + } + #[export_name = "cabi_post_golem:it/api#get-self-uri"] + unsafe extern "C" fn _post_return_get_self_uri(arg0: *mut u8,) { + $($path_to_types)*::__post_return_get_self_uri::<$ty>(arg0) + } + #[export_name = "golem:it/api#jump"] + unsafe extern "C" fn export_jump() -> i64 { + $($path_to_types)*::_export_jump_cabi::<$ty>() + } + #[export_name = "golem:it/api#fail-with-custom-max-retries"] + unsafe extern "C" fn export_fail_with_custom_max_retries(arg0: i64,) { + $($path_to_types)*::_export_fail_with_custom_max_retries_cabi::<$ty>(arg0) + } + #[export_name = "golem:it/api#explicit-commit"] + unsafe extern "C" fn export_explicit_commit(arg0: i32,) { + $($path_to_types)*::_export_explicit_commit_cabi::<$ty>(arg0) + } + #[export_name = "golem:it/api#atomic-region"] + unsafe extern "C" fn export_atomic_region() { + $($path_to_types)*::_export_atomic_region_cabi::<$ty>() } + #[export_name = "golem:it/api#idempotence-flag"] + unsafe extern "C" fn export_idempotence_flag(arg0: i32,) { + $($path_to_types)*::_export_idempotence_flag_cabi::<$ty>(arg0) + } + #[export_name = "golem:it/api#persist-nothing"] + unsafe extern "C" fn export_persist_nothing() { + $($path_to_types)*::_export_persist_nothing_cabi::<$ty>() + } + #[export_name = "golem:it/api#get-workers"] + unsafe extern "C" fn export_get_workers(arg0: i64,arg1: i64,arg2: i32,arg3: *mut u8,arg4: usize,arg5: i32,) -> *mut u8 { + $($path_to_types)*::_export_get_workers_cabi::<$ty>(arg0, arg1, arg2, arg3, arg4, arg5) + } + #[export_name = "cabi_post_golem:it/api#get-workers"] + unsafe extern "C" fn _post_return_get_workers(arg0: *mut u8,) { + $($path_to_types)*::__post_return_get_workers::<$ty>(arg0) + } + #[export_name = "golem:it/api#get-self-metadata"] + unsafe extern "C" fn export_get_self_metadata() -> *mut u8 { + $($path_to_types)*::_export_get_self_metadata_cabi::<$ty>() + } + #[export_name = "cabi_post_golem:it/api#get-self-metadata"] + unsafe extern "C" fn _post_return_get_self_metadata(arg0: *mut u8,) { + $($path_to_types)*::__post_return_get_self_metadata::<$ty>(arg0) + } + #[export_name = "golem:it/api#get-worker-metadata"] + unsafe extern "C" fn export_get_worker_metadata(arg0: i64,arg1: i64,arg2: *mut u8,arg3: usize,) -> *mut u8 { + $($path_to_types)*::_export_get_worker_metadata_cabi::<$ty>(arg0, arg1, arg2, arg3) + } + #[export_name = "cabi_post_golem:it/api#get-worker-metadata"] + unsafe extern "C" fn _post_return_get_worker_metadata(arg0: *mut u8,) { + $($path_to_types)*::__post_return_get_worker_metadata::<$ty>(arg0) + } + #[export_name = "golem:it/api#update-worker"] + unsafe extern "C" fn export_update_worker(arg0: i64,arg1: i64,arg2: *mut u8,arg3: usize,arg4: i64,arg5: i32,) { + $($path_to_types)*::_export_update_worker_cabi::<$ty>(arg0, arg1, arg2, arg3, arg4, arg5) + } + };); + } #[doc(hidden)] pub(crate) use __export_golem_it_api_cabi; - #[repr(align(4))] - struct _RetArea([::core::mem::MaybeUninit; 8]); - static mut _RET_AREA: _RetArea = _RetArea([::core::mem::MaybeUninit::uninit(); 8]); + #[repr(align(8))] + struct _RetArea([::core::mem::MaybeUninit; 72]); + static mut _RET_AREA: _RetArea = _RetArea([::core::mem::MaybeUninit::uninit(); 72]); } } } @@ -12183,19 +12713,19 @@ mod _rt { #[doc(hidden)] macro_rules! __export_runtime_service_impl { - ($ty:ident) => (self::export!($ty with_types_in self);); - ($ty:ident with_types_in $($path_to_types_root:tt)*) => ( - $($path_to_types_root)*::exports::golem::it::api::__export_golem_it_api_cabi!($ty with_types_in $($path_to_types_root)*::exports::golem::it::api); - ) - } + ($ty:ident) => (self::export!($ty with_types_in self);); + ($ty:ident with_types_in $($path_to_types_root:tt)*) => ( + $($path_to_types_root)*::exports::golem::it::api::__export_golem_it_api_cabi!($ty with_types_in $($path_to_types_root)*::exports::golem::it::api); + ) + } #[doc(inline)] pub(crate) use __export_runtime_service_impl as export; #[cfg(target_arch = "wasm32")] #[link_section = "component-type:wit-bindgen:0.25.0:runtime-service:encoded world"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 10048] = *b"\ -\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xbaM\x01A\x02\x01A\"\ +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 10189] = *b"\ +\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xc7N\x01A\x02\x01A\"\ \x01B\x0a\x04\0\x08pollable\x03\x01\x01h\0\x01@\x01\x04self\x01\0\x7f\x04\0\x16[\ method]pollable.ready\x01\x02\x01@\x01\x04self\x01\x01\0\x04\0\x16[method]pollab\ le.block\x01\x03\x01p\x01\x01py\x01@\x01\x02in\x04\0\x05\x04\0\x04poll\x01\x06\x03\ @@ -12225,7 +12755,7 @@ pollable\x03\0\0\x01w\x04\0\x07instant\x03\0\x02\x01w\x04\0\x08duration\x03\0\x0 \x01@\0\0\x03\x04\0\x03now\x01\x06\x01@\0\0\x05\x04\0\x0aresolution\x01\x07\x01i\ \x01\x01@\x01\x04when\x03\0\x08\x04\0\x11subscribe-instant\x01\x09\x01@\x01\x04w\ hen\x05\0\x08\x04\0\x12subscribe-duration\x01\x0a\x03\x01!wasi:clocks/monotonic-\ -clock@0.2.0\x05\x03\x02\x03\0\x01\x03uri\x02\x03\0\x02\x08duration\x01Ba\x02\x03\ +clock@0.2.0\x05\x03\x02\x03\0\x01\x03uri\x02\x03\0\x02\x08duration\x01Bf\x02\x03\ \x02\x01\x04\x04\0\x03uri\x03\0\0\x02\x03\x02\x01\x05\x04\0\x08duration\x03\0\x02\ \x01w\x04\0\x0boplog-index\x03\0\x04\x01w\x04\0\x11component-version\x03\0\x06\x01\ r\x02\x09high-bitsw\x08low-bitsw\x04\0\x04uuid\x03\0\x08\x01r\x01\x04uuid\x09\x04\ @@ -12265,139 +12795,142 @@ ation\x01A\x01@\x01\x05begin\x05\x01\0\x04\0\x12mark-end-operation\x01D\x01@\0\0 l\x01H\x01@\0\0\x7f\x04\0\x14get-idempotence-mode\x01I\x01@\x01\x0aidempotent\x7f\ \x01\0\x04\0\x14set-idempotence-mode\x01J\x01@\0\0\x09\x04\0\x18generate-idempot\ ency-key\x01K\x01@\x03\x09worker-id\x0d\x0etarget-version\x07\x04mode\x15\x01\0\x04\ -\0\x0dupdate-worker\x01L\x03\x01\x14golem:api/host@0.2.0\x05\x06\x01B\x04\x04\0\x05\ -error\x03\x01\x01h\0\x01@\x01\x04self\x01\0s\x04\0\x1d[method]error.to-debug-str\ -ing\x01\x02\x03\x01\x13wasi:io/error@0.2.0\x05\x07\x02\x03\0\x04\x05error\x01B(\x02\ -\x03\x02\x01\x08\x04\0\x05error\x03\0\0\x02\x03\x02\x01\x01\x04\0\x08pollable\x03\ -\0\x02\x01i\x01\x01q\x02\x15last-operation-failed\x01\x04\0\x06closed\0\0\x04\0\x0c\ -stream-error\x03\0\x05\x04\0\x0cinput-stream\x03\x01\x04\0\x0doutput-stream\x03\x01\ -\x01h\x07\x01p}\x01j\x01\x0a\x01\x06\x01@\x02\x04self\x09\x03lenw\0\x0b\x04\0\x19\ -[method]input-stream.read\x01\x0c\x04\0\"[method]input-stream.blocking-read\x01\x0c\ -\x01j\x01w\x01\x06\x01@\x02\x04self\x09\x03lenw\0\x0d\x04\0\x19[method]input-str\ -eam.skip\x01\x0e\x04\0\"[method]input-stream.blocking-skip\x01\x0e\x01i\x03\x01@\ -\x01\x04self\x09\0\x0f\x04\0\x1e[method]input-stream.subscribe\x01\x10\x01h\x08\x01\ -@\x01\x04self\x11\0\x0d\x04\0![method]output-stream.check-write\x01\x12\x01j\0\x01\ -\x06\x01@\x02\x04self\x11\x08contents\x0a\0\x13\x04\0\x1b[method]output-stream.w\ -rite\x01\x14\x04\0.[method]output-stream.blocking-write-and-flush\x01\x14\x01@\x01\ -\x04self\x11\0\x13\x04\0\x1b[method]output-stream.flush\x01\x15\x04\0$[method]ou\ -tput-stream.blocking-flush\x01\x15\x01@\x01\x04self\x11\0\x0f\x04\0\x1f[method]o\ -utput-stream.subscribe\x01\x16\x01@\x02\x04self\x11\x03lenw\0\x13\x04\0\"[method\ -]output-stream.write-zeroes\x01\x17\x04\05[method]output-stream.blocking-write-z\ -eroes-and-flush\x01\x17\x01@\x03\x04self\x11\x03src\x09\x03lenw\0\x0d\x04\0\x1c[\ -method]output-stream.splice\x01\x18\x04\0%[method]output-stream.blocking-splice\x01\ -\x18\x03\x01\x15wasi:io/streams@0.2.0\x05\x09\x02\x03\0\x05\x0cinput-stream\x02\x03\ -\0\x05\x0doutput-stream\x01B\xc0\x01\x02\x03\x02\x01\x05\x04\0\x08duration\x03\0\ -\0\x02\x03\x02\x01\x0a\x04\0\x0cinput-stream\x03\0\x02\x02\x03\x02\x01\x0b\x04\0\ -\x0doutput-stream\x03\0\x04\x02\x03\x02\x01\x08\x04\0\x08io-error\x03\0\x06\x02\x03\ -\x02\x01\x01\x04\0\x08pollable\x03\0\x08\x01q\x0a\x03get\0\0\x04head\0\0\x04post\ -\0\0\x03put\0\0\x06delete\0\0\x07connect\0\0\x07options\0\0\x05trace\0\0\x05patc\ -h\0\0\x05other\x01s\0\x04\0\x06method\x03\0\x0a\x01q\x03\x04HTTP\0\0\x05HTTPS\0\0\ -\x05other\x01s\0\x04\0\x06scheme\x03\0\x0c\x01ks\x01k{\x01r\x02\x05rcode\x0e\x09\ -info-code\x0f\x04\0\x11DNS-error-payload\x03\0\x10\x01k}\x01r\x02\x08alert-id\x12\ -\x0dalert-message\x0e\x04\0\x1aTLS-alert-received-payload\x03\0\x13\x01ky\x01r\x02\ -\x0afield-name\x0e\x0afield-size\x15\x04\0\x12field-size-payload\x03\0\x16\x01kw\ -\x01k\x17\x01q'\x0bDNS-timeout\0\0\x09DNS-error\x01\x11\0\x15destination-not-fou\ -nd\0\0\x17destination-unavailable\0\0\x19destination-IP-prohibited\0\0\x19destin\ -ation-IP-unroutable\0\0\x12connection-refused\0\0\x15connection-terminated\0\0\x12\ -connection-timeout\0\0\x17connection-read-timeout\0\0\x18connection-write-timeou\ -t\0\0\x18connection-limit-reached\0\0\x12TLS-protocol-error\0\0\x15TLS-certifica\ -te-error\0\0\x12TLS-alert-received\x01\x14\0\x13HTTP-request-denied\0\0\x1cHTTP-\ -request-length-required\0\0\x16HTTP-request-body-size\x01\x18\0\x1bHTTP-request-\ -method-invalid\0\0\x18HTTP-request-URI-invalid\0\0\x19HTTP-request-URI-too-long\0\ -\0\x20HTTP-request-header-section-size\x01\x15\0\x18HTTP-request-header-size\x01\ -\x19\0!HTTP-request-trailer-section-size\x01\x15\0\x19HTTP-request-trailer-size\x01\ -\x17\0\x18HTTP-response-incomplete\0\0!HTTP-response-header-section-size\x01\x15\ -\0\x19HTTP-response-header-size\x01\x17\0\x17HTTP-response-body-size\x01\x18\0\"\ -HTTP-response-trailer-section-size\x01\x15\0\x1aHTTP-response-trailer-size\x01\x17\ -\0\x1dHTTP-response-transfer-coding\x01\x0e\0\x1cHTTP-response-content-coding\x01\ -\x0e\0\x15HTTP-response-timeout\0\0\x13HTTP-upgrade-failed\0\0\x13HTTP-protocol-\ -error\0\0\x0dloop-detected\0\0\x13configuration-error\0\0\x0einternal-error\x01\x0e\ -\0\x04\0\x0aerror-code\x03\0\x1a\x01q\x03\x0einvalid-syntax\0\0\x09forbidden\0\0\ -\x09immutable\0\0\x04\0\x0cheader-error\x03\0\x1c\x01s\x04\0\x09field-key\x03\0\x1e\ -\x01p}\x04\0\x0bfield-value\x03\0\x20\x04\0\x06fields\x03\x01\x04\0\x07headers\x03\ -\0\"\x04\0\x08trailers\x03\0\"\x04\0\x10incoming-request\x03\x01\x04\0\x10outgoi\ -ng-request\x03\x01\x04\0\x0frequest-options\x03\x01\x04\0\x11response-outparam\x03\ -\x01\x01{\x04\0\x0bstatus-code\x03\0)\x04\0\x11incoming-response\x03\x01\x04\0\x0d\ -incoming-body\x03\x01\x04\0\x0ffuture-trailers\x03\x01\x04\0\x11outgoing-respons\ -e\x03\x01\x04\0\x0doutgoing-body\x03\x01\x04\0\x18future-incoming-response\x03\x01\ -\x01i\"\x01@\0\01\x04\0\x13[constructor]fields\x012\x01o\x02\x1f!\x01p3\x01j\x01\ -1\x01\x1d\x01@\x01\x07entries4\05\x04\0\x18[static]fields.from-list\x016\x01h\"\x01\ -p!\x01@\x02\x04self7\x04name\x1f\08\x04\0\x12[method]fields.get\x019\x01@\x02\x04\ -self7\x04name\x1f\0\x7f\x04\0\x12[method]fields.has\x01:\x01j\0\x01\x1d\x01@\x03\ -\x04self7\x04name\x1f\x05value8\0;\x04\0\x12[method]fields.set\x01<\x01@\x02\x04\ -self7\x04name\x1f\0;\x04\0\x15[method]fields.delete\x01=\x01@\x03\x04self7\x04na\ -me\x1f\x05value!\0;\x04\0\x15[method]fields.append\x01>\x01@\x01\x04self7\04\x04\ -\0\x16[method]fields.entries\x01?\x01@\x01\x04self7\01\x04\0\x14[method]fields.c\ -lone\x01@\x01h%\x01@\x01\x04self\xc1\0\0\x0b\x04\0\x1f[method]incoming-request.m\ -ethod\x01B\x01@\x01\x04self\xc1\0\0\x0e\x04\0([method]incoming-request.path-with\ --query\x01C\x01k\x0d\x01@\x01\x04self\xc1\0\0\xc4\0\x04\0\x1f[method]incoming-re\ -quest.scheme\x01E\x04\0\"[method]incoming-request.authority\x01C\x01i#\x01@\x01\x04\ -self\xc1\0\0\xc6\0\x04\0\x20[method]incoming-request.headers\x01G\x01i,\x01j\x01\ -\xc8\0\0\x01@\x01\x04self\xc1\0\0\xc9\0\x04\0\x20[method]incoming-request.consum\ -e\x01J\x01i&\x01@\x01\x07headers\xc6\0\0\xcb\0\x04\0\x1d[constructor]outgoing-re\ -quest\x01L\x01h&\x01i/\x01j\x01\xce\0\0\x01@\x01\x04self\xcd\0\0\xcf\0\x04\0\x1d\ -[method]outgoing-request.body\x01P\x01@\x01\x04self\xcd\0\0\x0b\x04\0\x1f[method\ -]outgoing-request.method\x01Q\x01j\0\0\x01@\x02\x04self\xcd\0\x06method\x0b\0\xd2\ -\0\x04\0#[method]outgoing-request.set-method\x01S\x01@\x01\x04self\xcd\0\0\x0e\x04\ -\0([method]outgoing-request.path-with-query\x01T\x01@\x02\x04self\xcd\0\x0fpath-\ -with-query\x0e\0\xd2\0\x04\0,[method]outgoing-request.set-path-with-query\x01U\x01\ -@\x01\x04self\xcd\0\0\xc4\0\x04\0\x1f[method]outgoing-request.scheme\x01V\x01@\x02\ -\x04self\xcd\0\x06scheme\xc4\0\0\xd2\0\x04\0#[method]outgoing-request.set-scheme\ -\x01W\x04\0\"[method]outgoing-request.authority\x01T\x01@\x02\x04self\xcd\0\x09a\ -uthority\x0e\0\xd2\0\x04\0&[method]outgoing-request.set-authority\x01X\x01@\x01\x04\ -self\xcd\0\0\xc6\0\x04\0\x20[method]outgoing-request.headers\x01Y\x01i'\x01@\0\0\ -\xda\0\x04\0\x1c[constructor]request-options\x01[\x01h'\x01k\x01\x01@\x01\x04sel\ -f\xdc\0\0\xdd\0\x04\0'[method]request-options.connect-timeout\x01^\x01@\x02\x04s\ -elf\xdc\0\x08duration\xdd\0\0\xd2\0\x04\0+[method]request-options.set-connect-ti\ -meout\x01_\x04\0*[method]request-options.first-byte-timeout\x01^\x04\0.[method]r\ -equest-options.set-first-byte-timeout\x01_\x04\0-[method]request-options.between\ --bytes-timeout\x01^\x04\01[method]request-options.set-between-bytes-timeout\x01_\ -\x01i(\x01i.\x01j\x01\xe1\0\x01\x1b\x01@\x02\x05param\xe0\0\x08response\xe2\0\x01\ -\0\x04\0\x1d[static]response-outparam.set\x01c\x01h+\x01@\x01\x04self\xe4\0\0*\x04\ -\0\x20[method]incoming-response.status\x01e\x01@\x01\x04self\xe4\0\0\xc6\0\x04\0\ -![method]incoming-response.headers\x01f\x01@\x01\x04self\xe4\0\0\xc9\0\x04\0![me\ -thod]incoming-response.consume\x01g\x01h,\x01i\x03\x01j\x01\xe9\0\0\x01@\x01\x04\ -self\xe8\0\0\xea\0\x04\0\x1c[method]incoming-body.stream\x01k\x01i-\x01@\x01\x04\ -this\xc8\0\0\xec\0\x04\0\x1c[static]incoming-body.finish\x01m\x01h-\x01i\x09\x01\ -@\x01\x04self\xee\0\0\xef\0\x04\0![method]future-trailers.subscribe\x01p\x01i$\x01\ -k\xf1\0\x01j\x01\xf2\0\x01\x1b\x01j\x01\xf3\0\0\x01k\xf4\0\x01@\x01\x04self\xee\0\ -\0\xf5\0\x04\0\x1b[method]future-trailers.get\x01v\x01@\x01\x07headers\xc6\0\0\xe1\ -\0\x04\0\x1e[constructor]outgoing-response\x01w\x01h.\x01@\x01\x04self\xf8\0\0*\x04\ -\0%[method]outgoing-response.status-code\x01y\x01@\x02\x04self\xf8\0\x0bstatus-c\ -ode*\0\xd2\0\x04\0)[method]outgoing-response.set-status-code\x01z\x01@\x01\x04se\ -lf\xf8\0\0\xc6\0\x04\0![method]outgoing-response.headers\x01{\x01@\x01\x04self\xf8\ -\0\0\xcf\0\x04\0\x1e[method]outgoing-response.body\x01|\x01h/\x01i\x05\x01j\x01\xfe\ -\0\0\x01@\x01\x04self\xfd\0\0\xff\0\x04\0\x1b[method]outgoing-body.write\x01\x80\ -\x01\x01j\0\x01\x1b\x01@\x02\x04this\xce\0\x08trailers\xf2\0\0\x81\x01\x04\0\x1c\ -[static]outgoing-body.finish\x01\x82\x01\x01h0\x01@\x01\x04self\x83\x01\0\xef\0\x04\ -\0*[method]future-incoming-response.subscribe\x01\x84\x01\x01i+\x01j\x01\x85\x01\ -\x01\x1b\x01j\x01\x86\x01\0\x01k\x87\x01\x01@\x01\x04self\x83\x01\0\x88\x01\x04\0\ -$[method]future-incoming-response.get\x01\x89\x01\x01h\x07\x01k\x1b\x01@\x01\x03\ -err\x8a\x01\0\x8b\x01\x04\0\x0fhttp-error-code\x01\x8c\x01\x03\x01\x15wasi:http/\ -types@0.2.0\x05\x0c\x02\x03\0\x06\x10outgoing-request\x02\x03\0\x06\x0frequest-o\ -ptions\x02\x03\0\x06\x18future-incoming-response\x02\x03\0\x06\x0aerror-code\x01\ -B\x0f\x02\x03\x02\x01\x0d\x04\0\x10outgoing-request\x03\0\0\x02\x03\x02\x01\x0e\x04\ -\0\x0frequest-options\x03\0\x02\x02\x03\x02\x01\x0f\x04\0\x18future-incoming-res\ -ponse\x03\0\x04\x02\x03\x02\x01\x10\x04\0\x0aerror-code\x03\0\x06\x01i\x01\x01i\x03\ -\x01k\x09\x01i\x05\x01j\x01\x0b\x01\x07\x01@\x02\x07request\x08\x07options\x0a\0\ -\x0c\x04\0\x06handle\x01\x0d\x03\x01\x20wasi:http/outgoing-handler@0.2.0\x05\x11\ -\x02\x03\0\x03\x0ccomponent-id\x02\x03\0\x03\x09worker-id\x02\x03\0\x03\x11compo\ -nent-version\x02\x03\0\x03\x0bupdate-mode\x02\x03\0\x03\x11worker-any-filter\x02\ -\x03\0\x03\x0fworker-metadata\x01B\x1f\x02\x03\x02\x01\x12\x04\0\x0ccomponent-id\ -\x03\0\0\x02\x03\x02\x01\x13\x04\0\x09worker-id\x03\0\x02\x02\x03\x02\x01\x14\x04\ -\0\x11component-version\x03\0\x04\x02\x03\x02\x01\x15\x04\0\x0bupdate-mode\x03\0\ -\x06\x02\x03\x02\x01\x16\x04\0\x11worker-any-filter\x03\0\x08\x02\x03\x02\x01\x17\ -\x04\0\x0fworker-metadata\x03\0\x0a\x01@\x01\x0dfunction-names\0s\x04\0\x0cget-s\ -elf-uri\x01\x0c\x01@\0\0w\x04\0\x04jump\x01\x0d\x01@\x01\x0bmax-retriesw\x01\0\x04\ -\0\x1cfail-with-custom-max-retries\x01\x0e\x01@\x01\x08replicas}\x01\0\x04\0\x0f\ -explicit-commit\x01\x0f\x01@\0\x01\0\x04\0\x0datomic-region\x01\x10\x01@\x01\x07\ -enabled\x7f\x01\0\x04\0\x10idempotence-flag\x01\x11\x04\0\x0fpersist-nothing\x01\ -\x10\x01k\x09\x01p\x0b\x01@\x03\x0ccomponent-id\x01\x06filter\x12\x07precise\x7f\ -\0\x13\x04\0\x0bget-workers\x01\x14\x01@\x03\x09worker-id\x03\x11component-versi\ -on\x05\x0bupdate-mode\x07\x01\0\x04\0\x0dupdate-worker\x01\x15\x04\x01\x0cgolem:\ -it/api\x05\x18\x04\x01\x18golem:it/runtime-service\x04\0\x0b\x15\x01\0\x0fruntim\ -e-service\x03\0\0\0G\x09producers\x01\x0cprocessed-by\x02\x0dwit-component\x070.\ -208.1\x10wit-bindgen-rust\x060.25.0"; +\0\x0dupdate-worker\x01L\x01@\0\02\x04\0\x11get-self-metadata\x01M\x01k2\x01@\x01\ +\x09worker-id\x0d\0\xce\0\x04\0\x13get-worker-metadata\x01O\x03\x01\x14golem:api\ +/host@0.2.0\x05\x06\x01B\x04\x04\0\x05error\x03\x01\x01h\0\x01@\x01\x04self\x01\0\ +s\x04\0\x1d[method]error.to-debug-string\x01\x02\x03\x01\x13wasi:io/error@0.2.0\x05\ +\x07\x02\x03\0\x04\x05error\x01B(\x02\x03\x02\x01\x08\x04\0\x05error\x03\0\0\x02\ +\x03\x02\x01\x01\x04\0\x08pollable\x03\0\x02\x01i\x01\x01q\x02\x15last-operation\ +-failed\x01\x04\0\x06closed\0\0\x04\0\x0cstream-error\x03\0\x05\x04\0\x0cinput-s\ +tream\x03\x01\x04\0\x0doutput-stream\x03\x01\x01h\x07\x01p}\x01j\x01\x0a\x01\x06\ +\x01@\x02\x04self\x09\x03lenw\0\x0b\x04\0\x19[method]input-stream.read\x01\x0c\x04\ +\0\"[method]input-stream.blocking-read\x01\x0c\x01j\x01w\x01\x06\x01@\x02\x04sel\ +f\x09\x03lenw\0\x0d\x04\0\x19[method]input-stream.skip\x01\x0e\x04\0\"[method]in\ +put-stream.blocking-skip\x01\x0e\x01i\x03\x01@\x01\x04self\x09\0\x0f\x04\0\x1e[m\ +ethod]input-stream.subscribe\x01\x10\x01h\x08\x01@\x01\x04self\x11\0\x0d\x04\0![\ +method]output-stream.check-write\x01\x12\x01j\0\x01\x06\x01@\x02\x04self\x11\x08\ +contents\x0a\0\x13\x04\0\x1b[method]output-stream.write\x01\x14\x04\0.[method]ou\ +tput-stream.blocking-write-and-flush\x01\x14\x01@\x01\x04self\x11\0\x13\x04\0\x1b\ +[method]output-stream.flush\x01\x15\x04\0$[method]output-stream.blocking-flush\x01\ +\x15\x01@\x01\x04self\x11\0\x0f\x04\0\x1f[method]output-stream.subscribe\x01\x16\ +\x01@\x02\x04self\x11\x03lenw\0\x13\x04\0\"[method]output-stream.write-zeroes\x01\ +\x17\x04\05[method]output-stream.blocking-write-zeroes-and-flush\x01\x17\x01@\x03\ +\x04self\x11\x03src\x09\x03lenw\0\x0d\x04\0\x1c[method]output-stream.splice\x01\x18\ +\x04\0%[method]output-stream.blocking-splice\x01\x18\x03\x01\x15wasi:io/streams@\ +0.2.0\x05\x09\x02\x03\0\x05\x0cinput-stream\x02\x03\0\x05\x0doutput-stream\x01B\xc0\ +\x01\x02\x03\x02\x01\x05\x04\0\x08duration\x03\0\0\x02\x03\x02\x01\x0a\x04\0\x0c\ +input-stream\x03\0\x02\x02\x03\x02\x01\x0b\x04\0\x0doutput-stream\x03\0\x04\x02\x03\ +\x02\x01\x08\x04\0\x08io-error\x03\0\x06\x02\x03\x02\x01\x01\x04\0\x08pollable\x03\ +\0\x08\x01q\x0a\x03get\0\0\x04head\0\0\x04post\0\0\x03put\0\0\x06delete\0\0\x07c\ +onnect\0\0\x07options\0\0\x05trace\0\0\x05patch\0\0\x05other\x01s\0\x04\0\x06met\ +hod\x03\0\x0a\x01q\x03\x04HTTP\0\0\x05HTTPS\0\0\x05other\x01s\0\x04\0\x06scheme\x03\ +\0\x0c\x01ks\x01k{\x01r\x02\x05rcode\x0e\x09info-code\x0f\x04\0\x11DNS-error-pay\ +load\x03\0\x10\x01k}\x01r\x02\x08alert-id\x12\x0dalert-message\x0e\x04\0\x1aTLS-\ +alert-received-payload\x03\0\x13\x01ky\x01r\x02\x0afield-name\x0e\x0afield-size\x15\ +\x04\0\x12field-size-payload\x03\0\x16\x01kw\x01k\x17\x01q'\x0bDNS-timeout\0\0\x09\ +DNS-error\x01\x11\0\x15destination-not-found\0\0\x17destination-unavailable\0\0\x19\ +destination-IP-prohibited\0\0\x19destination-IP-unroutable\0\0\x12connection-ref\ +used\0\0\x15connection-terminated\0\0\x12connection-timeout\0\0\x17connection-re\ +ad-timeout\0\0\x18connection-write-timeout\0\0\x18connection-limit-reached\0\0\x12\ +TLS-protocol-error\0\0\x15TLS-certificate-error\0\0\x12TLS-alert-received\x01\x14\ +\0\x13HTTP-request-denied\0\0\x1cHTTP-request-length-required\0\0\x16HTTP-reques\ +t-body-size\x01\x18\0\x1bHTTP-request-method-invalid\0\0\x18HTTP-request-URI-inv\ +alid\0\0\x19HTTP-request-URI-too-long\0\0\x20HTTP-request-header-section-size\x01\ +\x15\0\x18HTTP-request-header-size\x01\x19\0!HTTP-request-trailer-section-size\x01\ +\x15\0\x19HTTP-request-trailer-size\x01\x17\0\x18HTTP-response-incomplete\0\0!HT\ +TP-response-header-section-size\x01\x15\0\x19HTTP-response-header-size\x01\x17\0\ +\x17HTTP-response-body-size\x01\x18\0\"HTTP-response-trailer-section-size\x01\x15\ +\0\x1aHTTP-response-trailer-size\x01\x17\0\x1dHTTP-response-transfer-coding\x01\x0e\ +\0\x1cHTTP-response-content-coding\x01\x0e\0\x15HTTP-response-timeout\0\0\x13HTT\ +P-upgrade-failed\0\0\x13HTTP-protocol-error\0\0\x0dloop-detected\0\0\x13configur\ +ation-error\0\0\x0einternal-error\x01\x0e\0\x04\0\x0aerror-code\x03\0\x1a\x01q\x03\ +\x0einvalid-syntax\0\0\x09forbidden\0\0\x09immutable\0\0\x04\0\x0cheader-error\x03\ +\0\x1c\x01s\x04\0\x09field-key\x03\0\x1e\x01p}\x04\0\x0bfield-value\x03\0\x20\x04\ +\0\x06fields\x03\x01\x04\0\x07headers\x03\0\"\x04\0\x08trailers\x03\0\"\x04\0\x10\ +incoming-request\x03\x01\x04\0\x10outgoing-request\x03\x01\x04\0\x0frequest-opti\ +ons\x03\x01\x04\0\x11response-outparam\x03\x01\x01{\x04\0\x0bstatus-code\x03\0)\x04\ +\0\x11incoming-response\x03\x01\x04\0\x0dincoming-body\x03\x01\x04\0\x0ffuture-t\ +railers\x03\x01\x04\0\x11outgoing-response\x03\x01\x04\0\x0doutgoing-body\x03\x01\ +\x04\0\x18future-incoming-response\x03\x01\x01i\"\x01@\0\01\x04\0\x13[constructo\ +r]fields\x012\x01o\x02\x1f!\x01p3\x01j\x011\x01\x1d\x01@\x01\x07entries4\05\x04\0\ +\x18[static]fields.from-list\x016\x01h\"\x01p!\x01@\x02\x04self7\x04name\x1f\08\x04\ +\0\x12[method]fields.get\x019\x01@\x02\x04self7\x04name\x1f\0\x7f\x04\0\x12[meth\ +od]fields.has\x01:\x01j\0\x01\x1d\x01@\x03\x04self7\x04name\x1f\x05value8\0;\x04\ +\0\x12[method]fields.set\x01<\x01@\x02\x04self7\x04name\x1f\0;\x04\0\x15[method]\ +fields.delete\x01=\x01@\x03\x04self7\x04name\x1f\x05value!\0;\x04\0\x15[method]f\ +ields.append\x01>\x01@\x01\x04self7\04\x04\0\x16[method]fields.entries\x01?\x01@\ +\x01\x04self7\01\x04\0\x14[method]fields.clone\x01@\x01h%\x01@\x01\x04self\xc1\0\ +\0\x0b\x04\0\x1f[method]incoming-request.method\x01B\x01@\x01\x04self\xc1\0\0\x0e\ +\x04\0([method]incoming-request.path-with-query\x01C\x01k\x0d\x01@\x01\x04self\xc1\ +\0\0\xc4\0\x04\0\x1f[method]incoming-request.scheme\x01E\x04\0\"[method]incoming\ +-request.authority\x01C\x01i#\x01@\x01\x04self\xc1\0\0\xc6\0\x04\0\x20[method]in\ +coming-request.headers\x01G\x01i,\x01j\x01\xc8\0\0\x01@\x01\x04self\xc1\0\0\xc9\0\ +\x04\0\x20[method]incoming-request.consume\x01J\x01i&\x01@\x01\x07headers\xc6\0\0\ +\xcb\0\x04\0\x1d[constructor]outgoing-request\x01L\x01h&\x01i/\x01j\x01\xce\0\0\x01\ +@\x01\x04self\xcd\0\0\xcf\0\x04\0\x1d[method]outgoing-request.body\x01P\x01@\x01\ +\x04self\xcd\0\0\x0b\x04\0\x1f[method]outgoing-request.method\x01Q\x01j\0\0\x01@\ +\x02\x04self\xcd\0\x06method\x0b\0\xd2\0\x04\0#[method]outgoing-request.set-meth\ +od\x01S\x01@\x01\x04self\xcd\0\0\x0e\x04\0([method]outgoing-request.path-with-qu\ +ery\x01T\x01@\x02\x04self\xcd\0\x0fpath-with-query\x0e\0\xd2\0\x04\0,[method]out\ +going-request.set-path-with-query\x01U\x01@\x01\x04self\xcd\0\0\xc4\0\x04\0\x1f[\ +method]outgoing-request.scheme\x01V\x01@\x02\x04self\xcd\0\x06scheme\xc4\0\0\xd2\ +\0\x04\0#[method]outgoing-request.set-scheme\x01W\x04\0\"[method]outgoing-reques\ +t.authority\x01T\x01@\x02\x04self\xcd\0\x09authority\x0e\0\xd2\0\x04\0&[method]o\ +utgoing-request.set-authority\x01X\x01@\x01\x04self\xcd\0\0\xc6\0\x04\0\x20[meth\ +od]outgoing-request.headers\x01Y\x01i'\x01@\0\0\xda\0\x04\0\x1c[constructor]requ\ +est-options\x01[\x01h'\x01k\x01\x01@\x01\x04self\xdc\0\0\xdd\0\x04\0'[method]req\ +uest-options.connect-timeout\x01^\x01@\x02\x04self\xdc\0\x08duration\xdd\0\0\xd2\ +\0\x04\0+[method]request-options.set-connect-timeout\x01_\x04\0*[method]request-\ +options.first-byte-timeout\x01^\x04\0.[method]request-options.set-first-byte-tim\ +eout\x01_\x04\0-[method]request-options.between-bytes-timeout\x01^\x04\01[method\ +]request-options.set-between-bytes-timeout\x01_\x01i(\x01i.\x01j\x01\xe1\0\x01\x1b\ +\x01@\x02\x05param\xe0\0\x08response\xe2\0\x01\0\x04\0\x1d[static]response-outpa\ +ram.set\x01c\x01h+\x01@\x01\x04self\xe4\0\0*\x04\0\x20[method]incoming-response.\ +status\x01e\x01@\x01\x04self\xe4\0\0\xc6\0\x04\0![method]incoming-response.heade\ +rs\x01f\x01@\x01\x04self\xe4\0\0\xc9\0\x04\0![method]incoming-response.consume\x01\ +g\x01h,\x01i\x03\x01j\x01\xe9\0\0\x01@\x01\x04self\xe8\0\0\xea\0\x04\0\x1c[metho\ +d]incoming-body.stream\x01k\x01i-\x01@\x01\x04this\xc8\0\0\xec\0\x04\0\x1c[stati\ +c]incoming-body.finish\x01m\x01h-\x01i\x09\x01@\x01\x04self\xee\0\0\xef\0\x04\0!\ +[method]future-trailers.subscribe\x01p\x01i$\x01k\xf1\0\x01j\x01\xf2\0\x01\x1b\x01\ +j\x01\xf3\0\0\x01k\xf4\0\x01@\x01\x04self\xee\0\0\xf5\0\x04\0\x1b[method]future-\ +trailers.get\x01v\x01@\x01\x07headers\xc6\0\0\xe1\0\x04\0\x1e[constructor]outgoi\ +ng-response\x01w\x01h.\x01@\x01\x04self\xf8\0\0*\x04\0%[method]outgoing-response\ +.status-code\x01y\x01@\x02\x04self\xf8\0\x0bstatus-code*\0\xd2\0\x04\0)[method]o\ +utgoing-response.set-status-code\x01z\x01@\x01\x04self\xf8\0\0\xc6\0\x04\0![meth\ +od]outgoing-response.headers\x01{\x01@\x01\x04self\xf8\0\0\xcf\0\x04\0\x1e[metho\ +d]outgoing-response.body\x01|\x01h/\x01i\x05\x01j\x01\xfe\0\0\x01@\x01\x04self\xfd\ +\0\0\xff\0\x04\0\x1b[method]outgoing-body.write\x01\x80\x01\x01j\0\x01\x1b\x01@\x02\ +\x04this\xce\0\x08trailers\xf2\0\0\x81\x01\x04\0\x1c[static]outgoing-body.finish\ +\x01\x82\x01\x01h0\x01@\x01\x04self\x83\x01\0\xef\0\x04\0*[method]future-incomin\ +g-response.subscribe\x01\x84\x01\x01i+\x01j\x01\x85\x01\x01\x1b\x01j\x01\x86\x01\ +\0\x01k\x87\x01\x01@\x01\x04self\x83\x01\0\x88\x01\x04\0$[method]future-incoming\ +-response.get\x01\x89\x01\x01h\x07\x01k\x1b\x01@\x01\x03err\x8a\x01\0\x8b\x01\x04\ +\0\x0fhttp-error-code\x01\x8c\x01\x03\x01\x15wasi:http/types@0.2.0\x05\x0c\x02\x03\ +\0\x06\x10outgoing-request\x02\x03\0\x06\x0frequest-options\x02\x03\0\x06\x18fut\ +ure-incoming-response\x02\x03\0\x06\x0aerror-code\x01B\x0f\x02\x03\x02\x01\x0d\x04\ +\0\x10outgoing-request\x03\0\0\x02\x03\x02\x01\x0e\x04\0\x0frequest-options\x03\0\ +\x02\x02\x03\x02\x01\x0f\x04\0\x18future-incoming-response\x03\0\x04\x02\x03\x02\ +\x01\x10\x04\0\x0aerror-code\x03\0\x06\x01i\x01\x01i\x03\x01k\x09\x01i\x05\x01j\x01\ +\x0b\x01\x07\x01@\x02\x07request\x08\x07options\x0a\0\x0c\x04\0\x06handle\x01\x0d\ +\x03\x01\x20wasi:http/outgoing-handler@0.2.0\x05\x11\x02\x03\0\x03\x0ccomponent-\ +id\x02\x03\0\x03\x09worker-id\x02\x03\0\x03\x11component-version\x02\x03\0\x03\x0b\ +update-mode\x02\x03\0\x03\x11worker-any-filter\x02\x03\0\x03\x0fworker-metadata\x01\ +B$\x02\x03\x02\x01\x12\x04\0\x0ccomponent-id\x03\0\0\x02\x03\x02\x01\x13\x04\0\x09\ +worker-id\x03\0\x02\x02\x03\x02\x01\x14\x04\0\x11component-version\x03\0\x04\x02\ +\x03\x02\x01\x15\x04\0\x0bupdate-mode\x03\0\x06\x02\x03\x02\x01\x16\x04\0\x11wor\ +ker-any-filter\x03\0\x08\x02\x03\x02\x01\x17\x04\0\x0fworker-metadata\x03\0\x0a\x01\ +@\x01\x0dfunction-names\0s\x04\0\x0cget-self-uri\x01\x0c\x01@\0\0w\x04\0\x04jump\ +\x01\x0d\x01@\x01\x0bmax-retriesw\x01\0\x04\0\x1cfail-with-custom-max-retries\x01\ +\x0e\x01@\x01\x08replicas}\x01\0\x04\0\x0fexplicit-commit\x01\x0f\x01@\0\x01\0\x04\ +\0\x0datomic-region\x01\x10\x01@\x01\x07enabled\x7f\x01\0\x04\0\x10idempotence-f\ +lag\x01\x11\x04\0\x0fpersist-nothing\x01\x10\x01k\x09\x01p\x0b\x01@\x03\x0ccompo\ +nent-id\x01\x06filter\x12\x07precise\x7f\0\x13\x04\0\x0bget-workers\x01\x14\x01@\ +\0\0\x0b\x04\0\x11get-self-metadata\x01\x15\x01k\x0b\x01@\x01\x09worker-id\x03\0\ +\x16\x04\0\x13get-worker-metadata\x01\x17\x01@\x03\x09worker-id\x03\x11component\ +-version\x05\x0bupdate-mode\x07\x01\0\x04\0\x0dupdate-worker\x01\x18\x04\x01\x0c\ +golem:it/api\x05\x18\x04\x01\x18golem:it/runtime-service\x04\0\x0b\x15\x01\0\x0f\ +runtime-service\x03\0\0\0G\x09producers\x01\x0cprocessed-by\x02\x0dwit-component\ +\x070.208.1\x10wit-bindgen-rust\x060.25.0"; #[inline(never)] #[doc(hidden)] diff --git a/test-components/runtime-service/src/lib.rs b/test-components/runtime-service/src/lib.rs index ac8c740b7a..a8318edd6e 100644 --- a/test-components/runtime-service/src/lib.rs +++ b/test-components/runtime-service/src/lib.rs @@ -178,6 +178,16 @@ impl Guest for Component { workers } + fn get_self_metadata() -> WorkerMetadata { + println!("Get self metadata"); + bindings::golem::api::host::get_self_metadata() + } + + fn get_worker_metadata(worker_id: WorkerId) -> Option { + println!("Get worker: {worker_id:?} metadata"); + bindings::golem::api::host::get_worker_metadata(&worker_id) + } + fn update_worker(worker_id: WorkerId, component_version: ComponentVersion, update_mode: UpdateMode) { println!( "Update worker worker id: {worker_id:?}, component version: {component_version:?}, update mode: {update_mode:?}" diff --git a/test-components/runtime-service/wit/deps/golem/golem-host.wit b/test-components/runtime-service/wit/deps/golem/golem-host.wit index 7acda93328..66636b0cec 100644 --- a/test-components/runtime-service/wit/deps/golem/golem-host.wit +++ b/test-components/runtime-service/wit/deps/golem/golem-host.wit @@ -227,6 +227,12 @@ constructor(component-id: component-id, filter: option, preci /// Initiates an update attempt for the given worker. The function returns immediately once the request has been processed, /// not waiting for the worker to get updated. update-worker: func(worker-id: worker-id, target-version: component-version, mode: update-mode) -> (); + + /// Get current worker metadata + get-self-metadata: func() -> worker-metadata; + + /// Get worker metadata + get-worker-metadata: func(worker-id: worker-id) -> option; } /// Interface providing user-defined snapshotting capability. This can be used to perform manual update of workers diff --git a/test-components/runtime-service/wit/runtime.wit b/test-components/runtime-service/wit/runtime.wit index dbf93213cb..da18e7460a 100644 --- a/test-components/runtime-service/wit/runtime.wit +++ b/test-components/runtime-service/wit/runtime.wit @@ -17,6 +17,8 @@ interface api { idempotence-flag: func(enabled: bool) -> (); persist-nothing: func() -> (); get-workers: func(component-id: component-id, filter: option, precise: bool) -> list; + get-self-metadata: func() -> worker-metadata; + get-worker-metadata: func(worker-id: worker-id) -> option; update-worker: func(worker-id: worker-id, component-version: component-version, update-mode: update-mode) -> (); }