diff --git a/.github/labeler.yml b/.github/labeler.yml index 6ea06740b2518..e0c386a273ebe 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,3 +22,6 @@ labels: title: "^test.*" - label: "component/doc" title: "^doc.*" + +- label: "user-facing-changes" + body: '- \[ \] My PR \*\*DOES NOT\*\* contain user-facing changes' diff --git a/Cargo.lock b/Cargo.lock index 5849cc71a321d..40ad4bdf56ec4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -528,7 +528,7 @@ dependencies = [ "http", "hyper", "ring", - "time 0.3.17", + "time 0.3.18", "tokio", "tower", "tracing", @@ -691,7 +691,7 @@ dependencies = [ "percent-encoding", "regex", "ring", - "time 0.3.17", + "time 0.3.18", "tracing", ] @@ -829,7 +829,7 @@ dependencies = [ "itoa", "num-integer", "ryu", - "time 0.3.17", + "time 0.3.18", ] [[package]] @@ -859,9 +859,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5694b64066a2459918d8074c2ce0d5a88f409431994c2356617c8ae0c4721fc" +checksum = "4e246206a63c9830e118d12c894f56a82033da1a2361f5544deeee3df85c99d9" dependencies = [ "async-trait", "axum-core", @@ -1066,9 +1066,9 @@ dependencies = [ [[package]] name = "borsh" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ef05d137e34b7ac51dbec170ee523a9b728cff71385796771d259771d592f8" +checksum = "40f9ca3698b2e4cb7c15571db0abc5551dca417a21ae8140460b50309bb2cc62" dependencies = [ "borsh-derive", "hashbrown 0.13.2", @@ -1076,9 +1076,9 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190b1188f062217531748807129459c8c14641b648e887e39681a433db7fc939" +checksum = "598b3eacc6db9c3ee57b22707ad8f6a8d2f6d442bfe24ffeb8cbb70ca59e6a35" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", @@ -1089,9 +1089,9 @@ dependencies = [ [[package]] name = "borsh-derive-internal" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fcf747a3e4eb47869441664df09d0eb88dcc9a85d499860efb82c2cfe6affc" +checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a" dependencies = [ "proc-macro2", "quote", @@ -1100,9 +1100,9 @@ dependencies = [ [[package]] name = "borsh-schema-derive-internal" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f671d085f791c5fd3331c843ded45454b034b6188bf0f78ed28e7fd66a8b3f69" +checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49" dependencies = [ "proc-macro2", "quote", @@ -1363,9 +1363,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.4" +version = "4.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" +checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3" dependencies = [ "bitflags", "clap_derive 4.1.0", @@ -1845,9 +1845,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -1857,9 +1857,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", @@ -1872,15 +1872,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", @@ -2084,7 +2084,7 @@ dependencies = [ "rust_decimal", "serde", "thiserror", - "time 0.3.17", + "time 0.3.18", ] [[package]] @@ -2146,9 +2146,9 @@ dependencies = [ [[package]] name = "enum-iterator" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91a4ec26efacf4aeff80887a175a419493cb6f8b5480d26387eb0bd038976187" +checksum = "9ea166b3f7dc1032f7866d13f8d8e02c8d87507b61750176b86554964dc6a7bf" dependencies = [ "enum-iterator-derive", ] @@ -2249,9 +2249,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -2581,9 +2581,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "glob" @@ -3066,13 +3066,13 @@ checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" [[package]] name = "inferno" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6e66fa9bb3c52f40d05c11b78919ff2f18993c2305bd8a62556d20cb3e9606f" +checksum = "2fb7c1b80a1dfa604bb4a649a5c5aeef3d913f7c520cb42b40e534e8a61bcdfc" dependencies = [ "ahash 0.8.3", - "atty", "indexmap", + "is-terminal", "itoa", "log", "num-format", @@ -3366,7 +3366,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7b603516767d1ab23d0de09d023e62966c3322f7148297c35cf3d97aa8b37fa" dependencies = [ - "clap 4.1.4", + "clap 4.1.6", "termcolor", "threadpool", ] @@ -3804,14 +3804,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -4108,9 +4108,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "oorandom" @@ -4146,7 +4146,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "time 0.3.17", + "time 0.3.18", "tokio", "ureq", "uuid", @@ -4186,9 +4186,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.24.0+1.1.1s" +version = "111.25.0+1.1.1t" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" +checksum = "3173cd3626c43e3854b1b727422a276e568d9ec5fe8cec197822cf52cfb743d6" dependencies = [ "cc", ] @@ -4305,9 +4305,9 @@ checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "ouroboros" -version = "0.15.5" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbb50b356159620db6ac971c6d5c9ab788c9cc38a6f49619fca2a27acb062ca" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" dependencies = [ "aliasable", "ouroboros_macro", @@ -4315,9 +4315,9 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.15.5" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0d9d1a6191c4f391f87219d1ea42b23f09ee84d64763cd05ee6ea88d9f384d" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" dependencies = [ "Inflector", "proc-macro-error", @@ -4906,7 +4906,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "time 0.3.17", + "time 0.3.18", "url", ] @@ -5346,9 +5346,9 @@ dependencies = [ [[package]] name = "rend" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79af64b4b6362ffba04eef3a4e10829718a4896dac19daa741851c86781edf95" +checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" dependencies = [ "bytecheck", ] @@ -5378,7 +5378,7 @@ dependencies = [ "serde_json", "sha1", "sha2", - "time 0.3.17", + "time 0.3.18", "ureq", ] @@ -6483,9 +6483,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.39" +version = "0.7.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec2b3485b07d96ddfd3134767b8a447b45ea4eb91448d0a35180ec0ffd5ed15" +checksum = "c30f1d45d9aa61cbc8cd1eb87705470892289bb2d01943e7803b873a57404dc3" dependencies = [ "bytecheck", "hashbrown 0.12.3", @@ -6497,9 +6497,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.39" +version = "0.7.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eaedadc88b53e36dd32d940ed21ae4d850d5916f2581526921f553a72ac34c4" +checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476" dependencies = [ "proc-macro2", "quote", @@ -6807,7 +6807,7 @@ dependencies = [ "serde", "serde_json", "serde_with_macros", - "time 0.3.17", + "time 0.3.18", ] [[package]] @@ -6916,9 +6916,9 @@ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" dependencies = [ "libc", "signal-hook-registry", @@ -6937,9 +6937,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -6978,7 +6978,7 @@ dependencies = [ "num-bigint", "num-traits", "thiserror", - "time 0.3.17", + "time 0.3.18", ] [[package]] @@ -7343,10 +7343,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -7426,9 +7427,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "af0097eaf301d576d0b2aead7a59facab6d53cc636340f0291fab8446a2e8613" dependencies = [ "itoa", "libc", @@ -7619,9 +7620,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -7880,7 +7881,7 @@ dependencies = [ "sharded-slab", "smallvec", "thread_local", - "time 0.3.17", + "time 0.3.18", "tracing", "tracing-core", "tracing-log", @@ -8574,7 +8575,7 @@ dependencies = [ "stable_deref_trait", "strum", "syn", - "time 0.3.17", + "time 0.3.18", "tokio", "tokio-stream", "tokio-util", diff --git a/e2e_test/batch/functions/pow.slt.part b/e2e_test/batch/functions/pow.slt.part index ac67691dec08a..8eed2683cb9d1 100644 --- a/e2e_test/batch/functions/pow.slt.part +++ b/e2e_test/batch/functions/pow.slt.part @@ -60,6 +60,58 @@ select exp(0::smallint); ---- 1 +query R +select 2.0 ^ 3.0 +---- +8 + +query R +select 2.0::decimal ^ 3.0::decimal +---- +8 + +query R +select 2.0::double ^ 3.0::double +---- +8 + +query R +select 2.0::smallint ^ 3.0::smallint +---- +8 + +query R +select 2.0::bigint ^ 3.0::bigint +---- +8 + +query R +select 2.0 ^ -2; +---- +0.25 + +query R +select 2.23 ^ -2.33; +---- +0.15432975583772085 + +query R +select 100000 ^ 0; +---- +1 + +query R +select 100000 ^ -200000000000000; +---- +0 + +statement error QueryError: Expr error: Numeric out of range +select 100000 ^ 200000000000000; + + +statement error QueryError: Expr error: Numeric out of range +select -100000 ^ 200000000000001; + query R select exp(0.0); ---- diff --git a/risedev.yml b/risedev.yml index 9fa7e11230c87..5ed1d8d450ea4 100644 --- a/risedev.yml +++ b/risedev.yml @@ -128,6 +128,20 @@ profile: - use: compactor # - use: prometheus # - use: grafana + gcs: + steps: + # - use: etcd + - use: meta-node + - use: compute-node + - use: frontend + # If you want to use google cloud stoage as storage backend, configure hdfs namenode and root path: + - use: opendal + engine: gcs + bucket: bucket-name + root: risingwave + - use: compactor + # - use: prometheus + # - use: grafana oss: steps: @@ -685,7 +699,7 @@ template: # Minio instances used by this compute node provide-minio: "minio*" - # OpenDAL backend used by this compute node + # OpenDAL storage backend used by this compute node provide-opendal: "opendal*" # AWS s3 bucket used by this compute node diff --git a/src/frontend/src/binder/expr/binary_op.rs b/src/frontend/src/binder/expr/binary_op.rs index 460381a1f1449..eea030bc5b971 100644 --- a/src/frontend/src/binder/expr/binary_op.rs +++ b/src/frontend/src/binder/expr/binary_op.rs @@ -80,6 +80,7 @@ impl Binder { } BinaryOperator::BitwiseOr => ExprType::BitwiseOr, BinaryOperator::BitwiseAnd => ExprType::BitwiseAnd, + BinaryOperator::BitwiseXor => ExprType::Pow, BinaryOperator::PGBitwiseXor => ExprType::BitwiseXor, BinaryOperator::PGBitwiseShiftLeft => ExprType::BitwiseShiftLeft, BinaryOperator::PGBitwiseShiftRight => ExprType::BitwiseShiftRight, diff --git a/src/object_store/src/object/mod.rs b/src/object_store/src/object/mod.rs index 383494d14e747..68aaca6781510 100644 --- a/src/object_store/src/object/mod.rs +++ b/src/object_store/src/object/mod.rs @@ -829,6 +829,16 @@ pub async fn parse_remote_object_store( .monitored(metrics), ) } + gcs if gcs.starts_with("gcs://") => { + let gcs = gcs.strip_prefix("gcs://").unwrap(); + let (bucket, root) = gcs.split_once('@').unwrap(); + ObjectStoreImpl::Opendal( + OpendalObjectStore::new_gcs_engine(bucket.to_string(), root.to_string()) + .unwrap() + .monitored(metrics), + ) + } + oss if oss.starts_with("oss://") => { let oss = oss.strip_prefix("oss://").unwrap(); let (bucket, root) = oss.split_once('@').unwrap(); @@ -904,6 +914,15 @@ pub fn parse_local_object_store(url: &str, metrics: Arc) -> .monitored(metrics), ) } + gcs if gcs.starts_with("gcs://") => { + let gcs = gcs.strip_prefix("gcs://").unwrap(); + let (bucket, root) = gcs.split_once('@').unwrap(); + ObjectStoreImpl::Opendal( + OpendalObjectStore::new_gcs_engine(bucket.to_string(), root.to_string()) + .unwrap() + .monitored(metrics), + ) + } other => { unimplemented!( "{} Hummock only supports s3, minio, disk, and memory for now.", diff --git a/src/object_store/src/object/opendal_engine/gcs.rs b/src/object_store/src/object/opendal_engine/gcs.rs new file mode 100644 index 0000000000000..3165675f85760 --- /dev/null +++ b/src/object_store/src/object/opendal_engine/gcs.rs @@ -0,0 +1,36 @@ +// Copyright 2023 RisingWave Labs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use opendal::services::Gcs; +use opendal::Operator; + +use super::{EngineType, OpendalObjectStore}; +use crate::object::ObjectResult; +impl OpendalObjectStore { + /// create opendal gcs engine. + pub fn new_gcs_engine(bucket: String, root: String) -> ObjectResult { + // Create gcs backend builder. + let mut builder = Gcs::default(); + + builder.bucket(&bucket); + + builder.root(&root); + + let op: Operator = Operator::create(builder)?.finish(); + Ok(Self { + op, + engine_type: EngineType::Gcs, + }) + } +} diff --git a/src/object_store/src/object/opendal_engine/mod.rs b/src/object_store/src/object/opendal_engine/mod.rs index 15c7b6b6f3ca5..d2a9da19081a2 100644 --- a/src/object_store/src/object/opendal_engine/mod.rs +++ b/src/object_store/src/object/opendal_engine/mod.rs @@ -20,5 +20,7 @@ pub mod hdfs; #[cfg(feature = "hdfs-backend")] pub use hdfs::*; +pub mod gcs; +pub use gcs::*; pub mod oss; pub use oss::*; diff --git a/src/object_store/src/object/opendal_engine/opendal_object_store.rs b/src/object_store/src/object/opendal_engine/opendal_object_store.rs index d3001e1200d34..eca30c3fe16c3 100644 --- a/src/object_store/src/object/opendal_engine/opendal_object_store.rs +++ b/src/object_store/src/object/opendal_engine/opendal_object_store.rs @@ -36,6 +36,7 @@ pub struct OpendalObjectStore { pub enum EngineType { Memory, Hdfs, + Gcs, Oss, } @@ -183,6 +184,7 @@ impl ObjectStore for OpendalObjectStore { match self.engine_type { EngineType::Memory => "Memory", EngineType::Hdfs => "Hdfs", + EngineType::Gcs => "Gcs", EngineType::Oss => "Oss", } } diff --git a/src/risedevtool/src/task/utils.rs b/src/risedevtool/src/task/utils.rs index 2ea067cfa5988..a6733bc051900 100644 --- a/src/risedevtool/src/task/utils.rs +++ b/src/risedevtool/src/task/utils.rs @@ -103,6 +103,10 @@ pub fn add_storage_backend( .arg(format!("hummock+hdfs://{}@{}", opendal.namenode, opendal.root)); true } + else if opendal.engine == "gcs"{ + cmd.arg("--state-store") + .arg(format!("hummock+gcs://{}@{}", opendal.bucket, opendal.root)); + true} else if opendal.engine == "oss"{ cmd.arg("--state-store") .arg(format!("hummock+oss://{}@{}", opendal.bucket, opendal.root));