Skip to content

WIP: Add new custom event loop for Linux I/O layer #875

WIP: Add new custom event loop for Linux I/O layer

WIP: Add new custom event loop for Linux I/O layer #875

Workflow file for this run

name: CI
on:
push:
branches:
- '**'
pull_request:
branches:
- '**'
jobs:
build-linux:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- name: Add PostgreSQL apt repository
run: |
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo wget --quiet --output-document /etc/apt/trusted.gpg.d/apt.postgresql.org.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
- name: Update system
run: sudo apt update
- name: Install cJSON
run: sudo apt install -y libcjson1 libcjson-dev
- name: Install systemd
run: sudo apt install -y libsystemd-dev
- name: Install rst2man
run: sudo apt install -y python3-docutils
- name: Install clang
run: sudo apt install -y clang
- name: Install PostgreSQL
run: sudo apt install -y postgresql postgresql-contrib
- name: Install liburing
run: sudo apt install -y liburing-dev
- name: Install crudini
run: sudo apt install -y crudini
- name: Start postgres & setup test table
run: |
version=$(pg_config --version | grep -Eo "[0-9]{1,2}" | head -1)
sudo cp pg_hba.conf /etc/postgresql/${version}/main
sudo -u postgres /usr/lib/postgresql/${version}/bin/pg_ctl start -D /etc/postgresql/${version}/main/
netstat -tuln | grep '127.0.0.1:5432' || (echo "Nothing is listening on 127.0.0.1:5432"; exit 1)
netstat -tuln | grep '::1:5432' || (echo "Nothing is listening on ::1:5432"; exit 1)
PGPASSWORD="postgres" pgbench -i -s 1 -h localhost -p 5432 -U postgres -d postgres
working-directory: /home/runner/work/pgagroal/pgagroal/.github/config/
- name: GCC/mkdir
run: mkdir build
working-directory: /home/runner/work/pgagroal/pgagroal/
- name: GCC/cmake
run: sudo apt install cmake && export CC=/usr/bin/gcc && cmake -DCMAKE_BUILD_TYPE=Release ..
working-directory: /home/runner/work/pgagroal/pgagroal/build/
- name: GCC/make
run: make
working-directory: /home/runner/work/pgagroal/pgagroal/build/
- name: GCC/Run pgagroal as daemon with 'io_uring' backend
run: |
sudo mkdir -p /etc/pgagroal
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_type file
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_path /dev/null
crudini --set ../../doc/etc/pgagroal.conf pgagroal ev_backend io_uring
echo "host all all all trust" > pgagroal_hba.conf
sudo cp ../../doc/etc/*.conf /etc/pgagroal
sudo sysctl kernel.io_uring_disabled=0
./pgagroal -d
sleep 5
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: GCC/Confirm pgagroal is running for 'io_uring' backend & shutdown
run: |
netstat -tuln | grep '127.0.0.1:2345' || (echo "Nothing is listening on 127.0.0.1:2345"; exit 1)
netstat -tuln | grep '::1:2345' || (echo "Nothing is listening ::1:2345"; exit 1)
./pgagroal-cli ping
PGPASSWORD="postgres" psql -h ::1 -p 2345 -U postgres -d postgres -c "SELECT * FROM pgbench_accounts LIMIT 50;"
./pgagroal-cli shutdown
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: GCC/Run pgagroal as daemon with 'epoll' backend
run: |
sudo mkdir -p /etc/pgagroal
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_type file
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_path /dev/null
crudini --set ../../doc/etc/pgagroal.conf pgagroal ev_backend epoll
echo "host all all all trust" > pgagroal_hba.conf
sudo cp ../../doc/etc/*.conf /etc/pgagroal
./pgagroal -d
sleep 5
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: GCC/Confirm pgagroal is running for 'epoll' backend & shutdown
run: |
netstat -tuln | grep '127.0.0.1:2345' || (echo "Nothing is listening on 127.0.0.1:2345"; exit 1)
netstat -tuln | grep '::1:2345' || (echo "Nothing is listening ::1:2345"; exit 1)
./pgagroal-cli ping
PGPASSWORD="postgres" psql -h ::1 -p 2345 -U postgres -d postgres -c "SELECT * FROM pgbench_accounts LIMIT 50;"
./pgagroal-cli shutdown
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: rm -Rf
run: rm -Rf build/
working-directory: /home/runner/work/pgagroal/pgagroal/
- name: CLANG/mkdir
run: mkdir build
working-directory: /home/runner/work/pgagroal/pgagroal/
- name: CLANG/cmake
run: export CC=/usr/bin/clang && cmake -DCMAKE_BUILD_TYPE=Debug ..
working-directory: /home/runner/work/pgagroal/pgagroal/build/
- name: CLANG/make
run: make
working-directory: /home/runner/work/pgagroal/pgagroal/build/
- name: CLANG/Run pgagroal as daemon with 'io_uring' backend
run: |
sudo mkdir -p /etc/pgagroal
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_type file
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_path /dev/null
crudini --set ../../doc/etc/pgagroal.conf pgagroal ev_backend io_uring
echo "host all all all trust" > pgagroal_hba.conf
sudo cp ../../doc/etc/*.conf /etc/pgagroal
sudo sysctl kernel.io_uring_disabled=0
./pgagroal -d
sleep 5
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: CLANG/Confirm pgagroal is running for 'io_uring' backend & shutdown
run: |
netstat -tuln | grep '127.0.0.1:2345' || (echo "Nothing is listening on 127.0.0.1:2345"; exit 1)
netstat -tuln | grep '::1:2345' || (echo "Nothing is listening ::1:2345"; exit 1)
./pgagroal-cli ping
PGPASSWORD="postgres" psql -h ::1 -p 2345 -U postgres -d postgres -c "SELECT * FROM pgbench_accounts LIMIT 50;"
./pgagroal-cli shutdown
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: CLANG/Run pgagroal as daemon with 'epoll' backend
run: |
sudo mkdir -p /etc/pgagroal
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_type file
crudini --set ../../doc/etc/pgagroal.conf pgagroal log_path /dev/null
crudini --set ../../doc/etc/pgagroal.conf pgagroal ev_backend epoll
echo "host all all all trust" > pgagroal_hba.conf
sudo cp ../../doc/etc/*.conf /etc/pgagroal
./pgagroal -d
sleep 5
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
- name: CLANG/Confirm pgagroal is running for 'epoll' backend & shutdown
run: |
netstat -tuln | grep '127.0.0.1:2345' || (echo "Nothing is listening on 127.0.0.1:2345"; exit 1)
netstat -tuln | grep '::1:2345' || (echo "Nothing is listening ::1:2345"; exit 1)
./pgagroal-cli ping
PGPASSWORD="postgres" psql -h ::1 -p 2345 -U postgres -d postgres -c "SELECT * FROM pgbench_accounts LIMIT 50;"
./pgagroal-cli shutdown
working-directory: /home/runner/work/pgagroal/pgagroal/build/src/
# NOTE(hcarv): No need for waiting this:
# - name: Stop postgres
# run: |
# version=$(pg_config --version | grep -Eo "[0-9]{1,2}" | head -1)
# sudo -u postgres /usr/lib/postgresql/${version}/bin/pg_ctl stop -D /etc/postgresql/${version}/main/
# build-macos:
#
# runs-on: macos-latest
#
# steps:
# - uses: actions/checkout@v3
# - name: Install Homebrew
# run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
# - name: Update system
# run: brew update
# - name: Install openssl
# run: brew install openssl
# - name: Install libev
# run: brew install libev
# - name: Install cJSON
# run: brew install cjson
# - name: Install rst2man
# run: brew install docutils
# - name: Install clang
# run: brew install llvm
# - name: Install PostgreSQL
# run: |
# latest_pg=$(brew search postgresql | grep postgresql@ | tail -n 1)
# brew install ${latest_pg} || true # `|| true` prevents install errors from breaking the run
# - name: Start postgres
# run: |
# installed_pg=$(brew search postgresql | grep postgresql@ | tail -n 1)
# brew services start ${installed_pg}
# - name: GCC/mkdir
# run: mkdir build
# working-directory: /Users/runner/work/pgagroal/pgagroal/
# - name: GCC/cmake
# run: export CC=/usr/bin/gcc && export OPENSSL_ROOT_DIR=`brew --prefix openssl` && cmake -DCMAKE_BUILD_TYPE=Debug ..
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/
# - name: GCC/make
# run: make
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/
# - name: GCC/Run pgagroal & confirm pgagroal is running
# run: |
# sudo mkdir -p /etc/pgagroal
# sudo cp ../../doc/etc/*.conf /etc/pgagroal
# ./pgagroal >> /dev/null 2>&1 &
# pid=$!
# sleep 5
# ./pgagroal-cli ping
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/src/
# - name: GCC/Stop pgagroal & postgres
# run: |
# ./pgagroal-cli shutdown
# installed_pg=$(brew search postgresql | grep postgresql@ | tail -n 1)
# brew services stop ${installed_pg}
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/src/
# - name: rm -Rf
# run: rm -Rf build/
# working-directory: /Users/runner/work/pgagroal/pgagroal/
# - name: Start postgres
# run: |
# installed_pg=$(brew search postgresql | grep postgresql@ | tail -n 1)
# brew services start ${installed_pg}
# - name: CLANG/mkdir
# run: mkdir build
# working-directory: /Users/runner/work/pgagroal/pgagroal/
# - name: CLANG/cmake
# run: export CC=/usr/bin/clang && export OPENSSL_ROOT_DIR=`brew --prefix openssl` && cmake -DCMAKE_BUILD_TYPE=Debug ..
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/
# - name: CLANG/make
# run: make
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/
# - name: CLANG/Run pgagroal & confirm pgagroal is running
# run: |
# sudo mkdir -p /etc/pgagroal
# sudo cp ../../doc/etc/*.conf /etc/pgagroal
# ./pgagroal >> /dev/null 2>&1 &
# pid=$!
# sleep 5
# ./pgagroal-cli ping
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/src/
# - name: CLANG/Stop pgagroal & postgres
# run: |
# ./pgagroal-cli shutdown
# installed_pg=$(brew search postgresql | grep postgresql@ | tail -n 1)
# brew services stop ${installed_pg}
# working-directory: /Users/runner/work/pgagroal/pgagroal/build/src/