From 644b41f0658dd0c2f17323000d812f90c4e6e47a Mon Sep 17 00:00:00 2001 From: Chris Burr Date: Mon, 31 Aug 2026 10:38:35 +0200 Subject: [PATCH 1/2] fix: Clone DIRACGrid/DIRAC in the integration tests again ccf6911 ("Bump prefix-dev/setup-pixi from 0.10.0 to 0.10.1 (#196)") accidentally merged a temporary hack that pointed the integration tests at chrisburr/DIRAC fix/plot-tests-numpy-bins-{v8r0,v9r0,integration} instead of DIRACGrid/DIRAC, so main has not been testing against the real DIRAC branches since then. The plot test fixes those branches carried have been merged upstream (DIRACGrid/DIRAC#8753, #8754 and #8755) and are present in rel-v8r0, rel-v9r0 and integration, so the hack is no longer needed. --- .github/workflows/build-and-test.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 60da7ee..212b02c 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -197,10 +197,7 @@ jobs: - name: Prepare environment run: | pip install typer pyyaml gitpython packaging - # HACK: DO NOT MERGE - clone the plot-test fix branches instead of the real ones - git clone https://github.com/chrisburr/DIRAC.git -b "fix/plot-tests-numpy-bins-${DIRAC_BRANCH#rel-}" DIRACRepo - env: - DIRAC_BRANCH: ${{ matrix.dirac-branch }} + git clone https://github.com/DIRACGrid/DIRAC.git -b "${{ matrix.dirac-branch }}" DIRACRepo - name: Run tests run: | DIRACOS_TARBALL_PATH=$(echo ${PWD}/DIRACOS-*.sh) From 7eb2d63c49e1fb94a8a57ed9cd6c6acabf2ea8ce Mon Sep 17 00:00:00 2001 From: Chris Burr Date: Mon, 31 Aug 2026 10:38:52 +0200 Subject: [PATCH 2/2] fix: Pin m2crypto <0.46 to avoid a broken ssl_read() conda-forge published m2crypto 0.46.0 through 0.49.0 on 2026-08-28, which broke every integration test with: SystemError: returned a result with an exception set 0.46.0 rewrote ssl_read() in src/SWIG/_ssl.i and inverted the handling of ssl_sleep_with_timeout()'s return value: that helper returns 0 when poll() reports the fd is ready and -1 on timeout, but the new code treats 0 as a failure and falls through to retry on -1. It also dropped the gettimeofday() that initialised the deadline, so the timeout is computed from an uninitialised struct timeval. The result is that any read() on a connection with a timeout set spins on SSL_read() until data arrives and then returns a value with a stale SSLTimeoutError still set, which breaks all DIRAC DISET/dips traffic. ssl_connect(), ssl_write() and ssl_accept() are unaffected. Reproduced against the conda-forge builds of 0.46.0 and 0.49.0; 0.45.1 is the last working release and the bug is still present upstream. --- construct.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/construct.yaml b/construct.yaml index 1656483..59876d8 100644 --- a/construct.yaml +++ b/construct.yaml @@ -39,7 +39,13 @@ specs: - openssl >=3 # Security - certifi - - m2crypto >=0.43 + # Upper pin: m2crypto 0.46.0 rewrote ssl_read() in src/SWIG/_ssl.i and inverted the + # handling of ssl_sleep_with_timeout()'s return value (and dropped the gettimeofday() + # that initialises the deadline). Any read() on a connection with a timeout set now + # busy-loops and returns with a stale SSLTimeoutError set, which surfaces as + # "SystemError: returned a result with an exception set" + # and breaks all DIRAC DISET/dips connections. Still unfixed upstream as of 0.49.0. + - m2crypto >=0.43,<0.46 - pyasn1 >0.4.1 - pyasn1-modules - tornado_m2crypto >=0.1.4