Hi,
On Sun, 6 Sept 2026 at 21:12, Andrey Borodin <[email protected]> wrote:
>
> On Thu, Aug 13, 2026, Greg Sabino Mullane wrote:
> > But they can still use PG_TEST_INITDB_EXTRA_OPTS, right? We are not
> > replacing the var, just adding a new one, I thought.
>
> Yes. I read Nazir's v2. It keeps PG_TEST_INITDB_EXTRA_OPTS
> available for actual initdb options. Both Cluster.pm and pg_regress
> handle the new variable consistently, and the CI changes move only
> server GUCs to it. The patch LGTM.
Thank you for looking into this!
>
> The lowest-hanging fruit I found is splitting the Linux Meson 64-bit
> ASAN tests across two runners, as we already do for the Windows Visual
> Studio job. This does not reduce the total work and actually
> duplicates the configure and build steps, but it does reduce how long
> we wait for CI.
>
> In one run, the two Test world slices took 8:33 and 12:08. Two
> unsliced jobs running at the same time took 23:45 and 25:05. Together
> the slices ran the same 412 tests. In a complete run, the gain is
> naturally limited by the next-slowest job.
>
> The CI image currently has Meson 1.7, so the patch emulates Meson 1.8's
> round-robin --slice using the test list.
First question that comes to mind is why we are doing this only for
Linux 64 Meson and not for all jobs. I think there are two answers:
1. We can't do this for Linux Autoconf as far as I know, so it doesn't
make sense for tasks that take less or similar time.
2. The free concurrency limit for GitHub Actions is 20, and our main
CI tasks use 8 (9 with your patch). It would be best to not exceed 10
so that we can run two CI tasks simultaneously.
So, I think this change makes sense. Also we can apply the same change
to the next longest running task, which is MinGW 64 depending on my
testing.
My review:
+ readarray -t test_names < <(
+ meson test ${{env.MTEST_ARGS}} ${{env.MTEST_TARGET}} \
+ --list --no-suite setup |
+ awk -F ' - ' \
+ -v slice=${{ matrix.slice}} \
+ -v slices=${{ matrix.num_slices}} \
+ '(NR - 1) % slices == slice - 1 {
+ name = $NF
+ sub(/:[^ ]+ \/ /, ":", name)
+ print name
+ }'
+ )
This is complicated but I don't have a better solution. One point is
that 'meson test --list' doesn't guarantee the order of the returned
list, so we might miss tests if the order differs between tasks. I
recommend sorting the list names before slicing.
- - *upload_logs_step
+ - name: Upload logs
+ if: failure() && !cancelled()
+ uses: actions/upload-artifact@v7
+ with:
+ name: logs-${{ github.job }}-${{ matrix.slice }}-${{
github.run_id }}-${{ github.run_attempt }}
+ path: |
+ **/*.log
+ **/*.diffs
+ **/regress_log_*
+ **/crashlog-*.txt
+ build/meson-logs/**
+ **/config.log
+ if-no-files-found: ignore
We have the same problem for the Windows VS job; otherwise, two
artifacts could end up having the same name. I remember sending a
patch to fix this, but I don't recall where it is. I think we can save
this step as something like 'upload_logs_step_slice' and use it in the
Windows VS task as well.
--
Regards,
Nazir Bilal Yavuz
Microsoft