Hi,
On Fri, 1 Nov 2024 at 21:44, Andres Freund <[email protected]> wrote:
>
> Hi,
>
> Thanks for the patch!
>
>
> On 2024-11-01 12:17:00 +0300, Nazir Bilal Yavuz wrote:
> > I made these tasks triggered manually like MinGW task to save CI credits
> > but a related line is commented out for now to trigger CFBot.
>
> Oh, I need to pick my patch which allows repo-level config of which tasks run
> back up. Then we can enable these by default for cfbot, but not for individual
> repos...
>
>
> > +task:
> > + depends_on: SanityCheck
> > + # trigger_type: manual
> > +
> > + env:
> > + # Below are experimentally derived to be a decent choice.
> > + CPUS: 2
> > + BUILD_JOBS: 8
> > + TEST_JOBS: 8
> > +
> > + CIRRUS_WORKING_DIR: /home/postgres/postgres
>
> Why do you need to set that?
Otherwise, it is set to /tmp path and the size of /tmp mount point is
1.2GB, which is not enough.
> > + CCACHE_DIR: /tmp/ccache_dir
> > +
> > + PATH: /usr/sbin:$PATH
> > +
> > + # Postgres interprets LANG as a 'en_US.UTF-8' but it is 'C', then
>
> What does "Postgres interprets LANG as a 'en_US.UTF-8'" mean?
It was because initdb was failing on NetBSD when the LANG and LC_ALL
is not set to C. I rephrased the comment and moved this under NetBSD
task.
> > + # Postgres tries to set 'LC_COLLATE' to 'en_US.UTF-8' but it is not
> > + # changeable. Initdb fails because of that. So, LANG is forced to be
> > 'C'.
> > + LANG: "C"
> > + LC_ALL: "C"
>
> > + matrix:
> > + - name: NetBSD - 10 - Meson
> > + only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' ||
> > $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*'
> > + env:
> > + IMAGE_FAMILY: pg-ci-netbsd-postgres
> > + INCLUDE_DIRS: -Dextra_lib_dirs=/usr/pkg/lib
> > -Dextra_include_dirs=/usr/pkg/include
> > + <<: *netbsd_task_template
> > +
> > + - name: OpenBSD - 7 - Meson
> > + only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' ||
> > $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*'
> > + env:
> > + IMAGE_FAMILY: pg-ci-openbsd-postgres
> > + INCLUDE_DIRS: -Dextra_include_dirs=/usr/local/include
> > -Dextra_lib_dirs=/usr/local/lib
> > + UUID: -Duuid=e2fs
>
> Shouldn't something be added to PKG_CONFIG_PATH / --pkg-config-path?
I don't think so. Both OSes are able to find pkgconfig at
'/usr/pkg/bin/pkg-config'. Am I missing something?
> For other OSs we have stanzas like
>
> setup_additional_packages_script: |
> #apt-get update
> #DEBIAN_FRONTEND=noninteractive apt-get -y install ...
>
> it'd be good to have something similar for openbsd/netbsd, given that most
> won't be as familiar with that.
Done.
> > + <<: *openbsd_task_template
> > + sysinfo_script: |
> > + locale
> > + id
> > + uname -a
> > + ulimit -a -H && ulimit -a -S
> > + env
> > +
> > + ccache_cache:
> > + folder: $CCACHE_DIR
> > +
> > + create_user_script: |
> > + useradd postgres
> > + chown -R postgres:users /home/postgres
> > + mkdir -p ${CCACHE_DIR}
> > + chown -R postgres:users ${CCACHE_DIR}
> > +
> > + # -Duuid=bsd is not set since 'bsd' uuid option
> > + # is not working on NetBSD & OpenBSD. See
> > + #
> > https://www.postgresql.org/message-id/[email protected]
> > + # And other uuid options are not available on NetBSD.
> > + configure_script: |
> > + su postgres <<-EOF
> > + meson setup \
> > + --buildtype debug \
>
> I suspect it'd be good to either add -Og to cflags (as done in a bunch of
> other tasks) or to use debugoptimized, given that the tests on these machines
> are fairly slow.
Done.
> > + -Dcassert=true -Dssl=openssl ${UUID} \
> > + -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \
> > + ${INCLUDE_DIRS} \
> > + build
> > + EOF
>
> Should probably enable injection points.
Done.
> > + build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS}'
> > + upload_caches: ccache
> > +
> > + test_world_script: |
> > + su postgres <<-EOF
> > + ulimit -c unlimited
> > + # Otherwise tests will fail on OpenBSD, due to the lack of enough
> > processes.
> > + ulimit -p 256
> > + meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
> > + EOF
> > +
> > + on_failure:
> > + <<: *on_failure_meson
> > +
> > +
>
> Right now you don't seem to be collecting core files - but you're still
> enabling them via ulimit -c unlimited. At least we shouldn't use ulimit -c
> unlimited without collecting core files, but it'd probably be better to add
> support for collecting core files. Shouldn't be too hard.
Done. I separated this patch to make review easier.
--
Regards,
Nazir Bilal Yavuz
Microsoft
From cbea598b11e85b5c7090ca8e9cc05c35f0359f54 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <[email protected]>
Date: Thu, 7 Nov 2024 15:48:31 +0300
Subject: [PATCH v2 1/3] Fix meson could not find bsd_auth.h
bsd_auth.h file needs to be compiled together with the 'sys/types.h' as
it has missing type definitions.
See synopsis at https://man.openbsd.org/authenticate.3
---
meson.build | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 5b0510cef78..84107955d5d 100644
--- a/meson.build
+++ b/meson.build
@@ -551,7 +551,8 @@ test_c_args = cppflags + cflags
bsd_authopt = get_option('bsd_auth')
bsd_auth = not_found_dep
if cc.check_header('bsd_auth.h', required: bsd_authopt,
- args: test_c_args, include_directories: postgres_inc)
+ args: test_c_args, prefix: '#include <sys/types.h>',
+ include_directories: postgres_inc)
cdata.set('USE_BSD_AUTH', 1)
bsd_auth = declare_dependency()
endif
--
2.45.2
From cd5bb66a55e5226b543f5b7db9128cfa48e338e3 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <[email protected]>
Date: Mon, 11 Nov 2024 13:23:22 +0300
Subject: [PATCH v2 2/3] Add NetBSD and OpenBSD tasks to the Postgres CI
NetBSD and OpenBSD Postgres CI images are generated [1] but their tasks
are not added to the upstream Postgres yet. This patch adds them.
Note: These tasks will be triggered manually to save CI credits but a
related line is commented out for now to trigger CFBot.
Author: Nazir Bilal Yavuz <[email protected]>
[1] https://github.com/anarazel/pg-vm-images
---
.cirrus.tasks.yml | 84 +++++++++++++++++++++++++++++++++++++++++++++++
.cirrus.yml | 10 ++++++
2 files changed, 94 insertions(+)
diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml
index fc413eb11ef..f338af902aa 100644
--- a/.cirrus.tasks.yml
+++ b/.cirrus.tasks.yml
@@ -213,6 +213,90 @@ task:
cores_script: src/tools/ci/cores_backtrace.sh freebsd /tmp/cores
+task:
+ depends_on: SanityCheck
+ # trigger_type: manual
+
+ env:
+ # Below are experimentally derived to be a decent choice.
+ CPUS: 2
+ BUILD_JOBS: 8
+ TEST_JOBS: 8
+
+ CIRRUS_WORKING_DIR: /home/postgres/postgres
+ CCACHE_DIR: /tmp/ccache_dir
+
+ PATH: /usr/sbin:$PATH
+
+ matrix:
+ - name: NetBSD - 10 - Meson
+ only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*'
+ env:
+ IMAGE_FAMILY: pg-ci-netbsd-postgres
+ INCLUDE_DIRS: -Dextra_include_dirs=/usr/pkg/include -Dextra_lib_dirs=/usr/pkg/lib
+ # initdb fails with: 'invalid locale settings' error on NetBSD.
+ # Force 'LANG' and 'LC_*' variables to be 'C'.
+ LANG: "C"
+ LC_ALL: "C"
+ setup_additional_packages_script: |
+ #pkgin -y install ...
+ <<: *netbsd_task_template
+
+ - name: OpenBSD - 7 - Meson
+ only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*'
+ env:
+ IMAGE_FAMILY: pg-ci-openbsd-postgres
+ INCLUDE_DIRS: -Dextra_include_dirs=/usr/local/include -Dextra_lib_dirs=/usr/local/lib
+ UUID: -Duuid=e2fs
+ setup_additional_packages_script: |
+ #pkg_add -I ...
+ <<: *openbsd_task_template
+
+ sysinfo_script: |
+ locale
+ id
+ uname -a
+ ulimit -a -H && ulimit -a -S
+ env
+
+ ccache_cache:
+ folder: $CCACHE_DIR
+
+ create_user_script: |
+ useradd postgres
+ chown -R postgres:users /home/postgres
+ mkdir -p ${CCACHE_DIR}
+ chown -R postgres:users ${CCACHE_DIR}
+
+ # -Duuid=bsd is not set since 'bsd' uuid option
+ # is not working on NetBSD & OpenBSD. See
+ # https://www.postgresql.org/message-id/[email protected]
+ # And other uuid options are not available on NetBSD.
+ configure_script: |
+ su postgres <<-EOF
+ meson setup \
+ --buildtype=debugoptimized \
+ -Dcassert=true -Dinjection_points=true \
+ -Dssl=openssl ${UUID} \
+ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \
+ ${INCLUDE_DIRS} \
+ build
+ EOF
+
+ build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS}'
+ upload_caches: ccache
+
+ test_world_script: |
+ su postgres <<-EOF
+ # Otherwise tests will fail on OpenBSD, due to the lack of enough processes.
+ ulimit -p 256
+ meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
+ EOF
+
+ on_failure:
+ <<: *on_failure_meson
+
+
# configure feature flags, shared between the task running the linux tests and
# the CompilerWarnings task
LINUX_CONFIGURE_FEATURES: &LINUX_CONFIGURE_FEATURES >-
diff --git a/.cirrus.yml b/.cirrus.yml
index a83129ae46d..33c6e481d74 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -52,6 +52,16 @@ default_freebsd_task_template: &freebsd_task_template
PLATFORM: freebsd
<<: *cirrus_community_vm_template
+default_netbsd_task_template: &netbsd_task_template
+ env:
+ PLATFORM: netbsd
+ <<: *cirrus_community_vm_template
+
+default_openbsd_task_template: &openbsd_task_template
+ env:
+ PLATFORM: openbsd
+ <<: *cirrus_community_vm_template
+
default_windows_task_template: &windows_task_template
env:
--
2.45.2
From 6f43797df839c189545d87b5c9ccbf45403cf631 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <[email protected]>
Date: Mon, 11 Nov 2024 17:27:08 +0300
Subject: [PATCH v2 3/3] Collect core files on NetBSD and OpenBSD
---
.cirrus.tasks.yml | 17 ++++++++++++++++-
src/tools/ci/cores_backtrace.sh | 6 ++++--
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml
index f338af902aa..a1500b42e4c 100644
--- a/.cirrus.tasks.yml
+++ b/.cirrus.tasks.yml
@@ -210,7 +210,7 @@ task:
build/tmp_install/usr/local/pgsql/bin/pg_ctl -D build/runningcheck stop || true
EOF
<<: *on_failure_meson
- cores_script: src/tools/ci/cores_backtrace.sh freebsd /tmp/cores
+ cores_script: src/tools/ci/cores_backtrace.sh bsd /tmp/cores
task:
@@ -227,11 +227,13 @@ task:
CCACHE_DIR: /tmp/ccache_dir
PATH: /usr/sbin:$PATH
+ CORE_DUMP_DIR: /var/crash
matrix:
- name: NetBSD - 10 - Meson
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*'
env:
+ OS_NAME: netbsd
IMAGE_FAMILY: pg-ci-netbsd-postgres
INCLUDE_DIRS: -Dextra_include_dirs=/usr/pkg/include -Dextra_lib_dirs=/usr/pkg/lib
# initdb fails with: 'invalid locale settings' error on NetBSD.
@@ -245,11 +247,14 @@ task:
- name: OpenBSD - 7 - Meson
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*'
env:
+ OS_NAME: openbsd
IMAGE_FAMILY: pg-ci-openbsd-postgres
INCLUDE_DIRS: -Dextra_include_dirs=/usr/local/include -Dextra_lib_dirs=/usr/local/lib
UUID: -Duuid=e2fs
setup_additional_packages_script: |
#pkg_add -I ...
+ # Always core dump to ${CORE_DUMP_DIR}
+ set_core_dump_script: sysctl -w kern.nosuidcoredump=2
<<: *openbsd_task_template
sysinfo_script: |
@@ -267,6 +272,10 @@ task:
chown -R postgres:users /home/postgres
mkdir -p ${CCACHE_DIR}
chown -R postgres:users ${CCACHE_DIR}
+ setup_core_files_script: |
+ mkdir -p ${CORE_DUMP_DIR}
+ chmod -R 770 ${CORE_DUMP_DIR}
+ chown -R postgres:users ${CORE_DUMP_DIR}
# -Duuid=bsd is not set since 'bsd' uuid option
# is not working on NetBSD & OpenBSD. See
@@ -288,6 +297,7 @@ task:
test_world_script: |
su postgres <<-EOF
+ ulimit -c unlimited
# Otherwise tests will fail on OpenBSD, due to the lack of enough processes.
ulimit -p 256
meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
@@ -295,6 +305,11 @@ task:
on_failure:
<<: *on_failure_meson
+ cores_script: |
+ # Although OSes are forced to core dump inside ${CORE_DUMP_DIR}, they may
+ # not obey this. So, move core files to the ${CORE_DUMP_DIR} directory.
+ find build/ -maxdepth 1 -type f -name '*.core' -exec mv '{}' ${CORE_DUMP_DIR} \;
+ src/tools/ci/cores_backtrace.sh ${OS_NAME} ${CORE_DUMP_DIR}
# configure feature flags, shared between the task running the linux tests and
diff --git a/src/tools/ci/cores_backtrace.sh b/src/tools/ci/cores_backtrace.sh
index 28d3cecfc67..4b174a5cf56 100755
--- a/src/tools/ci/cores_backtrace.sh
+++ b/src/tools/ci/cores_backtrace.sh
@@ -9,7 +9,7 @@ os=$1
directory=$2
case $os in
- freebsd|linux|macos)
+ freebsd|netbsd|openbsd|linux|macos)
;;
*)
echo "unsupported operating system ${os}"
@@ -26,7 +26,7 @@ for corefile in $(find "$directory" -type f) ; do
echo -e '\n\n'
fi
- if [ "$os" = 'macos' ]; then
+ if [ "$os" = 'macos' ] || [ "$os" = 'openbsd' ]; then
lldb -c $corefile --batch -o 'thread backtrace all' -o 'quit'
else
auxv=$(gdb --quiet --core ${corefile} --batch -ex 'info auxv' 2>/dev/null)
@@ -37,6 +37,8 @@ for corefile in $(find "$directory" -type f) ; do
if [ "$os" = 'freebsd' ]; then
binary=$(echo "$auxv" | grep AT_EXECPATH | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
+ elif [ "$os" = 'netbsd' ]; then
+ binary=$(echo "$auxv" | grep AT_SUN_EXECNAME | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
elif [ "$os" = 'linux' ]; then
binary=$(echo "$auxv" | grep AT_EXECFN | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
else
--
2.45.2