diff --git a/Cargo.lock b/Cargo.lock index b0cd00bb90..dafdb2e3b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,28 +42,37 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -75,18 +84,18 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "api" version = "0.1.0" dependencies = [ "datatypes", - "prost 0.11.0", + "prost", "snafu", - "tonic 0.8.0", + "tonic", "tonic-build", ] @@ -107,9 +116,9 @@ checksum = "b3f9eb837c6a783fbf002e3e5cc7925a3aa6893d6d42f9169517528983777590" [[package]] name = "arc-swap" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" +checksum = "983cd8b9d4b02a6dc6ffa557262eb5858a27a0038ffffe21a0f133eaa819a164" [[package]] name = "array-init-cursor" @@ -179,9 +188,9 @@ checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109" [[package]] name = "async-channel" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" dependencies = [ "concurrent-queue", "event-listener", @@ -203,9 +212,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2bf394cfbbe876f0ac67b13b6ca819f9c9f2fb9ec67223cceb1555fbab1c31a" +checksum = "345fd392ab01f746c717b1357165b76f0b67a60192007b234058c9045fdcf695" dependencies = [ "brotli", "flate2", @@ -238,9 +247,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.53" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -272,9 +281,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.5.4" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4af7447fc1214c1f3a1ace861d0216a6c8bb13965b64bbad9650f375b67689a" +checksum = "c9e3356844c4d6a6d6467b8da2cffb4a2820be256f50a3a386c9d152bab31043" dependencies = [ "async-trait", "axum-core", @@ -284,7 +293,7 @@ dependencies = [ "http", "http-body", "hyper", - "itoa 1.0.1", + "itoa 1.0.3", "matchit", "memchr", "mime", @@ -303,9 +312,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da31c0ed7b4690e2c78fe4b880d21cd7db04a346ebc658b4270251b695437f17" +checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" dependencies = [ "async-trait", "bytes", @@ -313,13 +322,15 @@ dependencies = [ "http", "http-body", "mime", + "tower-layer", + "tower-service", ] [[package]] name = "axum-macros" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63bcb0d395bc5dd286e61aada9fc48201eb70e232f006f9d6c330c9db2f256f5" +checksum = "6293dae2ec708e679da6736e857cf8532886ef258e92930f38279c12641628b8" dependencies = [ "heck 0.4.0", "proc-macro2", @@ -329,9 +340,9 @@ dependencies = [ [[package]] name = "axum-test-helper" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1063a76d89cb97b2dc78a61c3a45a9867ba586600bf185d2ec9fa8858fdafbe0" +checksum = "7b5f0c689f3a3cb707ea097813153343b74dcf73b3e46dedb25be91a24050913" dependencies = [ "axum", "bytes", @@ -359,9 +370,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" dependencies = [ "addr2line", "cc", @@ -469,9 +480,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -511,24 +522,24 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "bytemuck" -version = "1.9.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" +checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" +checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9" dependencies = [ "proc-macro2", "quote", @@ -543,9 +554,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" dependencies = [ "serde", ] @@ -568,12 +579,9 @@ dependencies = [ [[package]] name = "cast" -version = "0.2.7" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" -dependencies = [ - "rustc_version", -] +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "castaway" @@ -629,12 +637,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ + "iana-time-zone", "js-sys", - "libc", "num-integer", "num-traits", "serde", @@ -645,24 +653,24 @@ dependencies = [ [[package]] name = "chrono-tz" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552" +checksum = "29c39203181991a7dd4343b8005bd804e7a9a37afb8ac070e43771e8c820bbde" dependencies = [ "chrono", "chrono-tz-build", - "phf", + "phf 0.11.1", ] [[package]] name = "chrono-tz-build" -version = "0.0.2" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069" +checksum = "6f509c3a87b33437b05e2458750a0700e5bdd6956176773e6c7d6dd15a283a0c" dependencies = [ "parse-zoneinfo", - "phf", - "phf_codegen", + "phf 0.11.1", + "phf_codegen 0.11.1", ] [[package]] @@ -693,16 +701,16 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.17" +version = "3.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47582c09be7c8b32c0ab3a6181825ababb713fde6fff20fc573a3870dd45c6a0" +checksum = "1ed5341b2301a26ab80be5cbdced622e80ed808483c52e45e3310a877d3b37d7" dependencies = [ "atty", "bitflags", "clap_derive", "clap_lex", "indexmap", - "lazy_static", + "once_cell", "strsim 0.10.0", "termcolor", "textwrap 0.15.0", @@ -710,9 +718,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.1.7" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -723,9 +731,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] @@ -748,7 +756,7 @@ dependencies = [ "datatypes", "snafu", "tokio", - "tonic 0.8.0", + "tonic", "tracing", "tracing-subscriber", ] @@ -777,7 +785,7 @@ dependencies = [ name = "cmd" version = "0.1.0" dependencies = [ - "clap 3.1.17", + "clap 3.2.21", "common-error", "common-telemetry", "datanode", @@ -927,7 +935,7 @@ dependencies = [ "once_cell", "opentelemetry", "opentelemetry-jaeger", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "tracing", "tracing-appender", "tracing-bunyan-formatter", @@ -950,9 +958,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -973,21 +981,21 @@ dependencies = [ [[package]] name = "console-api" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24cb05777feccbb2642d4f2df44d0505601a2cd88ca517d8c913f263a5a8dc8b" +checksum = "e57ff02e8ad8e06ab9731d5dc72dc23bef9200778eae1a89d555d8c42e5d4a86" dependencies = [ - "prost 0.10.4", - "prost-types 0.10.1", - "tonic 0.7.2", + "prost", + "prost-types", + "tonic", "tracing-core", ] [[package]] name = "console-subscriber" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f21a16ee925aa9d2bad2e296beffd6c5b1bfaad50af509d305b8e7f23af20fb" +checksum = "22a3a81dfaf6b66bce5d159eddae701e3a002f194d378cbf7be5f053c281d9be" dependencies = [ "console-api", "crossbeam-channel", @@ -995,13 +1003,13 @@ dependencies = [ "futures", "hdrhistogram", "humantime", - "prost-types 0.10.1", + "prost-types", "serde", "serde_json", "thread_local", "tokio", "tokio-stream", - "tonic 0.7.2", + "tonic", "tracing", "tracing-core", "tracing-subscriber", @@ -1031,9 +1039,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -1064,9 +1072,9 @@ dependencies = [ [[package]] name = "criterion" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" dependencies = [ "atty", "cast", @@ -1090,9 +1098,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" dependencies = [ "cast", "itertools", @@ -1100,9 +1108,9 @@ dependencies = [ [[package]] name = "crossbeam" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae5588f6b3c3cb05239e90bd110f257254aecd01e4635400391aeae07497845" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" dependencies = [ "cfg-if", "crossbeam-channel", @@ -1114,9 +1122,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1124,9 +1132,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1135,23 +1143,23 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2" +checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1159,12 +1167,12 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" dependencies = [ "cfg-if", - "lazy_static", + "once_cell", ] [[package]] @@ -1175,9 +1183,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -1207,9 +1215,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" dependencies = [ "quote", "syn", @@ -1217,9 +1225,9 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f" +checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" dependencies = [ "curl-sys", "libc", @@ -1232,9 +1240,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.55+curl-7.83.1" +version = "0.4.56+curl-7.83.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762" +checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f" dependencies = [ "cc", "libc", @@ -1295,12 +1303,12 @@ dependencies = [ "datafusion-expr", "datafusion-physical-expr", "futures", - "hashbrown 0.12.1", + "hashbrown", "lazy_static", "log", "num_cpus", "ordered-float 2.10.0", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "parquet2", "paste", "pin-project-lite", @@ -1346,7 +1354,7 @@ dependencies = [ "chrono", "datafusion-common", "datafusion-expr", - "hashbrown 0.12.1", + "hashbrown", "lazy_static", "md-5", "ordered-float 2.10.0", @@ -1399,7 +1407,7 @@ dependencies = [ "tempdir", "tokio", "tokio-stream", - "tonic 0.8.0", + "tonic", "tower", "tower-http", ] @@ -1423,6 +1431,17 @@ dependencies = [ "snafu", ] +[[package]] +name = "derive-new" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "derive_builder" version = "0.11.2" @@ -1520,9 +1539,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "encode_unicode" @@ -1590,9 +1609,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "exitcode" @@ -1600,6 +1619,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193" +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fallible-streaming-iterator" version = "0.1.9" @@ -1608,9 +1633,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -1628,19 +1653,17 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" dependencies = [ - "cfg-if", "crc32fast", - "libc", "libz-sys", "miniz_oxide", ] @@ -1668,11 +1691,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -1714,7 +1736,7 @@ dependencies = [ "sql", "tempdir", "tokio", - "tonic 0.8.0", + "tonic", "tower", ] @@ -1796,9 +1818,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" dependencies = [ "futures-channel", "futures-core", @@ -1811,9 +1833,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" dependencies = [ "futures-core", "futures-sink", @@ -1821,15 +1843,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" dependencies = [ "futures-core", "futures-task", @@ -1838,9 +1860,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-lite" @@ -1859,9 +1881,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -1870,21 +1892,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-channel", "futures-core", @@ -1900,9 +1922,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -1920,22 +1942,34 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] -name = "gimli" -version = "0.26.1" +name = "getset" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" [[package]] name = "glob" @@ -1945,9 +1979,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "h2" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" dependencies = [ "bytes", "fnv", @@ -1958,7 +1992,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.3", + "tokio-util", "tracing", ] @@ -1976,28 +2010,21 @@ checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - -[[package]] -name = "hashbrown" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash", ] [[package]] name = "hdrhistogram" -version = "7.5.0" +version = "7.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31672b7011be2c4f7456c4ddbcb40e7e9a4a9fad8efe49a6ebaf5f307d0109c0" +checksum = "6ea9fe3952d32674a14e0975009a3547af9ea364995b5ec1add2e23c2ae523ab" dependencies = [ "base64", "byteorder", - "crossbeam-channel", "flate2", "nom", "num-traits", @@ -2050,20 +2077,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.1", + "itoa 1.0.3", ] [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -2078,9 +2105,9 @@ checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -2096,9 +2123,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ "bytes", "futures-channel", @@ -2109,7 +2136,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.1", + "itoa 1.0.3", "pin-project-lite", "socket2", "tokio", @@ -2143,6 +2170,20 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "237a0714f28b1ee39ccec0770ccb544eb02c9ef2c82bb096230eefcffa6468b0" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "js-sys", + "once_cell", + "wasm-bindgen", + "winapi", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -2151,23 +2192,22 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown 0.11.2", + "hashbrown", ] [[package]] @@ -2181,9 +2221,9 @@ dependencies = [ [[package]] name = "integer-encoding" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e85a1509a128c855368e135cffcde7eac17d8e1083f41e2b98c58bc1a5074be" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" dependencies = [ "async-trait", "futures-util", @@ -2252,9 +2292,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "d8bf247779e67a9082a4790b45e71ac7cfd1321331a5c856a74a9faebdab78d0" dependencies = [ "either", ] @@ -2267,9 +2307,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "jobserver" @@ -2282,18 +2322,18 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonwebtoken" -version = "8.1.0" +version = "8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9051c17f81bae79440afa041b3a278e1de71bfb96d32454b477fd4703ccb6f" +checksum = "1aa4b4af834c6cfd35d8763d359661b90f2e45d8f750a0849156c7f4671af09c" dependencies = [ "base64", "pem", @@ -2323,18 +2363,18 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "lexical" -version = "6.1.0" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd3e434c16f0164124ade12dcdee324fcc3dafb1cad0c7f1d8c2451a1aa6886" +checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" dependencies = [ "lexical-core", ] [[package]] name = "lexical-core" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92912c4af2e7d9075be3e5e3122c4d7263855fa6cce34fbece4dd08e5884624d" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" dependencies = [ "lexical-parse-float", "lexical-parse-integer", @@ -2345,9 +2385,9 @@ dependencies = [ [[package]] name = "lexical-parse-float" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f518eed87c3be6debe6d26b855c97358d8a11bf05acec137e5f53080f5ad2dd8" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" dependencies = [ "lexical-parse-integer", "lexical-util", @@ -2356,9 +2396,9 @@ dependencies = [ [[package]] name = "lexical-parse-integer" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc852ec67c6538bbb2b9911116a385b24510e879a69ab516e6a151b15a79168" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" dependencies = [ "lexical-util", "static_assertions", @@ -2366,18 +2406,18 @@ dependencies = [ [[package]] name = "lexical-util" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c72a9d52c5c4e62fa2cdc2cb6c694a39ae1382d9c2a17a466f18e272a0930eb1" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" dependencies = [ "static_assertions", ] [[package]] name = "lexical-write-float" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a89ec1d062e481210c309b672f73a0567b7855f21e7d2fae636df44d12e97f9" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" dependencies = [ "lexical-util", "lexical-write-integer", @@ -2386,9 +2426,9 @@ dependencies = [ [[package]] name = "lexical-write-integer" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "094060bd2a7c2ff3a16d5304a6ae82727cb3cc9d1c70f813cc73f744c319337e" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" dependencies = [ "lexical-util", "static_assertions", @@ -2446,9 +2486,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" dependencies = [ "autocfg", "scopeguard", @@ -2498,14 +2538,14 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown 0.12.1", + "hashbrown", ] [[package]] name = "lz4" -version = "1.23.3" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edcb94251b1c375c459e5abe9fb0168c1c826c3370172684844f8f3f8d1a885" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ "libc", "lz4-sys", @@ -2513,9 +2553,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.3" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7be8908e2ed6f31c02db8a9fa962f03e36c53fbfde437363eae3306b85d7e17" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ "cc", "libc", @@ -2523,9 +2563,9 @@ dependencies = [ [[package]] name = "lz4_flex" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c038063f7a78126c539d666a0323a2032de5e7366012cd14a6eafc5ba290bbd6" +checksum = "1a8cbbb2831780bc3b9c15a41f5b49222ef756b6730a95f3decfdd15903eb5a3" dependencies = [ "twox-hash", ] @@ -2577,9 +2617,9 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.1" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582" +checksum = "66b48670c893079d3c2ed79114e3644b7004df1c361a4e0ad52e2e6940d07c3d" dependencies = [ "digest", ] @@ -2635,7 +2675,7 @@ dependencies = [ "indexmap", "metrics 0.20.1", "metrics-util", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "portable-atomic", "quanta", "thiserror", @@ -2671,10 +2711,10 @@ checksum = "f7d24dc2dbae22bff6f1f9326ffce828c9f07ef9cc1e8002e5279f845432a30a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.12.1", + "hashbrown", "metrics 0.20.1", "num_cpus", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "portable-atomic", "quanta", "sketches-ddsketch", @@ -2732,18 +2772,18 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.5.1" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", ] [[package]] name = "minstant" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb320648b7883b43ce5dfbc5c6f4a84038194c3f67b4fcb7d05c994e6006557" +checksum = "bc5dcfca9a0725105ac948b84cfeb69c3942814c696326743797215413f854b9" dependencies = [ "ctor", "libc", @@ -2752,9 +2792,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", @@ -2815,7 +2855,7 @@ dependencies = [ "thiserror", "tokio", "tokio-native-tls", - "tokio-util 0.7.3", + "tokio-util", "twox-hash", "url", ] @@ -2854,7 +2894,7 @@ dependencies = [ "smallvec", "subprocess", "thiserror", - "time 0.3.9", + "time 0.3.14", "uuid", ] @@ -2965,9 +3005,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", "serde", @@ -2996,9 +3036,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint", @@ -3058,9 +3098,9 @@ dependencies = [ [[package]] name = "object" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40bec70ba014595f99f7aa110b84331ffe1ee9aece7fe6f387cc7e3ecda4d456" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "memchr", ] @@ -3109,14 +3149,14 @@ dependencies = [ "metrics 0.19.0", "minitrace", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "percent-encoding", "pin-project", "quick-xml", "reqsign", "serde", "thiserror", - "time 0.3.9", + "time 0.3.14", "tokio", ] @@ -3136,9 +3176,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.40" +version = "0.10.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" +checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" dependencies = [ "bitflags", "cfg-if", @@ -3168,9 +3208,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.73" +version = "0.9.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0" +checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" dependencies = [ "autocfg", "cc", @@ -3265,14 +3305,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" dependencies = [ "dlv-list", - "hashbrown 0.12.1", + "hashbrown", ] [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" [[package]] name = "parking" @@ -3293,9 +3333,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core 0.9.3", @@ -3373,9 +3413,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" [[package]] name = "peeking_take_while" @@ -3385,36 +3425,65 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" +checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" dependencies = [ "base64", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", ] +[[package]] +name = "pgwire" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41526874eeba2f8b06a3ed14510e29080b9fab15b86849fb3a7a733c9bc610b0" +dependencies = [ + "async-trait", + "bytes", + "derive-new", + "futures", + "getset", + "log", + "postgres-types", + "rand 0.8.5", + "thiserror", + "time 0.3.14", + "tokio", + "tokio-util", +] + [[package]] name = "phf" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ - "phf_shared", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_shared 0.11.1", ] [[package]] @@ -3423,8 +3492,18 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770" +dependencies = [ + "phf_generator 0.11.1", + "phf_shared 0.11.1", ] [[package]] @@ -3433,7 +3512,17 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" dependencies = [ - "phf_shared", + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared 0.11.1", "rand 0.8.5", ] @@ -3442,6 +3531,15 @@ name = "phf_shared" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" dependencies = [ "siphasher", "uncased", @@ -3449,18 +3547,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", @@ -3496,9 +3594,9 @@ dependencies = [ [[package]] name = "plotters" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", @@ -3509,15 +3607,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] @@ -3535,10 +3633,11 @@ dependencies = [ [[package]] name = "polling" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" dependencies = [ + "autocfg", "cfg-if", "libc", "log", @@ -3548,9 +3647,38 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b303a15aeda678da614ab23306232dbd282d532f8c5919cedd41b66b9dc96560" +checksum = "15eb2c6e362923af47e13c23ca5afb859e83d54452c55b0b9ac763b8f7c1ac16" + +[[package]] +name = "postgres-protocol" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878c6cbf956e03af9aa8204b407b9cbf47c072164800aa918c516cd4b056c50c" +dependencies = [ + "base64", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand 0.8.5", + "sha2", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73d946ec7d256b04dfadc4e6a3292324e6f417124750fc5c0950f981b703a0f1" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] [[package]] name = "ppv-lite86" @@ -3560,9 +3688,9 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "prettyplease" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6ffbe862780245013cb1c0a48c4e44b7d665548088f91f6b90876d0625e4c2" +checksum = "a49e86d2c26a24059894a3afa13fd17d063419b05dfb83f06d9c3566060c3f5a" dependencies = [ "proc-macro2", "syn", @@ -3611,21 +3739,11 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.38" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ - "unicode-xid", -] - -[[package]] -name = "prost" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" -dependencies = [ - "bytes", - "prost-derive 0.10.1", + "unicode-ident", ] [[package]] @@ -3635,7 +3753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" dependencies = [ "bytes", - "prost-derive 0.11.0", + "prost-derive", ] [[package]] @@ -3651,26 +3769,13 @@ dependencies = [ "log", "multimap", "petgraph", - "prost 0.11.0", - "prost-types 0.11.1", + "prost", + "prost-types", "regex", "tempfile", "which", ] -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "prost-derive" version = "0.11.0" @@ -3684,16 +3789,6 @@ dependencies = [ "syn", ] -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost 0.10.4", -] - [[package]] name = "prost-types" version = "0.11.1" @@ -3701,7 +3796,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" dependencies = [ "bytes", - "prost 0.11.0", + "prost", ] [[package]] @@ -3761,28 +3856,19 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9279fbdacaad3baf559d8cabe0acc3d06e30ea14931af31af79578ac0946decc" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" dependencies = [ "memchr", "serde", ] -[[package]] -name = "quickcheck" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" -dependencies = [ - "rand 0.8.5", -] - [[package]] name = "quote" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -3873,9 +3959,9 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "10.3.0" +version = "10.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738bc47119e3eeccc7e94c4a506901aea5e7b4944ecd0829cbebf4af04ceda12" +checksum = "a6823ea29436221176fe662da99998ad3b4db2c7f31e7b6f5fe43adccd6320bb" dependencies = [ "bitflags", ] @@ -3921,9 +4007,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -3941,9 +4027,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -3961,9 +4047,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "remove_dir_all" @@ -3999,14 +4085,14 @@ dependencies = [ "serde", "serde_json", "sha2", - "time 0.3.9", + "time 0.3.14", ] [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", "bytes", @@ -4032,7 +4118,8 @@ dependencies = [ "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-util 0.6.9", + "tokio-util", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -4064,9 +4151,9 @@ dependencies = [ [[package]] name = "retain_mut" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" +checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" [[package]] name = "ring" @@ -4106,9 +4193,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.25.0" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34a3bb58e85333f1ab191bf979104b586ebd77475bc6681882825f4532dfe87c" +checksum = "ee9164faf726e4f3ece4978b25ca877ddc6802fa77f38cdccb32c7f805ecd70c" dependencies = [ "arrayvec", "num-traits", @@ -4261,8 +4348,8 @@ dependencies = [ "log", "num-bigint", "num-traits", - "phf", - "phf_codegen", + "phf 0.10.1", + "phf_codegen 0.10.0", "rustpython-ast", "tiny-keccak", "unic-emoji-char", @@ -4313,7 +4400,7 @@ dependencies = [ "num_enum", "once_cell", "optional", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "paste", "rand 0.8.5", "result-like", @@ -4351,9 +4438,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "rustyline" @@ -4381,9 +4468,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "same-file" @@ -4402,12 +4489,12 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -4459,9 +4546,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -4482,15 +4569,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" +checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] @@ -4507,9 +4594,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", @@ -4518,12 +4605,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "indexmap", - "itoa 1.0.1", + "itoa 1.0.3", "ryu", "serde", ] @@ -4535,7 +4622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.1", + "itoa 1.0.3", "ryu", "serde", ] @@ -4558,11 +4645,13 @@ dependencies = [ "common-time", "datatypes", "futures", + "hex", "hyper", "metrics 0.20.1", "mysql_async", "num_cpus", "opensrv-mysql", + "pgwire", "query", "rand 0.8.5", "script", @@ -4571,8 +4660,9 @@ dependencies = [ "snafu", "test-util", "tokio", + "tokio-postgres", "tokio-stream", - "tonic 0.8.0", + "tonic", "tower", "tower-http", ] @@ -4590,9 +4680,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "cf9db03534dff993187064c4e0c05a5708d2a9728ace9a8959b77bedf415dac5" dependencies = [ "cfg-if", "cpufeatures", @@ -4643,14 +4733,14 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "simple_asn1" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a762b1c38b9b990c694b9c2f8abe3372ce6a9ceaae6bca39cfc46e054f45745" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", "thiserror", - "time 0.3.9", + "time 0.3.14", ] [[package]] @@ -4667,9 +4757,12 @@ checksum = "ceb945e54128e09c43d8e4f1277851bd5044c6fc540bbaa2ad888f60b3da9ae7" [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "sluice" @@ -4719,12 +4812,12 @@ checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" [[package]] name = "socket2" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca642ba17f8b2995138b1d7711829c92e98c0a25ea019de790f4f09279c4e296" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", - "windows-sys", + "winapi", ] [[package]] @@ -4816,7 +4909,7 @@ dependencies = [ "object-store", "paste", "planus", - "prost 0.11.0", + "prost", "rand 0.8.5", "regex", "serde", @@ -4825,7 +4918,7 @@ dependencies = [ "store-api", "tempdir", "tokio", - "tonic 0.8.0", + "tonic", "tonic-build", "uuid", ] @@ -4858,18 +4951,18 @@ checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" [[package]] name = "streaming-decompression" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc687acd5dc742c4a7094f2927a8614a68e4743ef682e7a2f9f0f711656cc92" +checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" dependencies = [ "fallible-streaming-iterator", ] [[package]] name = "streaming-iterator" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303235c177994a476226b80d076bd333b7b560fb05bd242a10609d11b07f81f5" +checksum = "0085b81d5d4e57f264d492641cf80ea508c96d9a0e47c6296e8f016504e28fd7" [[package]] name = "streaming-stats" @@ -4886,6 +4979,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3ff2f71c82567c565ba4b3009a9350a96a7269eaa4001ebedae926230bc2254" +[[package]] +name = "stringprep" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "strsim" version = "0.8.0" @@ -4954,13 +5057,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.92" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -5107,18 +5210,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" dependencies = [ "proc-macro2", "quote", @@ -5179,14 +5282,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.9" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" dependencies = [ - "itoa 1.0.1", + "itoa 1.0.3", "libc", "num_threads", - "quickcheck", "time-macros", ] @@ -5238,9 +5340,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.1" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" +checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" dependencies = [ "autocfg", "bytes", @@ -5249,7 +5351,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", "socket2", @@ -5270,9 +5372,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", @@ -5290,10 +5392,34 @@ dependencies = [ ] [[package]] -name = "tokio-stream" -version = "0.1.8" +name = "tokio-postgres" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "29a12c1b3e0704ae7dfc25562629798b29c72e6b1d0a681b6f29ab4ae5e7f7bf" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot 0.12.1", + "percent-encoding", + "phf 0.11.1", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "socket2", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-stream" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" dependencies = [ "futures-core", "pin-project-lite", @@ -5315,23 +5441,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -5352,9 +5464,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.7.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9d60db39854b30b835107500cf0aca0b0d14d6e1c3de124217c23a29c2ddb" +checksum = "11cd56bdb54ef93935a6a79dbd1d91f1ebd4c64150fd61654031fd6b8b775c91" dependencies = [ "async-stream", "async-trait", @@ -5370,43 +5482,11 @@ dependencies = [ "hyper-timeout", "percent-encoding", "pin-project", - "prost 0.10.4", - "prost-derive 0.10.1", + "prost", + "prost-derive", "tokio", "tokio-stream", - "tokio-util 0.7.3", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498f271adc46acce75d66f639e4d35b31b2394c295c82496727dafa16d465dd2" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost 0.11.0", - "prost-derive 0.11.0", - "tokio", - "tokio-stream", - "tokio-util 0.7.3", + "tokio-util", "tower", "tower-layer", "tower-service", @@ -5429,9 +5509,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", @@ -5442,7 +5522,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.3", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -5450,9 +5530,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d342c6d58709c0a6d48d48dabbb62d4ef955cf5f0f3bbfd845838e7ae88dbae" +checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" dependencies = [ "async-compression", "base64", @@ -5470,7 +5550,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.3", + "tokio-util", "tower", "tower-layer", "tower-service", @@ -5486,15 +5566,15 @@ checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if", "log", @@ -5510,15 +5590,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" dependencies = [ "crossbeam-channel", - "time 0.3.9", + "time 0.3.14", "tracing-subscriber", ] [[package]] name = "tracing-attributes" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" dependencies = [ "proc-macro2", "quote", @@ -5527,15 +5607,15 @@ dependencies = [ [[package]] name = "tracing-bunyan-formatter" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99ff040622c69c0fc4bd3ea5fe16630ce46400a79bd41339391b2d416ea24c" +checksum = "a788f2119fde477cd33823330c14004fa8cdac6892fd6f12181bbda9dbf14fc9" dependencies = [ "gethostname", "log", "serde", "serde_json", - "time 0.3.9", + "time 0.3.14", "tracing", "tracing-core", "tracing-log", @@ -5544,11 +5624,11 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] @@ -5577,10 +5657,11 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.17.2" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f9378e96a9361190ae297e7f3a8ff644aacd2897f244b1ff81f381669196fa6" +checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" dependencies = [ + "once_cell", "opentelemetry", "tracing", "tracing-core", @@ -5590,13 +5671,13 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.11" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" dependencies = [ "ansi_term", - "lazy_static", "matchers", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -5744,31 +5825,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "623f59e6af2a98bdafeb93fa277ac8e1e40440973001ca15cf4ae1541cd16d56" [[package]] -name = "unicode-normalization" -version = "0.1.19" +name = "unicode-ident" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" + +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode_names2" @@ -5784,13 +5865,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] @@ -5886,9 +5966,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -5896,13 +5976,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -5911,9 +5991,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if", "js-sys", @@ -5923,9 +6003,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5933,9 +6013,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -5946,15 +6026,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -5971,13 +6051,13 @@ dependencies = [ [[package]] name = "which" -version = "4.2.5" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", ] [[package]] @@ -6080,18 +6160,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.10.0+zstd.1.5.2" +version = "0.10.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd" +checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.4+zstd.1.5.2" +version = "4.1.6+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee" +checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" dependencies = [ "libc", "zstd-sys", diff --git a/config/datanode.example.toml b/config/datanode.example.toml index 30760a108f..0381ea3a07 100644 --- a/config/datanode.example.toml +++ b/config/datanode.example.toml @@ -5,6 +5,10 @@ wal_dir = '/tmp/greptimedb/wal' mysql_addr = '0.0.0.0:3306' mysql_runtime_size = 4 +# applied when postgres feature enbaled +postgres_addr = '0.0.0.0:5432' +postgres_runtime_size = 4 + [storage] type = 'File' data_dir = '/tmp/greptimedb/data/' diff --git a/src/cmd/Cargo.toml b/src/cmd/Cargo.toml index 1cb37040ad..f77be51b13 100644 --- a/src/cmd/Cargo.toml +++ b/src/cmd/Cargo.toml @@ -21,3 +21,7 @@ toml = "0.5" [dev-dependencies] serde = "1.0" tempdir = "0.3" + +[features] +default = ["postgres"] +postgres = ["datanode/postgres"] diff --git a/src/cmd/src/datanode.rs b/src/cmd/src/datanode.rs index 34e93b1e39..57973bb55d 100644 --- a/src/cmd/src/datanode.rs +++ b/src/cmd/src/datanode.rs @@ -39,6 +39,9 @@ struct StartCommand { rpc_addr: Option, #[clap(long)] mysql_addr: Option, + #[cfg(feature = "postgres")] + #[clap(long)] + postgres_addr: Option, #[clap(short, long)] config_file: Option, } @@ -78,6 +81,10 @@ impl TryFrom for DatanodeOptions { if let Some(addr) = cmd.mysql_addr { opts.mysql_addr = addr; } + #[cfg(feature = "postgres")] + if let Some(addr) = cmd.postgres_addr { + opts.postgres_addr = addr; + } Ok(opts) } @@ -95,6 +102,8 @@ mod tests { http_addr: None, rpc_addr: None, mysql_addr: None, + #[cfg(feature = "postgres")] + postgres_addr: None, config_file: Some(format!( "{}/../../config/datanode.example.toml", std::env::current_dir().unwrap().as_path().to_str().unwrap() @@ -106,6 +115,13 @@ mod tests { assert_eq!("/tmp/greptimedb/wal".to_string(), options.wal_dir); assert_eq!("0.0.0.0:3306".to_string(), options.mysql_addr); assert_eq!(4, options.mysql_runtime_size); + + #[cfg(feature = "postgres")] + { + assert_eq!("0.0.0.0:5432".to_string(), options.postgres_addr); + assert_eq!(4, options.postgres_runtime_size); + } + match options.storage { ObjectStoreConfig::File { data_dir } => { assert_eq!("/tmp/greptimedb/data/".to_string(), data_dir) diff --git a/src/common/recordbatch/src/lib.rs b/src/common/recordbatch/src/lib.rs index e8d2918819..dafacf7506 100644 --- a/src/common/recordbatch/src/lib.rs +++ b/src/common/recordbatch/src/lib.rs @@ -71,6 +71,7 @@ impl RecordBatches { self.schema.clone() } + // TODO: a new name that to avoid misunderstanding it as an allocation operation pub fn to_vec(self) -> Vec { self.batches } diff --git a/src/datanode/Cargo.toml b/src/datanode/Cargo.toml index 4272638029..f83560efb1 100644 --- a/src/datanode/Cargo.toml +++ b/src/datanode/Cargo.toml @@ -4,10 +4,11 @@ version = "0.1.0" edition = "2021" [features] -default = ["python"] +default = ["python", "postgres"] python = [ "dep:script" ] +postgres = ["servers/postgres"] [dependencies] api = { path = "../api" } diff --git a/src/datanode/src/datanode.rs b/src/datanode/src/datanode.rs index 1ae4b0c56f..0ad523eecd 100644 --- a/src/datanode/src/datanode.rs +++ b/src/datanode/src/datanode.rs @@ -26,6 +26,10 @@ pub struct DatanodeOptions { pub rpc_addr: String, pub mysql_addr: String, pub mysql_runtime_size: u32, + #[cfg(feature = "postgres")] + pub postgres_addr: String, + #[cfg(feature = "postgres")] + pub postgres_runtime_size: u32, pub wal_dir: String, pub storage: ObjectStoreConfig, } @@ -37,6 +41,10 @@ impl Default for DatanodeOptions { rpc_addr: "0.0.0.0:3001".to_string(), mysql_addr: "0.0.0.0:3306".to_string(), mysql_runtime_size: 2, + #[cfg(feature = "postgres")] + postgres_addr: "0.0.0.0:5432".to_string(), + #[cfg(feature = "postgres")] + postgres_runtime_size: 2, wal_dir: "/tmp/greptimedb/wal".to_string(), storage: ObjectStoreConfig::default(), } diff --git a/src/datanode/src/server.rs b/src/datanode/src/server.rs index 26d0faae46..182a4b5775 100644 --- a/src/datanode/src/server.rs +++ b/src/datanode/src/server.rs @@ -7,6 +7,7 @@ use common_runtime::Builder as RuntimeBuilder; use servers::grpc::GrpcServer; use servers::http::HttpServer; use servers::mysql::server::MysqlServer; +use servers::postgres::PostgresServer; use servers::server::Server; use snafu::ResultExt; use tokio::try_join; @@ -20,6 +21,8 @@ pub struct Services { http_server: HttpServer, grpc_server: GrpcServer, mysql_server: Box, + #[cfg(feature = "postgres")] + postgres_server: Box, } impl Services { @@ -31,34 +34,49 @@ impl Services { .build() .context(error::RuntimeResourceSnafu)?, ); + #[cfg(feature = "postgres")] + let postgres_io_runtime = Arc::new( + RuntimeBuilder::default() + .worker_threads(opts.postgres_runtime_size as usize) + .thread_name("postgres-io-handlers") + .build() + .context(error::RuntimeResourceSnafu)?, + ); Ok(Self { http_server: HttpServer::new(instance.clone()), grpc_server: GrpcServer::new(instance.clone(), instance.clone()), - mysql_server: MysqlServer::create_server(instance, mysql_io_runtime), + mysql_server: MysqlServer::create_server(instance.clone(), mysql_io_runtime), + #[cfg(feature = "postgres")] + postgres_server: Box::new(PostgresServer::new(instance, postgres_io_runtime)), }) } // TODO(LFC): make servers started on demand (not starting mysql if no needed, for example) pub async fn start(&mut self, opts: &DatanodeOptions) -> Result<()> { - let http_addr = &opts.http_addr; - let http_addr: SocketAddr = http_addr - .parse() - .context(error::ParseAddrSnafu { addr: http_addr })?; + let http_addr: SocketAddr = opts.http_addr.parse().context(error::ParseAddrSnafu { + addr: &opts.http_addr, + })?; - let grpc_addr = &opts.rpc_addr; - let grpc_addr: SocketAddr = grpc_addr - .parse() - .context(error::ParseAddrSnafu { addr: grpc_addr })?; + let grpc_addr: SocketAddr = opts.rpc_addr.parse().context(error::ParseAddrSnafu { + addr: &opts.rpc_addr, + })?; - let mysql_addr = &opts.mysql_addr; - let mysql_addr: SocketAddr = mysql_addr - .parse() - .context(error::ParseAddrSnafu { addr: mysql_addr })?; + let mysql_addr: SocketAddr = opts.mysql_addr.parse().context(error::ParseAddrSnafu { + addr: &opts.mysql_addr, + })?; + + #[cfg(feature = "postgres")] + let postgres_addr: SocketAddr = + opts.postgres_addr.parse().context(error::ParseAddrSnafu { + addr: &opts.postgres_addr, + })?; try_join!( self.http_server.start(http_addr), self.grpc_server.start(grpc_addr), self.mysql_server.start(mysql_addr), + #[cfg(feature = "postgres")] + self.postgres_server.start(postgres_addr), ) .context(error::StartServerSnafu)?; Ok(()) diff --git a/src/datatypes/src/type_id.rs b/src/datatypes/src/type_id.rs index 28a81d13f3..148e3e9995 100644 --- a/src/datatypes/src/type_id.rs +++ b/src/datatypes/src/type_id.rs @@ -1,3 +1,4 @@ +#[cfg(any(test, feature = "test"))] use crate::data_type::ConcreteDataType; /// Unique identifier for logical data type. diff --git a/src/datatypes/src/vectors/list.rs b/src/datatypes/src/vectors/list.rs index d06a48f8fb..6269f550a9 100644 --- a/src/datatypes/src/vectors/list.rs +++ b/src/datatypes/src/vectors/list.rs @@ -268,6 +268,7 @@ impl MutableVector for ListVectorBuilder { #[cfg(test)] mod tests { use arrow::array::{MutableListArray, MutablePrimitiveArray, TryExtend}; + use serde_json::json; use super::*; use crate::types::ListType; @@ -426,8 +427,8 @@ mod tests { let list_vector = ListVector::from(arrow_array); assert_eq!( - "Ok([Array([Number(1), Number(2), Number(3)]), Null, Array([Number(4), Null, Number(6)])])", - format!("{:?}", list_vector.serialize_to_json()) + vec![json!([1, 2, 3]), json!(null), json!([4, null, 6]),], + list_vector.serialize_to_json().unwrap() ); } diff --git a/src/servers/Cargo.toml b/src/servers/Cargo.toml index 281f8a3090..9d7143dae8 100644 --- a/src/servers/Cargo.toml +++ b/src/servers/Cargo.toml @@ -16,10 +16,12 @@ common-telemetry = { path = "../common/telemetry" } common-time = { path = "../common/time" } datatypes = { path = "../datatypes" } futures = "0.3" +hex = { version = "0.4", optional = true } hyper = { version = "0.14", features = ["full"] } metrics = "0.20" num_cpus = "1.13" opensrv-mysql = "0.1" +pgwire = { version = "0.3", optional = true } query = { path = "../query" } serde = "1.0" serde_json = "1.0" @@ -30,6 +32,10 @@ tonic = "0.8" tower = { version = "0.4", features = ["full"] } tower-http = { version = "0.3", features = ["full"] } +[features] +default = ["postgres"] +postgres = ["hex", "pgwire"] + [dev-dependencies] catalog = { path = "../catalog" } common-base = { path = "../common/base" } @@ -37,3 +43,4 @@ mysql_async = "0.30" rand = "0.8" script = { path = "../script", features = ["python"] } test-util = { path = "../../test-util" } +tokio-postgres = "0.7" diff --git a/src/servers/src/lib.rs b/src/servers/src/lib.rs index b469916ef1..d59ba05e21 100644 --- a/src/servers/src/lib.rs +++ b/src/servers/src/lib.rs @@ -2,5 +2,7 @@ pub mod error; pub mod grpc; pub mod http; pub mod mysql; +#[cfg(feature = "postgres")] +pub mod postgres; pub mod query_handler; pub mod server; diff --git a/src/servers/src/postgres/handler.rs b/src/servers/src/postgres/handler.rs new file mode 100644 index 0000000000..1fd8f32d31 --- /dev/null +++ b/src/servers/src/postgres/handler.rs @@ -0,0 +1,295 @@ +use std::ops::Deref; + +use async_trait::async_trait; +use common_query::Output; +use common_recordbatch::{util, RecordBatch}; +use common_time::timestamp::TimeUnit; +use datatypes::prelude::{ConcreteDataType, Value}; +use datatypes::schema::SchemaRef; +use pgwire::api::portal::Portal; +use pgwire::api::query::{ExtendedQueryHandler, SimpleQueryHandler}; +use pgwire::api::results::{FieldInfo, Response, Tag, TextQueryResponseBuilder}; +use pgwire::api::{ClientInfo, Type}; +use pgwire::error::{PgWireError, PgWireResult}; + +use crate::error::{self, Error, Result}; +use crate::query_handler::SqlQueryHandlerRef; + +pub struct PostgresServerHandler { + query_handler: SqlQueryHandlerRef, +} + +impl PostgresServerHandler { + pub fn new(query_handler: SqlQueryHandlerRef) -> Self { + PostgresServerHandler { query_handler } + } +} + +#[async_trait] +impl SimpleQueryHandler for PostgresServerHandler { + async fn do_query(&self, _client: &C, query: &str) -> PgWireResult + where + C: ClientInfo + Unpin + Send + Sync, + { + let output = self + .query_handler + .do_query(query) + .await + .map_err(|e| PgWireError::ApiError(Box::new(e)))?; + + match output { + Output::AffectedRows(rows) => Ok(Response::Execution(Tag::new_for_execution( + "OK", + Some(rows), + ))), + Output::Stream(record_stream) => { + let schema = record_stream.schema(); + let recordbatches = util::collect(record_stream) + .await + .map_err(|e| PgWireError::ApiError(Box::new(e)))?; + recordbatches_to_query_response(recordbatches.iter(), schema) + } + Output::RecordBatches(recordbatches) => { + let schema = recordbatches.schema(); + recordbatches_to_query_response(recordbatches.to_vec().iter(), schema) + } + } + } +} + +fn recordbatches_to_query_response<'a, I>( + recordbatches: I, + schema: SchemaRef, +) -> PgWireResult +where + I: Iterator, +{ + let pg_schema = schema_to_pg(schema).map_err(|e| PgWireError::ApiError(Box::new(e)))?; + let mut builder = TextQueryResponseBuilder::new(pg_schema); + + for recordbatch in recordbatches { + for row in recordbatch.rows() { + let row = row.map_err(|e| PgWireError::ApiError(Box::new(e)))?; + for value in row.into_iter() { + encode_value(&value, &mut builder)?; + } + builder.finish_row(); + } + } + + Ok(Response::Query(builder.build())) +} + +fn schema_to_pg(origin: SchemaRef) -> Result> { + origin + .column_schemas() + .iter() + .map(|col| { + Ok(FieldInfo::new( + col.name.clone(), + None, + None, + type_translate(&col.data_type)?, + )) + }) + .collect::>>() +} + +fn encode_value(value: &Value, builder: &mut TextQueryResponseBuilder) -> PgWireResult<()> { + match value { + Value::Null => builder.append_field(None::), + Value::Boolean(v) => builder.append_field(Some(v)), + Value::UInt8(v) => builder.append_field(Some(v)), + Value::UInt16(v) => builder.append_field(Some(v)), + Value::UInt32(v) => builder.append_field(Some(v)), + Value::UInt64(v) => builder.append_field(Some(v)), + Value::Int8(v) => builder.append_field(Some(v)), + Value::Int16(v) => builder.append_field(Some(v)), + Value::Int32(v) => builder.append_field(Some(v)), + Value::Int64(v) => builder.append_field(Some(v)), + Value::Float32(v) => builder.append_field(Some(v.0)), + Value::Float64(v) => builder.append_field(Some(v.0)), + Value::String(v) => builder.append_field(Some(v.as_utf8())), + Value::Binary(v) => builder.append_field(Some(hex::encode(v.deref()))), + Value::Date(v) => builder.append_field(Some(v.val())), + Value::DateTime(v) => builder.append_field(Some(v.val())), + Value::Timestamp(v) => builder.append_field(Some(v.convert_to(TimeUnit::Millisecond))), + Value::List(_) => Err(PgWireError::ApiError(Box::new(Error::Internal { + err_msg: format!( + "cannot write value {:?} in postgres protocol: unimplemented", + &value + ), + }))), + } +} + +fn type_translate(origin: &ConcreteDataType) -> Result { + match origin { + &ConcreteDataType::Null(_) => Ok(Type::UNKNOWN), + &ConcreteDataType::Boolean(_) => Ok(Type::BOOL), + &ConcreteDataType::Int8(_) | &ConcreteDataType::UInt8(_) => Ok(Type::CHAR), + &ConcreteDataType::Int16(_) | &ConcreteDataType::UInt16(_) => Ok(Type::INT2), + &ConcreteDataType::Int32(_) | &ConcreteDataType::UInt32(_) => Ok(Type::INT4), + &ConcreteDataType::Int64(_) | &ConcreteDataType::UInt64(_) => Ok(Type::INT8), + &ConcreteDataType::Float32(_) => Ok(Type::FLOAT4), + &ConcreteDataType::Float64(_) => Ok(Type::FLOAT8), + &ConcreteDataType::Binary(_) => Ok(Type::BYTEA), + &ConcreteDataType::String(_) => Ok(Type::VARCHAR), + &ConcreteDataType::Date(_) => Ok(Type::DATE), + &ConcreteDataType::DateTime(_) => Ok(Type::TIMESTAMP), + &ConcreteDataType::Timestamp(_) => Ok(Type::TIMESTAMP), + &ConcreteDataType::List(_) => error::InternalSnafu { + err_msg: format!("not implemented for column datatype {:?}", origin), + } + .fail(), + } +} + +#[async_trait] +impl ExtendedQueryHandler for PostgresServerHandler { + async fn do_query(&self, _client: &mut C, _portal: &Portal) -> PgWireResult + where + C: ClientInfo + Unpin + Send + Sync, + { + unimplemented!() + } +} + +#[cfg(test)] +mod test { + use std::sync::Arc; + + use datatypes::schema::{ColumnSchema, Schema}; + use datatypes::value::ListValue; + use pgwire::api::results::FieldInfo; + use pgwire::api::Type; + + use super::*; + + #[test] + fn test_schema_convert() { + let column_schemas = vec![ + ColumnSchema::new("nulls", ConcreteDataType::null_datatype(), true), + ColumnSchema::new("bools", ConcreteDataType::boolean_datatype(), true), + ColumnSchema::new("int8s", ConcreteDataType::int8_datatype(), true), + ColumnSchema::new("int16s", ConcreteDataType::int16_datatype(), true), + ColumnSchema::new("int32s", ConcreteDataType::int32_datatype(), true), + ColumnSchema::new("int64s", ConcreteDataType::int64_datatype(), true), + ColumnSchema::new("uint8s", ConcreteDataType::uint8_datatype(), true), + ColumnSchema::new("uint16s", ConcreteDataType::uint16_datatype(), true), + ColumnSchema::new("uint32s", ConcreteDataType::uint32_datatype(), true), + ColumnSchema::new("uint64s", ConcreteDataType::uint64_datatype(), true), + ColumnSchema::new("float32s", ConcreteDataType::float32_datatype(), true), + ColumnSchema::new("float64s", ConcreteDataType::float64_datatype(), true), + ColumnSchema::new("binaries", ConcreteDataType::binary_datatype(), true), + ColumnSchema::new("strings", ConcreteDataType::string_datatype(), true), + ColumnSchema::new( + "timestamps", + ConcreteDataType::timestamp_millis_datatype(), + true, + ), + ColumnSchema::new("dates", ConcreteDataType::date_datatype(), true), + ]; + let pg_field_info = vec![ + FieldInfo::new("nulls".into(), None, None, Type::UNKNOWN), + FieldInfo::new("bools".into(), None, None, Type::BOOL), + FieldInfo::new("int8s".into(), None, None, Type::CHAR), + FieldInfo::new("int16s".into(), None, None, Type::INT2), + FieldInfo::new("int32s".into(), None, None, Type::INT4), + FieldInfo::new("int64s".into(), None, None, Type::INT8), + FieldInfo::new("uint8s".into(), None, None, Type::CHAR), + FieldInfo::new("uint16s".into(), None, None, Type::INT2), + FieldInfo::new("uint32s".into(), None, None, Type::INT4), + FieldInfo::new("uint64s".into(), None, None, Type::INT8), + FieldInfo::new("float32s".into(), None, None, Type::FLOAT4), + FieldInfo::new("float64s".into(), None, None, Type::FLOAT8), + FieldInfo::new("binaries".into(), None, None, Type::BYTEA), + FieldInfo::new("strings".into(), None, None, Type::VARCHAR), + FieldInfo::new("timestamps".into(), None, None, Type::TIMESTAMP), + FieldInfo::new("dates".into(), None, None, Type::DATE), + ]; + let schema = Arc::new(Schema::new(column_schemas)); + let fs = schema_to_pg(schema).unwrap(); + assert_eq!(fs, pg_field_info); + } + + #[test] + fn test_encode_text_format_data() { + let schema = vec![ + FieldInfo::new("nulls".into(), None, None, Type::UNKNOWN), + FieldInfo::new("bools".into(), None, None, Type::BOOL), + FieldInfo::new("uint8s".into(), None, None, Type::CHAR), + FieldInfo::new("uint16s".into(), None, None, Type::INT2), + FieldInfo::new("uint32s".into(), None, None, Type::INT4), + FieldInfo::new("uint64s".into(), None, None, Type::INT8), + FieldInfo::new("int8s".into(), None, None, Type::CHAR), + FieldInfo::new("int8s".into(), None, None, Type::CHAR), + FieldInfo::new("int16s".into(), None, None, Type::INT2), + FieldInfo::new("int16s".into(), None, None, Type::INT2), + FieldInfo::new("int32s".into(), None, None, Type::INT4), + FieldInfo::new("int32s".into(), None, None, Type::INT4), + FieldInfo::new("int64s".into(), None, None, Type::INT8), + FieldInfo::new("int64s".into(), None, None, Type::INT8), + FieldInfo::new("float32s".into(), None, None, Type::FLOAT4), + FieldInfo::new("float32s".into(), None, None, Type::FLOAT4), + FieldInfo::new("float32s".into(), None, None, Type::FLOAT4), + FieldInfo::new("float64s".into(), None, None, Type::FLOAT8), + FieldInfo::new("float64s".into(), None, None, Type::FLOAT8), + FieldInfo::new("float64s".into(), None, None, Type::FLOAT8), + FieldInfo::new("strings".into(), None, None, Type::VARCHAR), + FieldInfo::new("binaries".into(), None, None, Type::BYTEA), + FieldInfo::new("dates".into(), None, None, Type::DATE), + FieldInfo::new("datetimes".into(), None, None, Type::TIMESTAMP), + FieldInfo::new("timestamps".into(), None, None, Type::TIMESTAMP), + ]; + + let values = vec![ + Value::Null, + Value::Boolean(true), + Value::UInt8(u8::MAX), + Value::UInt16(u16::MAX), + Value::UInt32(u32::MAX), + Value::UInt64(u64::MAX), + Value::Int8(i8::MAX), + Value::Int8(i8::MIN), + Value::Int16(i16::MAX), + Value::Int16(i16::MIN), + Value::Int32(i32::MAX), + Value::Int32(i32::MIN), + Value::Int64(i64::MAX), + Value::Int64(i64::MIN), + Value::Float32(f32::MAX.into()), + Value::Float32(f32::MIN.into()), + Value::Float32(0f32.into()), + Value::Float64(f64::MAX.into()), + Value::Float64(f64::MIN.into()), + Value::Float64(0f64.into()), + Value::String("greptime".into()), + Value::Binary("greptime".as_bytes().into()), + Value::Date(1001i32.into()), + Value::DateTime(1000001i64.into()), + Value::Timestamp(1000001i64.into()), + ]; + let mut builder = TextQueryResponseBuilder::new(schema); + for i in values { + assert!(encode_value(&i, &mut builder).is_ok()); + } + + let err = encode_value( + &Value::List(ListValue::new( + Some(Box::new(vec![])), + ConcreteDataType::int8_datatype(), + )), + &mut builder, + ) + .unwrap_err(); + match err { + PgWireError::ApiError(e) => { + assert!(format!("{}", e).contains("Internal error:")); + } + _ => { + unreachable!() + } + } + } +} diff --git a/src/servers/src/postgres/mod.rs b/src/servers/src/postgres/mod.rs new file mode 100644 index 0000000000..b7e04fe869 --- /dev/null +++ b/src/servers/src/postgres/mod.rs @@ -0,0 +1,4 @@ +mod handler; +mod server; + +pub use server::PostgresServer; diff --git a/src/servers/src/postgres/server.rs b/src/servers/src/postgres/server.rs new file mode 100644 index 0000000000..f34e60d9de --- /dev/null +++ b/src/servers/src/postgres/server.rs @@ -0,0 +1,136 @@ +use std::future::Future; +use std::net::SocketAddr; +use std::sync::Arc; + +use async_trait::async_trait; +use common_runtime::Runtime; +use common_telemetry::logging::{error, info}; +use futures::future::AbortHandle; +use futures::future::AbortRegistration; +use futures::future::Abortable; +use futures::StreamExt; +use pgwire::api::auth::noop::NoopStartupHandler; +use pgwire::tokio::process_socket; +use snafu::prelude::*; +use tokio; +use tokio::task::JoinHandle; +use tokio_stream::wrappers::TcpListenerStream; + +use crate::error::{self, Result}; +use crate::postgres::handler::PostgresServerHandler; +use crate::query_handler::SqlQueryHandlerRef; +use crate::server::Server; + +pub struct PostgresServer { + // See MySQL module for usage of these types + abort_handle: AbortHandle, + abort_registration: Option, + + // A handle holding the TCP accepting task. + join_handle: Option>, + + auth_handler: Arc, + query_handler: Arc, + io_runtime: Arc, +} + +impl PostgresServer { + /// Creates a new Postgres server with provided query_handler and async runtime + pub fn new(query_handler: SqlQueryHandlerRef, io_runtime: Arc) -> PostgresServer { + let (abort_handle, registration) = AbortHandle::new_pair(); + let postgres_handler = Arc::new(PostgresServerHandler::new(query_handler)); + let startup_handler = Arc::new(NoopStartupHandler); + PostgresServer { + abort_handle, + abort_registration: Some(registration), + join_handle: None, + + auth_handler: startup_handler, + query_handler: postgres_handler, + + io_runtime, + } + } + + async fn bind(addr: SocketAddr) -> Result<(TcpListenerStream, SocketAddr)> { + let listener = tokio::net::TcpListener::bind(addr) + .await + .context(error::TokioIoSnafu { + err_msg: format!("Failed to bind addr {}", addr), + })?; + // get actually bond addr in case input addr use port 0 + let addr = listener.local_addr()?; + info!("Postgres server is bound to {}", addr); + Ok((TcpListenerStream::new(listener), addr)) + } + + fn accept(&self, accepting_stream: Abortable) -> impl Future { + let io_runtime = self.io_runtime.clone(); + let auth_handler = self.auth_handler.clone(); + let query_handler = self.query_handler.clone(); + + accepting_stream.for_each(move |tcp_stream| { + let io_runtime = io_runtime.clone(); + let auth_handler = auth_handler.clone(); + let query_handler = query_handler.clone(); + + async move { + match tcp_stream { + Err(error) => error!("Broken pipe: {}", error), // IoError doesn't impl ErrorExt. + Ok(io_stream) => { + io_runtime.spawn(async move { + process_socket( + io_stream, + auth_handler.clone(), + query_handler.clone(), + query_handler.clone(), + ) + .await; + }); + } + }; + } + }) + } +} + +#[async_trait] +impl Server for PostgresServer { + async fn shutdown(&mut self) -> Result<()> { + match self.join_handle.take() { + Some(join_handle) => { + self.abort_handle.abort(); + + if let Err(error) = join_handle.await { + // Couldn't use `error!(e; xxx)` as JoinError doesn't implement ErrorExt. + error!( + "Unexpected error during shutdown Postgres server, error: {}", + error + ); + } else { + info!("Postgres server is shutdown.") + } + Ok(()) + } + None => error::InternalSnafu { + err_msg: "Postgres server is not started.", + } + .fail()?, + } + } + + async fn start(&mut self, listening: SocketAddr) -> Result { + match self.abort_registration.take() { + Some(registration) => { + let (stream, listener) = Self::bind(listening).await?; + let stream = Abortable::new(stream, registration); + self.join_handle = Some(tokio::spawn(self.accept(stream))); + Ok(listener) + } + None => error::InternalSnafu { + err_msg: "Postgres server has been started.", + } + .fail()?, + } + } +} diff --git a/src/servers/tests/mod.rs b/src/servers/tests/mod.rs index 22f8666db5..54abbe7935 100644 --- a/src/servers/tests/mod.rs +++ b/src/servers/tests/mod.rs @@ -18,6 +18,8 @@ use script::{ engine::{CompileContext, EvalContext, Script, ScriptEngine}, python::{PyEngine, PyScript}, }; +#[cfg(feature = "postgres")] +mod postgres; struct DummyInstance { query_engine: QueryEngineRef, diff --git a/src/servers/tests/postgres/mod.rs b/src/servers/tests/postgres/mod.rs new file mode 100644 index 0000000000..8d9abddf9b --- /dev/null +++ b/src/servers/tests/postgres/mod.rs @@ -0,0 +1,169 @@ +use std::net::SocketAddr; +use std::sync::Arc; +use std::time::Duration; + +use common_runtime::Builder as RuntimeBuilder; +use rand::rngs::StdRng; +use rand::Rng; +use servers::error::Result; +use servers::postgres::PostgresServer; +use servers::server::Server; +use test_util::MemTable; +use tokio_postgres::{Client, Error as PgError, NoTls, SimpleQueryMessage}; + +use crate::create_testing_sql_query_handler; + +fn create_postgres_server(table: MemTable) -> Result> { + let query_handler = create_testing_sql_query_handler(table); + let io_runtime = Arc::new( + RuntimeBuilder::default() + .worker_threads(4) + .thread_name("postgres-io-handlers") + .build() + .unwrap(), + ); + Ok(Box::new(PostgresServer::new(query_handler, io_runtime))) +} + +#[tokio::test] +pub async fn test_start_postgres_server() -> Result<()> { + let table = MemTable::default_numbers_table(); + + let mut pg_server = create_postgres_server(table)?; + let listening = "127.0.0.1:0".parse::().unwrap(); + let result = pg_server.start(listening).await; + assert!(result.is_ok()); + + let result = pg_server.start(listening).await; + assert!(result + .unwrap_err() + .to_string() + .contains("Postgres server has been started.")); + Ok(()) +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn test_shutdown_pg_server() -> Result<()> { + common_telemetry::init_default_ut_logging(); + + let table = MemTable::default_numbers_table(); + + let mut postgres_server = create_postgres_server(table)?; + let result = postgres_server.shutdown().await; + assert!(result + .unwrap_err() + .to_string() + .contains("Postgres server is not started.")); + + let listening = "127.0.0.1:5432".parse::().unwrap(); + let server_addr = postgres_server.start(listening).await.unwrap(); + let server_port = server_addr.port(); + + let mut join_handles = vec![]; + for _ in 0..2 { + join_handles.push(tokio::spawn(async move { + for _ in 0..1000 { + match create_connection(server_port).await { + Ok(connection) => { + let rows = connection + .simple_query("SELECT uint32s FROM numbers LIMIT 1") + .await + .unwrap(); + let result_text = unwrap_results(&rows)[0]; + let result: i32 = result_text.parse().unwrap(); + assert_eq!(result, 0); + tokio::time::sleep(Duration::from_millis(10)).await; + } + Err(e) => { + return Err(e); + } + } + } + Ok(()) + })) + } + + tokio::time::sleep(Duration::from_millis(100)).await; + let result = postgres_server.shutdown().await; + assert!(result.is_ok()); + + for handle in join_handles.iter_mut() { + let result = handle.await.unwrap(); + assert!(result.is_err()); + let error = result.unwrap_err().to_string(); + assert!(error.contains("Connection refused") || error.contains("Connection reset by peer")); + } + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn test_query_pg_concurrently() -> Result<()> { + common_telemetry::init_default_ut_logging(); + + let table = MemTable::default_numbers_table(); + + let mut pg_server = create_postgres_server(table)?; + let listening = "127.0.0.1:0".parse::().unwrap(); + let server_addr = pg_server.start(listening).await.unwrap(); + let server_port = server_addr.port(); + + let threads = 4; + let expect_executed_queries_per_worker = 300; + let mut join_handles = vec![]; + for _i in 0..threads { + join_handles.push(tokio::spawn(async move { + let mut rand: StdRng = rand::SeedableRng::from_entropy(); + + let mut client = create_connection(server_port).await.unwrap(); + + for _k in 0..expect_executed_queries_per_worker { + let expected: u32 = rand.gen_range(0..100); + let result: u32 = unwrap_results( + client + .simple_query(&format!( + "SELECT uint32s FROM numbers WHERE uint32s = {}", + expected + )) + .await + .unwrap() + .as_ref(), + )[0] + .parse() + .unwrap(); + assert_eq!(result, expected); + + // 1/100 chance to reconnect + let should_recreate_conn = expected == 1; + if should_recreate_conn { + client = create_connection(server_port).await.unwrap(); + } + } + expect_executed_queries_per_worker + })) + } + let mut total_pending_queries = threads * expect_executed_queries_per_worker; + for handle in join_handles.iter_mut() { + total_pending_queries -= handle.await.unwrap(); + } + assert_eq!(0, total_pending_queries); + Ok(()) +} + +async fn create_connection(port: u16) -> std::result::Result { + let url = format!("host=127.0.0.1 port={} connect_timeout=2", port); + let (client, conn) = tokio_postgres::connect(&url, NoTls).await?; + tokio::spawn(conn); + Ok(client) +} + +fn resolve_result(resp: &SimpleQueryMessage, col_index: usize) -> Option<&str> { + match resp { + &SimpleQueryMessage::Row(ref r) => r.get(col_index), + _ => None, + } +} + +fn unwrap_results(resp: &[SimpleQueryMessage]) -> Vec<&str> { + resp.iter().filter_map(|m| resolve_result(m, 0)).collect() +}