Skip to content

Replace custom timer with bthread timer and improve lifecycle safety #3324

Replace custom timer with bthread timer and improve lifecycle safety

Replace custom timer with bthread timer and improve lifecycle safety #3324

Workflow file for this run

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/...