Fix segfault creating CAgg on hypertable by hash #19044
Workflow file for this run
This file contains 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: Regression Linux i386 | |
"on": | |
schedule: | |
# run daily 0:00 on main branch | |
- cron: '0 0 * * *' | |
push: | |
branches: | |
- main | |
- prerelease_test | |
paths-ignore: | |
- '**.md' | |
- 'LICENSE*' | |
- NOTICE | |
pull_request: | |
paths-ignore: | |
- '**.md' | |
- 'LICENSE*' | |
- NOTICE | |
jobs: | |
config: | |
runs-on: ubuntu-latest | |
outputs: | |
pg_latest: ${{ steps.setter.outputs.PG_LATEST }} | |
pg16_latest: ${{ steps.setter.outputs.PG16_LATEST }} | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v4 | |
- name: Read configuration | |
id: setter | |
run: python .github/gh_config_reader.py | |
regress_linux_32bit: | |
name: PG${{ matrix.pg }} ${{ matrix.build_type }} linux-i386 | |
runs-on: ubuntu-latest | |
needs: config | |
container: | |
image: i386/debian:bookworm-slim | |
options: --privileged --ulimit core=-1 | |
env: | |
PG_SRC_DIR: pgbuild | |
PG_INSTALL_DIR: postgresql | |
MAKE_JOBS: 6 | |
CLANG: clang-14 | |
CC: clang-14 | |
CXX: clang++-14 | |
DEBIAN_FRONTEND: noninteractive | |
IGNORES: "append-* transparent_decompression-* transparent_decompress_chunk-* pg_dump telemetry" | |
SKIPS: chunk_adaptive histogram_test-* | |
EXTENSIONS: "postgres_fdw test_decoding" | |
strategy: | |
fail-fast: false | |
matrix: | |
pg: ${{ fromJson(needs.config.outputs.pg_latest) }} | |
build_type: [ Debug ] | |
include: | |
- pg: ${{ fromJson(needs.config.outputs.pg16_latest) }} | |
build_type: Debug | |
steps: | |
# /__e/node16/bin/node (used by actions/checkout@v4) needs 64-bit libraries | |
- name: Install 64-bit libraries for GitHub actions | |
run: | | |
apt-get update | |
apt-get install -y lib64atomic1 lib64gcc-s1 lib64stdc++6 libc6-amd64 | |
- name: Install build dependencies | |
run: | | |
PG_MAJOR=$(echo "${{ matrix.pg }}" | sed -e 's![.].*!!') | |
echo '/tmp/core.%h.%e.%t' > /proc/sys/kernel/core_pattern | |
apt-get install -y gcc make cmake libssl-dev libkrb5-dev libipc-run-perl \ | |
libtest-most-perl sudo gdb git wget gawk lbzip2 flex bison lcov base-files \ | |
locales clang-14 llvm-14 llvm-14-dev llvm-14-tools postgresql-client pkgconf \ | |
icu-devtools | |
- name: Checkout TimescaleDB | |
uses: actions/checkout@v4 | |
# We are going to rebuild Postgres daily, so that it doesn't suddenly break | |
# ages after the original problem. | |
- name: Get date for build caching | |
id: get-date | |
run: | | |
echo "date=$(date +"%d")" >> $GITHUB_OUTPUT | |
# we cache the build directory instead of the install directory here | |
# because extension installation will write files to install directory | |
# leading to a tainted cache | |
- name: Cache PostgreSQL ${{ matrix.pg }} ${{ matrix.build_type }} | |
id: cache-postgresql | |
uses: actions/cache@v4 | |
with: | |
path: ~/${{ env.PG_SRC_DIR }} | |
key: "linux-32-bit-postgresql-${{ matrix.pg }}-${{ matrix.cc }}\ | |
-${{ steps.get-date.outputs.date }}-${{ hashFiles('.github/**') }}" | |
- name: Build PostgreSQL ${{ matrix.pg }} | |
if: steps.cache-postgresql.outputs.cache-hit != 'true' | |
run: | | |
wget -q -O postgresql.tar.bz2 \ | |
https://ftp.postgresql.org/pub/source/v${{ matrix.pg }}/postgresql-${{ matrix.pg }}.tar.bz2 | |
mkdir -p ~/$PG_SRC_DIR | |
tar --extract --file postgresql.tar.bz2 --directory ~/$PG_SRC_DIR --strip-components 1 | |
cd ~/$PG_SRC_DIR | |
# When building on i386 with the clang compiler, Postgres requires -msse2 to be used | |
./configure --prefix=$HOME/$PG_INSTALL_DIR --with-openssl \ | |
--without-readline --without-zlib --without-libxml --enable-cassert \ | |
--enable-debug --with-llvm --without-icu LLVM_CONFIG=llvm-config-14 CFLAGS="-msse2" | |
make -j $MAKE_JOBS | |
for ext in ${EXTENSIONS}; do | |
make -j$(nproc) -C contrib/${ext} | |
done | |
- name: Install PostgreSQL ${{ matrix.pg }} | |
run: | | |
useradd postgres | |
cd ~/$PG_SRC_DIR | |
make install | |
for ext in ${EXTENSIONS}; do | |
make -C contrib/${ext} install | |
done | |
chown -R postgres:postgres $HOME/$PG_INSTALL_DIR | |
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen | |
locale-gen | |
- name: Build TimescaleDB | |
run: | | |
# The owner of the checkout directory and the files do not match. Add the directory to | |
# Git's "safe.directory" setting. Otherwise git would complain about | |
# 'detected dubious ownership in repository' | |
git config --global --add safe.directory $(pwd) | |
./bootstrap -DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" -DPG_SOURCE_DIR=~/$PG_SRC_DIR \ | |
-DPG_PATH=~/$PG_INSTALL_DIR -DREQUIRE_ALL_TESTS=ON | |
make -j $MAKE_JOBS -C build | |
make -C build install | |
chown -R postgres:postgres . | |
- name: make installcheck | |
id: installcheck | |
shell: bash | |
run: | | |
set -o pipefail | |
export LANG=C.UTF-8 | |
# PostgreSQL cannot be run as root. So, switch to postgres user. | |
sudo -u postgres make -k -C build installcheck IGNORES="${IGNORES}" \ | |
SKIPS="${SKIPS}" PSQL="${HOME}/${PG_INSTALL_DIR}/bin/psql" | tee installcheck.log | |
- name: Show regression diffs | |
if: always() | |
id: collectlogs | |
shell: bash | |
run: | | |
find build -name regression.diffs -exec cat {} + > regression.log | |
find build -name postmaster.log -exec cat {} + > postmaster.log | |
if [[ -s regression.log ]]; then echo "regression_diff=true" >>$GITHUB_OUTPUT; fi | |
grep -e 'FAILED' -e 'failed (ignored)' -e 'not ok' installcheck.log || true | |
cat regression.log | |
- name: Coredumps | |
if: always() | |
id: coredumps | |
shell: bash | |
run: | | |
# wait in case there are in-progress coredumps | |
sleep 10 | |
if compgen -G "/tmp/core*" > /dev/null; then | |
PG_MAJOR=$(echo "${{ matrix.pg }}" | sed -e 's![.].*!!') | |
apt-get install postgresql-${PG_MAJOR}-dbgsym >/dev/null | |
for file in /tmp/core* | |
do | |
gdb /usr/lib/postgresql/${PG_MAJOR}/bin/postgres -c $file <<<" | |
set verbose on | |
set trace-commands on | |
show debug-file-directory | |
printf "'"'"query = '%s'\n\n"'"'", debug_query_string | |
bt full | |
# We try to find ExceptionalCondition frame to print the failed condition | |
# for searching in logs. | |
frame function ExceptionalCondition | |
printf "'"'"condition = '%s'\n"'"'", conditionName | |
# Hopefully now we should be around the failed assertion, print where | |
# we are. | |
up 1 | |
list | |
info args | |
info locals | |
" | tee -a stacktrace.log | |
done | |
echo "coredumps=true" >>$GITHUB_OUTPUT | |
exit 1 | |
fi | |
- name: Save regression diffs | |
if: always() && steps.collectlogs.outputs.regression_diff == 'true' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Regression diff linux-i386 PG${{ matrix.pg }} | |
path: | | |
regression.log | |
installcheck.log | |
- name: Save stacktraces | |
if: always() && steps.coredumps.outputs.coredumps == 'true' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Stacktraces linux-i386 PG${{ matrix.pg }} | |
path: stacktrace.log | |
- name: Save PostgreSQL log | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: PostgreSQL log linux-i386 PG${{ matrix.pg }} | |
path: postmaster.log | |
- name: Save TAP test logs | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: TAP test logs ${{ matrix.os }} ${{ matrix.name }} ${{ matrix.pg }} | |
path: | | |
build/test/tmp_check/log | |
build/tsl/test/tmp_check/log | |
- name: Upload test results to the database | |
if: always() | |
shell: bash | |
env: | |
# GitHub Actions allow you neither to use the env context for the job name, | |
# nor to access the job name from the step context, so we have to | |
# duplicate it to work around this nonsense. | |
JOB_NAME: PG${{ matrix.pg }} ${{ matrix.build_type }} linux-i386 | |
CI_STATS_DB: ${{ secrets.CI_STATS_DB }} | |
GITHUB_EVENT_NAME: ${{ github.event_name }} | |
GITHUB_REF_NAME: ${{ github.ref_name }} | |
GITHUB_REPOSITORY: ${{ github.repository }} | |
GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
GITHUB_RUN_NUMBER: ${{ github.run_number }} | |
JOB_STATUS: ${{ job.status }} | |
run: | | |
if [[ "${{ github.event_name }}" == "pull_request" ]] ; | |
then | |
GITHUB_PR_NUMBER="${{ github.event.number }}" | |
else | |
GITHUB_PR_NUMBER=0 | |
fi | |
export GITHUB_PR_NUMBER | |
scripts/upload_ci_stats.sh |