You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by "leborchuk (via GitHub)" <gi...@apache.org> on 2026/05/18 14:56:50 UTC

[PR] Add Yezzey submodule to gpcontrib [cloudberry]

leborchuk opened a new pull request, #1752:
URL: https://github.com/apache/cloudberry/pull/1752

   Yezzey is an open-source extension for Apache Cloudberry and Greenplum 6 that transparently offloads Append-Only (AO/AOCO) table data to S3-compatible object storage. Inspired by Snowflake and AnyBlob, it extends the storage manager (smgr) so reads and writes go to S3 instead of local disk, keeping the user interface unchanged. A companion YProxy service acts as an I/O scheduler, managing connection pooling and request prioritization to prevent S3 throttling. Data is PGP-encrypted during upload. Benchmarks show only 10–43% query slowdown versus local storage, far outperforming PXF, making it ideal for cost-effective cold-data tiering.
   
   The main feature of Yezzey - you don't need to change tables or code; just launch yezzey_define_offload_policy and move the data to S3. In this way, you can unload your cluster using the available disk space.
   
   Currently, it is widely used on Greenplum 6 instances, and the goal is to provide users with the same interface in Cloudberry, so they can seamlessly migrate to Cloudberry.
   
   We placed Yezzey as a submodule, as we believe one day we will replace all outdated solutions like AO/AOCO/Yezzey with PAX. However, that has not happened yet and we still need Yezzey.
   
   <!-- Thank you for your contribution to Apache Cloudberry (Incubating)! -->
   
   Fixes #ISSUE_Number
   
   ### What does this PR do?
   <!-- Brief overview of the changes, including any major features or fixes -->
   
   ### Type of Change
   - [ ] Bug fix (non-breaking change)
   - [ ] New feature (non-breaking change)
   - [ ] Breaking change (fix or feature with breaking changes)
   - [ ] Documentation update
   
   ### Breaking Changes
   <!-- Remove if not applicable. If yes, explain impact and migration path -->
   
   ### Test Plan
   <!-- How did you test these changes? -->
   - [ ] Unit tests added/updated
   - [ ] Integration tests added/updated
   - [ ] Passed `make installcheck`
   - [ ] Passed `make -C src/test installcheck-cbdb-parallel`
   
   ### Impact
   <!-- Remove sections that don't apply -->
   **Performance:**
   <!-- Any performance implications? -->
   
   **User-facing changes:**
   <!-- Any changes visible to users? -->
   
   **Dependencies:**
   <!-- New dependencies or version changes? -->
   
   ### Checklist
   - [ ] Followed [contribution guide](https://cloudberry.apache.org/contribute/code)
   - [ ] Added/updated documentation
   - [ ] Reviewed code for security implications
   - [ ] Requested review from [cloudberry committers](https://github.com/orgs/apache/teams/cloudberry-committers)
   
   ### Additional Context
   <!-- Any other information that would help reviewers? Remove if none -->
   
   ### CI Skip Instructions
   <!--
   To skip CI builds, add the appropriate CI skip identifier to your PR title.
   The identifier must:
   - Be in square brackets []
   - Include the word "ci" and either "skip" or "no"
   - Only use for documentation-only changes or when absolutely necessary
   -->
   
   ---
   <!-- Join our community:
   - Mailing list: [dev@cloudberry.apache.org](https://lists.apache.org/list.html?dev@cloudberry.apache.org) (subscribe: dev-subscribe@cloudberry.apache.org)
   - Discussions: https://github.com/apache/cloudberry/discussions -->
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "reshke (via GitHub)" <gi...@apache.org>.
reshke commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4499649385

   Lgtm


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4507069191

   > > For managing the new submodule, we can introduce it in the same way discussed here: [#1084 (review)](https://github.com/apache/cloudberry/pull/1084#pullrequestreview-2813295236)
   > 
   > Yes, I did as was described. The issue is that there is no stored tag information and the tag is an ephemeral entity shown only in the `git submodule` output. See
   > 
   > ```
   > xifos@xifos-dev-jammy:~/git/cloudberry-leborchuk$ git submodule status
   >  0da57b85cf23e48d0e515f58c65a25425dbde012 contrib/pax_storage/src/cpp/contrib/googlebench (v1.9.2-3-g0da57b8)
   >  52204f78f94d7512df1f0f3bea1d47437a2c3a58 contrib/pax_storage/src/cpp/contrib/googletest (release-1.8.0-3536-g52204f78)
   >  3a58301067bbc03da89ae5a51b3e05b7da719d38 contrib/pax_storage/src/cpp/contrib/tabulate (v1.3-51-g3a58301)
   >  61c03f62b370b685b7994830b570a88d05ba15ab dependency/yyjson (0.10.0-20-g61c03f6)
   >  a09ea700d32bab83325aff9ff34d0582e50e3997 gpcontrib/gpcloud/test/googletest (release-1.8.0-2358-ga09ea700)
   >  0d88f66a5fd0dba82681eef5929529cb153cb325 gpcontrib/yezzey (1.8.8)
   > ```
   > 
   > Here yezzey linked with `1.8.8` tag but the link info is still commit hash. If I delete tag `git submodule ` just shows commit hash without tag info
   
   Hi, you're right. It looks good now. Here is my cmd list:
   
   ```
   cd cloudberry/
   git submodule add https://github.com/open-gpdb/yezzey.git gpcontrib/yezzey
   git submodule status
   cd gpcontrib/yezzey/
   git fetch --tags
   git tag --list
   git checkout tags/1.8.8
   cd ..
   git add gpcontrib/yezzey/
   git commit -m "Add yezzey to v1.8.8. xxxxx"
   ```
   
   Never mind. We can add the version number info in the commit history when upgrading it next time.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4913404745

   Have an issue with minio docker container - as - a service in github actions. So moved to the manually configured minio service in separate action from officially supported docker. Could be reviewed now. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3280150444


##########
configure:
##########
@@ -11337,6 +11339,56 @@ $as_echo "yes" >&6; }
 fi
 fi
 
+#
+# gp_stats_collector
+#
+
+
+
+# Check whether --with-gp-stats-collector was given.
+if test "${with_gp_stats_collector+set}" = set; then :
+  withval=$with_gp_stats_collector;
+  case $withval in
+    yes)
+      :
+      ;;
+    no)
+      :
+      ;;
+    *)
+      as_fn_error $? "no argument expected for --with-gp-stats-collector option" "$LINENO" 5
+      ;;
+  esac
+
+else
+  with_gp_stats_collector=no
+

Review Comment:
   Seems it's not related to this PR? We need to run `autoconf` again to generate this file.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4478935280

   It's the part of our roadmap, we discussed it https://github.com/apache/cloudberry/discussions/868
   
   See the item `Support Compute/Storage decouple by introducing Yezzey`


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk merged PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3281514332


##########
configure:
##########
@@ -11337,6 +11339,56 @@ $as_echo "yes" >&6; }
 fi
 fi
 
+#
+# gp_stats_collector
+#
+
+
+
+# Check whether --with-gp-stats-collector was given.
+if test "${with_gp_stats_collector+set}" = set; then :
+  withval=$with_gp_stats_collector;
+  case $withval in
+    yes)
+      :
+      ;;
+    no)
+      :
+      ;;
+    *)
+      as_fn_error $? "no argument expected for --with-gp-stats-collector option" "$LINENO" 5
+      ;;
+  esac
+
+else
+  with_gp_stats_collector=no
+

Review Comment:
   Yes, the hardest part was finding autocnf 2.69 version, because newest versions generates a lot of changes



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4485534382

   For managing the new submodule, we can introduce it in the same way discussed here: https://github.com/apache/cloudberry/pull/1084#pullrequestreview-2813295236


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3520629973


##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,334 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"
+
+jobs:
+
+  ## Stage 1: Build artifacts and run tests for cloudberry
+
+  test-cloudberry:
+    name: Build and Test Yezzey Cloudberry
+    runs-on: ubuntu-latest
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest
+      options: >-
+        --user root
+        -h cdw
+        -v /usr/share:/host_usr_share
+        -v /usr/local:/host_usr_local
+        -v /opt:/host_opt
+
+    services:
+      # Define the MinIO service container
+      minio:
+        image: lazybit/minio  # Use a specific MinIO image tag

Review Comment:
   Yep, but lazybit/minio has only latest tag - specify it



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4488189182

   > For managing the new submodule, we can introduce it in the same way discussed here: [#1084 (review)](https://github.com/apache/cloudberry/pull/1084#pullrequestreview-2813295236)
   
   Yes, I did as was described. The issue is that there is no stored tag information and the tag is an ephemeral entity shown only in the `git submodule` output. See
   
   ```
   xifos@xifos-dev-jammy:~/git/cloudberry-leborchuk$ git submodule status
    0da57b85cf23e48d0e515f58c65a25425dbde012 contrib/pax_storage/src/cpp/contrib/googlebench (v1.9.2-3-g0da57b8)
    52204f78f94d7512df1f0f3bea1d47437a2c3a58 contrib/pax_storage/src/cpp/contrib/googletest (release-1.8.0-3536-g52204f78)
    3a58301067bbc03da89ae5a51b3e05b7da719d38 contrib/pax_storage/src/cpp/contrib/tabulate (v1.3-51-g3a58301)
    61c03f62b370b685b7994830b570a88d05ba15ab dependency/yyjson (0.10.0-20-g61c03f6)
    a09ea700d32bab83325aff9ff34d0582e50e3997 gpcontrib/gpcloud/test/googletest (release-1.8.0-2358-ga09ea700)
    0d88f66a5fd0dba82681eef5929529cb153cb325 gpcontrib/yezzey (1.8.8)
   ```
   Here yezzey linked with `1.8.8` tag but the link info is still commit hash. If I delete tag `git submodule ` just shows commit hash without tag info


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4487646388

   > We also need to add the `yezzey` license info to the `licenses` dir and `LICENSE`, like other submodules. FYI.
   > 
   > * `pom.xml`.
   
   fixed


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3520675814


##########
configure.ac:
##########
@@ -1395,6 +1395,13 @@ if test "$with_zstd" = yes; then
   PKG_CHECK_MODULES([ZSTD], [libzstd >= 1.4.0])
 fi
 
+#
+# yezzey

Review Comment:
   Yes, yezzey needs C++11 and OpenSSL. It usually installed and enabled (using --with-ssl configuration option), but yes, we should check it explicity



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3534382326


##########
configure.ac:
##########


Review Comment:
   Thanks for the clarification. After reading the Yezzey README, I understand that YProxy is an optional runtime component rather than a hard dependency. It is mainly recommended to improve performance for workloads with frequent S3 requests. It would be helpful if this distinction could also be reflected in the Cloudberry documentation when Yezzey is integrated.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3534582417


##########
configure:
##########


Review Comment:
   I ran the `autoconf` in Rocky Linux 9 dev container, some diffs are for your information:
   ```diff
   diff --git a/configure b/configure
   index 6a585739..252e0477 100755
   --- a/configure
   +++ b/configure
   @@ -721,6 +721,7 @@ GREP
    with_apr_config
    with_libcurl
    with_rt
   +HAVE_CXX11
    with_yezzey
    PROTOC
    with_gp_stats_collector
   @@ -11468,54 +11469,372 @@ else
    fi
    
    
   +
   +
    if test "$with_yezzey" = yes; then :
       # then
   -  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with -std=c++11 for Yezzey" >&5
   -$as_echo_n "checking whether $CXX supports C++11 features with -std=c++11 for Yezzey... " >&6; }
   -if ${ac_cv_yezzey_cxx11+:} false; then :
   -  $as_echo_n "(cached) " >&6
   -else
   +    ax_cxx_compile_alternatives="11 0x"    ax_cxx_compile_cxx11_required=true
      ac_ext=cpp
    ac_cpp='$CXXCPP $CPPFLAGS'
    ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
    ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
    ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
   +  ac_success=no
   +
    
   +
   +    if test x$ac_success = xno; then
   +                for alternative in ${ax_cxx_compile_alternatives}; do
   +      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
   +        cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
   +        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
   +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
   +if eval \${$cachevar+:} false; then :
   +  $as_echo_n "(cached) " >&6
   +else
      ac_save_CXX="$CXX"
   -  CXX="$CXX -std=c++11"
   -  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
   +           CXX="$CXX $switch"
   +           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
    /* end confdefs.h.  */
    
   +
   +// If the compiler admits that it is not ready for C++11, why torture it?
   +// Hopefully, this will speed up the test.
   +
    #ifndef __cplusplus
   +
    #error "This is not a C++ compiler"
   +
    #elif __cplusplus < 201103L
   +
    #error "This is not a C++11 compiler"
   -#endif
   -int main() { auto value = 0; return value; }
   +
   +#else
   +
   +namespace cxx11
   +{
   +
   +  namespace test_static_assert
   +  {
   +
   +    template <typename T>
   +    struct check
   +    {
   +      static_assert(sizeof(int) <= sizeof(T), "not big enough");
   +    };
   +
   +  }
   +
   +  namespace test_final_override
   +  {
   +
   +    struct Base
   +    {
   +      virtual ~Base() {}
   +      virtual void f() {}
   +    };
   +
   +    struct Derived : public Base
   +    {
   +      virtual ~Derived() override {}
   +      virtual void f() override {}
   +    };
   +
   +  }
   +
   +  namespace test_double_right_angle_brackets
   +  {
   +
   +    template < typename T >
   +    struct check {};
   +
   +    typedef check<void> single_type;
   +    typedef check<check<void>> double_type;
   +    typedef check<check<check<void>>> triple_type;
   +    typedef check<check<check<check<void>>>> quadruple_type;
   +
   +  }
   +
   +  namespace test_decltype
   +  {
   +
   +    int
   +    f()
   +    {
   +      int a = 1;
   +      decltype(a) b = 2;
   +      return a + b;
   +    }
   +
   +  }
   +
   +  namespace test_type_deduction
   +  {
   +
   +    template < typename T1, typename T2 >
   +    struct is_same
   +    {
   +      static const bool value = false;
   +    };
   +
   +    template < typename T >
   +    struct is_same<T, T>
   +    {
   +      static const bool value = true;
   +    };
   +
   +    template < typename T1, typename T2 >
   +    auto
   +    add(T1 a1, T2 a2) -> decltype(a1 + a2)
   +    {
   +      return a1 + a2;
   +    }
   +
   +    int
   +    test(const int c, volatile int v)
   +    {
   +      static_assert(is_same<int, decltype(0)>::value == true, "");
   +      static_assert(is_same<int, decltype(c)>::value == false, "");
   +      static_assert(is_same<int, decltype(v)>::value == false, "");
   +      auto ac = c;
   +      auto av = v;
   +      auto sumi = ac + av + 'x';
   +      auto sumf = ac + av + 1.0;
   +      static_assert(is_same<int, decltype(ac)>::value == true, "");
   +      static_assert(is_same<int, decltype(av)>::value == true, "");
   +      static_assert(is_same<int, decltype(sumi)>::value == true, "");
   +      static_assert(is_same<int, decltype(sumf)>::value == false, "");
   +      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
   +      return (sumf > 0.0) ? sumi : add(c, v);
   +    }
   +
   +  }
   +
   +  namespace test_noexcept
   +  {
   +
   +    int f() { return 0; }
   +    int g() noexcept { return 0; }
   +
   +    static_assert(noexcept(f()) == false, "");
   +    static_assert(noexcept(g()) == true, "");
   +
   +  }
   +
   +  namespace test_constexpr
   +  {
   +
   +    template < typename CharT >
   +    unsigned long constexpr
   +    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
   +    {
   +      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
   +    }
   +
   +    template < typename CharT >
   +    unsigned long constexpr
   +    strlen_c(const CharT *const s) noexcept
   +    {
   +      return strlen_c_r(s, 0UL);
   +    }
   +
   +    static_assert(strlen_c("") == 0UL, "");
   +    static_assert(strlen_c("1") == 1UL, "");
   +    static_assert(strlen_c("example") == 7UL, "");
   +    static_assert(strlen_c("another\0example") == 7UL, "");
   +
   +  }
   +
   +  namespace test_rvalue_references
   +  {
   +
   +    template < int N >
   +    struct answer
   +    {
   +      static constexpr int value = N;
   +    };
   +
   +    answer<1> f(int&)       { return answer<1>(); }
   +    answer<2> f(const int&) { return answer<2>(); }
   +    answer<3> f(int&&)      { return answer<3>(); }
   +
   +    void
   +    test()
   +    {
   +      int i = 0;
   +      const int c = 0;
   +      static_assert(decltype(f(i))::value == 1, "");
   +      static_assert(decltype(f(c))::value == 2, "");
   +      static_assert(decltype(f(0))::value == 3, "");
   +    }
   +
   +  }
   +
   +  namespace test_uniform_initialization
   +  {
   +
   +    struct test
   +    {
   +      static const int zero {};
   +      static const int one {1};
   +    };
   +
   +    static_assert(test::zero == 0, "");
   +    static_assert(test::one == 1, "");
   +
   +  }
   +
   +  namespace test_lambdas
   +  {
   +
   +    void
   +    test1()
   +    {
   +      auto lambda1 = [](){};
   +      auto lambda2 = lambda1;
   +      lambda1();
   +      lambda2();
   +    }
   +
   +    int
   +    test2()
   +    {
   +      auto a = [](int i, int j){ return i + j; }(1, 2);
   +      auto b = []() -> int { return '0'; }();
   +      auto c = [=](){ return a + b; }();
   +      auto d = [&](){ return c; }();
   +      auto e = [a, &b](int x) mutable {
   +        const auto identity = [](int y){ return y; };
   +        for (auto i = 0; i < a; ++i)
   +          a += b--;
   +        return x + identity(a + b);
   +      }(0);
   +      return a + b + c + d + e;
   +    }
   +
   +    int
   +    test3()
   +    {
   +      const auto nullary = [](){ return 0; };
   +      const auto unary = [](int x){ return x; };
   +      using nullary_t = decltype(nullary);
   +      using unary_t = decltype(unary);
   +      const auto higher1st = [](nullary_t f){ return f(); };
   +      const auto higher2nd = [unary](nullary_t f1){
   +        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
   +      };
   +      return higher1st(nullary) + higher2nd(nullary)(unary);
   +    }
   +
   +  }
   +
   +  namespace test_variadic_templates
   +  {
   +
   +    template <int...>
   +    struct sum;
   +
   +    template <int N0, int... N1toN>
   +    struct sum<N0, N1toN...>
   +    {
   +      static constexpr auto value = N0 + sum<N1toN...>::value;
   +    };
   +
   +    template <>
   +    struct sum<>
   +    {
   +      static constexpr auto value = 0;
   +    };
   +
   +    static_assert(sum<>::value == 0, "");
   +    static_assert(sum<1>::value == 1, "");
   +    static_assert(sum<23>::value == 23, "");
   +    static_assert(sum<1, 2>::value == 3, "");
   +    static_assert(sum<5, 5, 11>::value == 21, "");
   +    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
   +
   +  }
   +
   +  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
   +  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
   +  // because of this.
   +  namespace test_template_alias_sfinae
   +  {
   +
   +    struct foo {};
   +
   +    template<typename T>
   +    using member = typename T::member_type;
   +
   +    template<typename T>
   +    void func(...) {}
   +
   +    template<typename T>
   +    void func(member<T>*) {}
   +
   +    void test();
   +
   +    void test() { func<foo>(0); }
   +
   +  }
   +
   +}  // namespace cxx11
   +
   +#endif  // __cplusplus >= 201103L
   +
   +
    
    _ACEOF
    if ac_fn_cxx_try_compile "$LINENO"; then :
   -  ac_cv_yezzey_cxx11=yes
   +  eval $cachevar=yes
    else
   -  ac_cv_yezzey_cxx11=no
   +  eval $cachevar=no
    fi
    rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   -  CXX="$ac_save_CXX"
   +           CXX="$ac_save_CXX"
   +fi
   +eval ac_res=\$$cachevar
   +	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
   +$as_echo "$ac_res" >&6; }
   +        if eval test x\$$cachevar = xyes; then
   +          CXX="$CXX $switch"
   +          if test -n "$CXXCPP" ; then
   +            CXXCPP="$CXXCPP $switch"
   +          fi
   +          ac_success=yes
   +          break
   +        fi
   +      done
   +      if test x$ac_success = xyes; then
   +        break
   +      fi
   +    done
   +  fi
      ac_ext=c
    ac_cpp='$CPP $CPPFLAGS'
    ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
    ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
    ac_compiler_gnu=$ac_cv_c_compiler_gnu
    
   -fi
   -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_yezzey_cxx11" >&5
   -$as_echo "$ac_cv_yezzey_cxx11" >&6; }
   -  if test "$ac_cv_yezzey_cxx11" != yes; then
   -    as_fn_error $? "*** A compiler with support for C++11 language features is required for Yezzey." "$LINENO" 5
   +  if test x$ax_cxx_compile_cxx11_required = xtrue; then
   +    if test x$ac_success = xno; then
   +      as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
   +    fi
      fi
   +  if test x$ac_success = xno; then
   +    HAVE_CXX11=0
   +    { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
   +$as_echo "$as_me: No compiler with C++11 support was found" >&6;}
   +  else
   +    HAVE_CXX11=1
    
   -fi # fi
   +$as_echo "#define HAVE_CXX11 1" >>confdefs.h
    
   +  fi
   +
   +
   +
   +fi # fi
    
    #
    # Realtime library
   
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "leborchuk (via GitHub)" <gi...@apache.org>.
leborchuk commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3529586281


##########
configure.ac:
##########


Review Comment:
   Yproxy is a runtime dependency that is not needed for compilation and installation, but is needed to execute queries in the database. We can check something, but it will seem quite strange - why should we install some extra packages to compile the code? It's like with database configurations - they are necessary, but creating a proper configuration is the responsibility of the DBA.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4485492278

   We also need to add the `yezzey` license info to the `licenses` dir and `LICENSE`, like other submodules. FYI.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3527608430


##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,351 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"

Review Comment:
   ```suggestion
     CLOUDBERRY_VERSION: "REL_2_STABLE"
   ```



##########
configure.ac:
##########


Review Comment:
   Is the YProxy also a required dependency for building and running Yezzey? If so, we also need to see how to handle it.



##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,351 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]

Review Comment:
   ```suggestion
       branches: [ main, REL_2_STABLE ]
   ```



##########
devops/build/automation/cloudberry/scripts/configure-cloudberry.sh:
##########


Review Comment:
   Since Yezzey is now an officially supported extension, perhaps we should add a dedicated configure option here rather than passing it through `CONFIGURE_EXTRA_OPTS`.



##########
configure:
##########
@@ -19025,7 +19108,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))

Review Comment:
   we can ignore these changes.



##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,351 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"
+
+jobs:
+
+  ## Stage 1: Build artifacts and run tests for cloudberry
+
+  test-cloudberry:
+    name: Build and Test Yezzey Cloudberry (${{ matrix.os }})
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - os: ubuntu22.04
+            image: apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest
+          - os: rocky8
+            image: apache/incubator-cloudberry:cbdb-build-rocky8-latest
+          - os: rocky9
+            image: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+    container:
+      image: ${{ matrix.image }}
+      options: >-
+        --user root
+        -h cdw
+        -v /usr/share:/host_usr_share
+        -v /usr/local:/host_usr_local
+        -v /opt:/host_opt
+
+    services:
+      # Define the MinIO service container
+      minio:
+        image: lazybit/minio:latest  # Use a specific MinIO image tag
+        ports:
+          - 9000:9000  # Expose MinIO's API port (9000)
+          - 9001:9001  # Expose MinIO's console port (optional, for web UI)
+        env:
+          # MinIO root credentials (required for admin access)
+          MINIO_ROOT_USER: some_key
+          MINIO_ROOT_PASSWORD: some_key
+        # Healthcheck to ensure MinIO is ready before the job proceeds
+        options: >-
+          --name minio
+          --health-cmd "curl --fail http://localhost:9000/minio/health/live"
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        volumes:
+          - ${{ github.workspace }}/data:/data
+
+    steps:
+      - name: Checkout Cloudberry source
+        uses: actions/checkout@v4
+        with:
+          path: cloudberry

Review Comment:
   ```suggestion
             repository: apache/cloudberry
             ref: ${{ env.CLOUDBERRY_VERSION }}
             path: cloudberry
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#issuecomment-4921089789

   All tests passed, but there is one warning, I'm not sure if it looks good:
   
   ```
   ==================================
    Cluster validation failed:
       6 |       1 | m    | m              | n    | d      | 7006 | cdw      | cdw     | /__w/cloudberry/cloudberry/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1 |           0
   ==================================
   ```
   
   https://github.com/apache/cloudberry/actions/runs/28928425306/job/85821401938?pr=1752#step:15:127


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org


Re: [PR] Add Yezzey submodule to gpcontrib [cloudberry]

Posted by "tuhaihe (via GitHub)" <gi...@apache.org>.
tuhaihe commented on code in PR #1752:
URL: https://github.com/apache/cloudberry/pull/1752#discussion_r3297635161


##########
gpcontrib/Makefile:
##########
@@ -40,6 +40,9 @@ endif
 ifeq "$(with_gp_stats_collector)" "yes"
 	recurse_targets += gp_stats_collector
 endif
+ifeq "$(with_yezzey)" "yes"
+        recurse_targets += yezzey

Review Comment:
   ```suggestion
   	recurse_targets += yezzey
   ```



##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,334 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"
+
+jobs:
+
+  ## Stage 1: Build artifacts and run tests for cloudberry
+
+  test-cloudberry:
+    name: Build and Test Yezzey Cloudberry
+    runs-on: ubuntu-latest
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest

Review Comment:
   Could we add the Rocky 8/9 docker image to the test matrix?



##########
configure.ac:
##########
@@ -1395,6 +1395,13 @@ if test "$with_zstd" = yes; then
   PKG_CHECK_MODULES([ZSTD], [libzstd >= 1.4.0])
 fi
 
+#
+# yezzey

Review Comment:
   Hi, does yezzey need some extra dependencies for building? If so, we also need to add the pre-check for them when running `configure --with-yezzey`.



##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,334 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"
+
+jobs:
+
+  ## Stage 1: Build artifacts and run tests for cloudberry
+
+  test-cloudberry:
+    name: Build and Test Yezzey Cloudberry
+    runs-on: ubuntu-latest
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest
+      options: >-
+        --user root
+        -h cdw
+        -v /usr/share:/host_usr_share
+        -v /usr/local:/host_usr_local
+        -v /opt:/host_opt
+
+    services:
+      # Define the MinIO service container
+      minio:
+        image: lazybit/minio  # Use a specific MinIO image tag
+        ports:
+          - 9000:9000  # Expose MinIO's API port (9000)
+          - 9001:9001  # Expose MinIO's console port (optional, for web UI)
+        env:
+          # MinIO root credentials (required for admin access)
+          MINIO_ROOT_USER: some_key
+          MINIO_ROOT_PASSWORD: some_key
+        # Healthcheck to ensure MinIO is ready before the job proceeds
+        options: >-
+          --name minio
+          --health-cmd "curl --fail http://localhost:9000/minio/health/live"
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        volumes:
+          - ${{ github.workspace }}/data:/data
+
+    steps:
+      - name: Checkout Cloudberry source
+        uses: actions/checkout@v4
+        with:
+          path: cloudberry
+          submodules: true
+
+      - name: Checkout Yproxy source
+        uses: actions/checkout@v4
+        with:
+          repository: open-gpdb/yproxy
+          ref: master
+          path: yproxy
+
+      - name: Cloudberry Environment Initialization
+        shell: bash
+        env:
+          LOGS_DIR: build-logs
+          SRC_DIR: ${{ github.workspace }}/cloudberry
+        run: |
+          set -eo pipefail
+          if ! su - gpadmin -c "/tmp/init_system.sh"; then
+            echo "::error::Container initialization failed"
+            exit 1
+          fi
+
+          mkdir -p "${SRC_DIR}/build-logs"
+          chown -R gpadmin:gpadmin "${SRC_DIR}/build-logs"
+          mkdir -p "${LOGS_DIR}/details"
+          chown -R gpadmin:gpadmin .
+          chmod -R 755 .
+          chmod 777 "${LOGS_DIR}"
+
+          df -kh /
+          rm -rf /__t/*
+          df -kh /
+
+          df -h | tee -a "${LOGS_DIR}/details/disk-usage.log"
+          free -h | tee -a "${LOGS_DIR}/details/memory-usage.log"
+
+          {
+            echo "=== Environment Information ==="
+            uname -a
+            df -h
+            free -h
+            env
+          } | tee -a "${LOGS_DIR}/details/environment.log"
+
+          echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a "$GITHUB_ENV"
+
+      - name: Install MinIO Client (mc)
+        run: |
+          set -ex pipefail

Review Comment:
   ```suggestion
             set -exo pipefail
   ```



##########
.github/workflows/yezzey-ci.yaml:
##########
@@ -0,0 +1,334 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You 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.
+#
+# --------------------------------------------------------------------
+# Yezzey CI Workflow
+# --------------------------------------------------------------------
+name: Yezzey CI Pipeline
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    types: [opened, synchronize, reopened, edited]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+
+env:
+  CLOUDBERRY_HOME: "/usr/local/cloudberry-db"
+  CLOUDBERRY_VERSION: "main"
+
+jobs:
+
+  ## Stage 1: Build artifacts and run tests for cloudberry
+
+  test-cloudberry:
+    name: Build and Test Yezzey Cloudberry
+    runs-on: ubuntu-latest
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest
+      options: >-
+        --user root
+        -h cdw
+        -v /usr/share:/host_usr_share
+        -v /usr/local:/host_usr_local
+        -v /opt:/host_opt
+
+    services:
+      # Define the MinIO service container
+      minio:
+        image: lazybit/minio  # Use a specific MinIO image tag

Review Comment:
   Do we need to specify a tag for this image?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org