Add bounded-load consistent hashing load balancer (c_murmurhash_bl) #3306
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Test on Linux | |
| on: | |
| push: | |
| branches: [ master ] | |
| paths-ignore: | |
| - '**.md' | |
| pull_request: | |
| branches: [ master ] | |
| paths-ignore: | |
| - '**.md' | |
| env: | |
| proc_num: $(nproc) | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| # https://github.com/actions/runner-images | |
| jobs: | |
| compile-with-make: | |
| name: compile-with-make (${{ matrix.name }}) | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 2 | |
| matrix: | |
| include: | |
| - name: gcc-default | |
| make-options: >- | |
| --headers=/usr/include --libs=/usr/lib /usr/lib64 | |
| --cc=gcc --cxx=g++ --werror | |
| - name: gcc-all-options | |
| make-options: >- | |
| --headers=/usr/include --libs=/usr/lib /usr/lib64 | |
| --cc=gcc --cxx=g++ --werror --with-thrift --with-glog | |
| --with-rdma --with-debug-bthread-sche-safety --with-debug-lock | |
| --with-bthread-tracer --with-asan | |
| - name: clang-default | |
| make-options: >- | |
| --headers=/usr/include --libs=/usr/lib /usr/lib64 | |
| --cc=clang --cxx=clang++ --werror | |
| - name: clang-all-options | |
| make-options: >- | |
| --headers=/usr/include --libs=/usr/lib /usr/lib64 | |
| --cc=clang --cxx=clang++ --werror --with-thrift --with-glog | |
| --with-rdma --with-debug-bthread-sche-safety --with-debug-lock | |
| --with-bthread-tracer --with-asan | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/install-all-dependencies | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: ccache | |
| cache-key: make-${{ matrix.name }} | |
| - name: Build | |
| uses: ./.github/actions/compile-with-make | |
| with: | |
| options: ${{ matrix.make-options }} | |
| - name: Show ccache statistics | |
| if: always() | |
| run: ccache --show-stats | |
| compile-with-cmake: | |
| name: compile-with-cmake (${{ matrix.name }}) | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 2 | |
| matrix: | |
| include: | |
| - name: gcc-default | |
| cc: gcc | |
| cxx: g++ | |
| cmake-options: '' | |
| - name: gcc-all-options | |
| cc: gcc | |
| cxx: g++ | |
| cmake-options: >- | |
| -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON | |
| -DWITH_RDMA=ON -DWITH_UBRING=ON | |
| -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON | |
| -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON | |
| - name: clang-default | |
| cc: clang | |
| cxx: clang++ | |
| cmake-options: '' | |
| - name: clang-all-options | |
| cc: clang | |
| cxx: clang++ | |
| cmake-options: >- | |
| -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON | |
| -DWITH_RDMA=ON -DWITH_UBRING=ON | |
| -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON | |
| -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/install-all-dependencies | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: ccache | |
| cache-key: cmake-${{ matrix.name }} | |
| - name: Build | |
| env: | |
| CC: ${{ matrix.cc }} | |
| CXX: ${{ matrix.cxx }} | |
| CMAKE_OPTIONS: ${{ matrix.cmake-options }} | |
| run: | | |
| read -r -a cmake_options <<< "${CMAKE_OPTIONS}" | |
| cmake -S . -B build -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ | |
| "${cmake_options[@]}" | |
| cmake --build build -j ${{env.proc_num}} | |
| - name: Show ccache statistics | |
| if: always() | |
| run: ccache --show-stats | |
| compile-with-make-protobuf: | |
| name: compile-with-make-protobuf (${{ matrix.compiler }}-${{ matrix.name }}) | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 2 | |
| matrix: | |
| include: | |
| - compiler: gcc | |
| name: protobuf-3.5.1 | |
| protobuf-version: 3.5.1 | |
| protobuf-cpp-version: 3.5.1 | |
| protobuf-install-dir: /protobuf-3.5.1 | |
| cc: gcc | |
| cxx: g++ | |
| - compiler: gcc | |
| name: protobuf-3.12.4 | |
| protobuf-version: 3.12.4 | |
| protobuf-cpp-version: 3.12.4 | |
| protobuf-install-dir: /protobuf-3.12.4 | |
| cc: gcc | |
| cxx: g++ | |
| - compiler: gcc | |
| name: protobuf-21.12 | |
| protobuf-version: '21.12' | |
| protobuf-cpp-version: 3.21.12 | |
| protobuf-install-dir: /protobuf-3.21.12 | |
| cc: gcc | |
| cxx: g++ | |
| - compiler: clang | |
| name: protobuf-3.5.1 | |
| protobuf-version: 3.5.1 | |
| protobuf-cpp-version: 3.5.1 | |
| protobuf-install-dir: /protobuf-3.5.1 | |
| cc: clang | |
| cxx: clang++ | |
| - compiler: clang | |
| name: protobuf-3.12.4 | |
| protobuf-version: 3.12.4 | |
| protobuf-cpp-version: 3.12.4 | |
| protobuf-install-dir: /protobuf-3.12.4 | |
| cc: clang | |
| cxx: clang++ | |
| - compiler: clang | |
| name: protobuf-21.12 | |
| protobuf-version: '21.12' | |
| protobuf-cpp-version: 3.21.12 | |
| protobuf-install-dir: /protobuf-3.21.12 | |
| cc: clang | |
| cxx: clang++ | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/install-essential-dependencies | |
| with: | |
| extra-packages: ccache | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: ccache | |
| cache-key: ${{ matrix.compiler }}-make-${{ matrix.name }} | |
| - name: Build | |
| uses: ./.github/actions/compile-with-make-protobuf | |
| with: | |
| protobuf-version: ${{ matrix.protobuf-version }} | |
| protobuf-cpp-version: ${{ matrix.protobuf-cpp-version }} | |
| protobuf-install-dir: ${{ matrix.protobuf-install-dir }} | |
| config-brpc-options: >- | |
| --cc=${{ matrix.cc }} --cxx=${{ matrix.cxx }} --werror | |
| - name: Show ccache statistics | |
| if: always() | |
| run: ccache --show-stats | |
| gcc-unittest-with-bazel: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: bazel | |
| # Install redis-server/mysql-server so the integration tests that fork a | |
| # real server (e.g. brpc_redis_unittest) actually run under bazel instead | |
| # of skipping. Same shared action the make-based unittest jobs use. | |
| - uses: ./.github/actions/install-essential-dependencies | |
| - run: bazel test --config=rdma --config=ubring //test/... | |
| gcc-compile-with-bazel-all-options: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: bazel | |
| - run: sudo apt-get update && sudo apt-get install -y libibverbs-dev | |
| - name: root | |
| run: | | |
| bazel build --define with_mesalink=false \ | |
| --define with_glog=true \ | |
| --define with_thrift=true \ | |
| --define BRPC_WITH_RDMA=true \ | |
| --define BRPC_WITH_UBRING=true \ | |
| --define BRPC_WITH_BORINGSSL=true \ | |
| --define with_debug_bthread_sche_safety=true \ | |
| --define with_debug_lock=true \ | |
| --define with_asan=true \ | |
| --define with_bthread_tracer=true \ | |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ | |
| --define with_babylon_counter=true \ | |
| -- //:brpc //example/... | |
| - name: external | |
| run: | | |
| cd example/build_with_bazel_module | |
| bazel build --define with_mesalink=false \ | |
| --define with_glog=true \ | |
| --define with_thrift=true \ | |
| --define BRPC_WITH_RDMA=true \ | |
| --define BRPC_WITH_UBRING=true \ | |
| --define BRPC_WITH_BORINGSSL=true \ | |
| --define with_debug_bthread_sche_safety=true \ | |
| --define with_debug_lock=true \ | |
| --define with_asan=true \ | |
| --define with_bthread_tracer=true \ | |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ | |
| --define with_babylon_counter=true \ | |
| -- //... | |
| clang-unittest-with-bazel: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: bazel | |
| # Install redis-server/mysql-server so the forked-server integration tests | |
| # actually run under bazel (see gcc-unittest-with-bazel). | |
| - uses: ./.github/actions/install-essential-dependencies | |
| - run: | | |
| bazel test --test_output=streamed \ | |
| --action_env=CC=clang \ | |
| --config=rdma \ | |
| --config=ubring \ | |
| //test/... | |
| clang-compile-with-bazel-all-options: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: bazel | |
| - run: sudo apt-get update && sudo apt-get install -y libibverbs-dev | |
| - name: root | |
| run: | | |
| bazel build --action_env=CC=clang \ | |
| --define with_mesalink=false \ | |
| --define with_glog=true \ | |
| --define with_thrift=true \ | |
| --define BRPC_WITH_RDMA=true \ | |
| --define BRPC_WITH_UBRING=true \ | |
| --define BRPC_WITH_BORINGSSL=true \ | |
| --define with_debug_bthread_sche_safety=true \ | |
| --define with_debug_lock=true \ | |
| --define with_asan=true \ | |
| --define with_bthread_tracer=true \ | |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ | |
| --define with_babylon_counter=true \ | |
| -- //:brpc //example/... | |
| - name: external | |
| run: | | |
| cd example/build_with_bazel_module | |
| bazel build --action_env=CC=clang \ | |
| --define with_mesalink=false \ | |
| --define with_glog=true \ | |
| --define with_thrift=true \ | |
| --define BRPC_WITH_RDMA=true \ | |
| --define BRPC_WITH_UBRING=true \ | |
| --define BRPC_WITH_BORINGSSL=true \ | |
| --define with_debug_bthread_sche_safety=true \ | |
| --define with_debug_lock=true \ | |
| --define with_asan=true \ | |
| --define with_bthread_tracer=true \ | |
| --define BRPC_WITH_NO_PTHREAD_MUTEX_HOOK=true \ | |
| --define with_babylon_counter=true \ | |
| -- //... | |
| clang-unittest: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/install-essential-dependencies | |
| with: | |
| extra-packages: ccache clang-12 lldb-12 lld-12 libgtest-dev cmake gdb libstdc++6-11-dbg | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: ccache | |
| - uses: ./.github/actions/init-ut-make-config | |
| with: | |
| options: --with-bthread-tracer --with-rdma | |
| - name: compile tests | |
| run: | | |
| cat config.mk | |
| cd test | |
| make -j ${{env.proc_num}} | |
| - name: run tests | |
| run: | | |
| cd test | |
| sh ./run_tests.sh | |
| - name: Show ccache statistics | |
| if: always() | |
| run: ccache --show-stats | |
| clang-unittest-asan: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/install-essential-dependencies | |
| with: | |
| extra-packages: ccache clang-12 lldb-12 lld-12 libgtest-dev cmake gdb libstdc++6-11-dbg | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: ccache | |
| - uses: ./.github/actions/init-ut-make-config | |
| with: | |
| options: --with-bthread-tracer --with-asan | |
| - name: compile tests | |
| run: | | |
| cat config.mk | |
| cd test | |
| make NEED_GPERFTOOLS=0 -j ${{env.proc_num}} | |
| - name: run tests | |
| run: | | |
| cd test | |
| # The redis integration tests (sanity/keys_with_spaces/incr_and_decr/by_components/auth) | |
| # fork a real redis-server and connect after a fixed 50ms wait; under ASan redis starts | |
| # too slowly, so they flake here (connection refused). Skip just those under ASan; the | |
| # redis codec/server tests still run, and the full suite runs in clang-unittest. | |
| GTEST_FILTER='-RedisTest.sanity:RedisTest.keys_with_spaces:RedisTest.incr_and_decr:RedisTest.by_components:RedisTest.auth' sh ./run_tests.sh | |
| - name: Show ccache statistics | |
| if: always() | |
| run: ccache --show-stats | |
| clang-unittest-bazel-with-babylon-and-new-pb: | |
| runs-on: ubuntu-22.04 | |
| env: | |
| TEST_PROTOBUF_VERSION: "35.1" | |
| # protobuf >= 34.x uses new ProtoInfo fields (option_deps, extension_declarations) | |
| # introduced in Bazel 8.x. The repo's .bazelversion (7.2.1) is too old. bazelisk | |
| # honors USE_BAZEL_VERSION. | |
| USE_BAZEL_VERSION: "8.3.1" | |
| steps: | |
| - uses: actions/checkout@v7.0.1 | |
| - uses: ./.github/actions/setup-build-cache | |
| with: | |
| kind: bazel | |
| # Install redis-server/mysql-server so the forked-server integration tests | |
| # actually run under bazel (see gcc-unittest-with-bazel). | |
| - uses: ./.github/actions/install-essential-dependencies | |
| - name: Override protobuf version for testing | |
| run: | | |
| sed -i -E "s/(bazel_dep\(name = ['\"]protobuf['\"], version = ['\"])[^'\"]+/\1${TEST_PROTOBUF_VERSION}/" MODULE.bazel | |
| echo "After override:" | |
| grep -E "bazel_dep\(name = ['\"]protobuf['\"]" MODULE.bazel | |
| grep -qE "bazel_dep\(name = ['\"]protobuf['\"], version = ['\"]${TEST_PROTOBUF_VERSION}['\"]" MODULE.bazel \ | |
| || { echo "ERROR: failed to override protobuf version in MODULE.bazel to ${TEST_PROTOBUF_VERSION}"; exit 1; } | |
| - run: | | |
| bazel test --action_env=CC=clang --config=rdma --config=ubring \ | |
| --define with_bthread_tracer=true \ | |
| --define with_babylon_counter=true \ | |
| //test/... |