Yes - this works! Thanks ever so much - I notice this has already been
applied to the 5.4 release.
One more issue I ran in to for trixie is that something seems to have
changed for the type checking. If I set --metadata-backup-interval=0 to
disable automatic uploading I get this sort of error:
> TypeError: '<' not supported between instances of 'NoneType' and 'int' at
mount.py:670 → with >
trio.move_on_after(self.options.metadata_backup_interval):
The following patch fixes this for me, but obviously I don't know if this
is the right thing to do:
--- s3ql-5.4.0.orig/src/s3ql/mount.py
+++ s3ql-5.4.0/src/s3ql/mount.py
@@ -684,6 +684,8 @@ class MetadataUploadTask:
log.debug('started')
while not self.quit:
+ if self.options.metadata_backup_interval is None:
+ break
with trio.move_on_after(self.options.metadata_backup_interval):
await self.event.wait()
Thanks a lot!
Joseph
On Wednesday, August 20, 2025 at 12:18:11 PM UTC-4 [email protected] wrote:
> Hello Joseph,
>
> I have created an issue for this here:
> https://github.com/s3ql/s3ql/issues/384
>
> Could you please try this patch:
>
> Index: src/s3ql/http.py
> IDEA additional info:
> Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
> <+>UTF-8
> ===================================================================
> diff --git a/src/s3ql/http.py b/src/s3ql/http.py
> --- a/src/s3ql/http.py (revision 751e14b08e3401acae81686c7c237300d350a7e6)
> +++ b/src/s3ql/http.py (date 1755705524152)
> @@ -1239,6 +1239,11 @@
> return None
> except (ConnectionResetError, BrokenPipeError, ssl.SSLEOFError):
> raise ConnectionClosed('connection was interrupted')
> + except ssl.SSLError as exc:
> + if exc.library == 'SSL' and exc.reason ==
> 'UNEXPECTED_EOF_WHILE_READING':
> + raise ConnectionClosed('connection was interrupted')
> + else:
> + raise exc
>
> rbuf.e += len_
> log.debug('done (got %d bytes)', len_)
>
>
> Locally, this patch fixed the failed test for me:
>
> $ python3 -m pytest tests/t0_http.py::test_aborted_write2[ssl]
>
> *==================================================================================
>
> test session starts
> ===================================================================================*
>
> platform linux -- Python 3.13.5, pytest-8.3.5, pluggy-1.5.0 --
> /usr/bin/python3
>
> cachedir: .pytest_cache
>
> rootdir: /.../s3ql-git/tests
>
> configfile: pytest.ini
>
> plugins: trio-0.8.0, typeguard-4.4.2
>
> *collected 1 item
>
> *
>
>
> tests/t0_http.py::test_aborted_write2[ssl] PASSED
>
> [100%]
>
>
> ===================================================================================
>
> *1 passed* in 0.72s
> ====================================================================================
>
> Joseph Maher schrieb am Montag, 18. August 2025 um 03:56:59 UTC+2:
>
>>
>> Yes - it's a persistent error...
>>
>> I don't get any errors on ubuntu 24.10 (oracular), but I do get the
>> errors
>> on ubuntu 25.04 (plucky), so it looks like something changed between
>> these
>> versions:
>>
>>
>> ubuntu 24.10 has:
>>
>> libssl3t64:amd64 3.3.1-2ubuntu2.1
>> python3-openssl 24.2.1-1
>>
>>
>> ubuntu 25.04 has:
>>
>> libssl3t64:amd64 3.4.1-1ubuntu3
>> python3-openssl 25.0.0-1
>>
>>
>>
>> Joseph
>>
>>
>> On Sun, 17 Aug 2025, Daniel Jagszent wrote:
>>
>> >
>> > Hi Joseph,
>> >
>> > I'm building s3ql on debian trixie, and I'm getting the following test
>> failure, any advice
>> > much appreciated! […]
>> >
>> >
>> > Is this a persistent error? Re-running the tests multiple times, do you
>> always get the error?
>> >
>> > We currently do not run tests with Python 3.13, and it looks like the
>> Python 3.13 "ssl" package has
>> > changes that we need to address.
>> >
>> > But when I run the tests with Python 3.13 (on Ubuntu 24.04 with uv,
>> main-branch), I only get some
>> > warnings, not the error you get:
>> >
>> > $ uv venv --python 3.13
>> > $ source .venv/bin/activate
>> > $ uv sync --extra dev
>> > $ PYTHONTRACEMALLOC=20 py.test tests/t0_http.py
>> > # […]
>> > ============== warnings summary ==============
>> > t0_http.py::test_read_text[plain]
>> > t0_http.py::test_read_text[ssl]
>> >
>> /s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
>>
>>
>> > PytestUnraisableExceptionWarning: Exception ignored in:
>> <_io.TextIOWrapper encoding='UTF-8'>
>> >
>> > AttributeError: 'HTTPConnection' object has no attribute 'flush'
>> >
>> > During handling of the above exception, another exception occurred:
>> >
>> > Traceback (most recent call last):
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157, in
>> > pytest_pyfunc_call
>> > result = testfunction(**testargs)
>> > AttributeError: 'HTTPConnection' object has no attribute 'close'. Did
>> you mean: 'closed'?
>> >
>> >
>> > Object allocated at:
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py", line 367
>> > item.config.hook.pytest_runtest_protocol(item=item,
>> nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 117
>> > runtestprotocol(item, nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 136
>> > reports.append(call_and_report(item, "call", log))
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 245
>> > call = CallInfo.from_call(
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 344
>> > result: TResult | None = func()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 246
>> > lambda: runtest_hook(item=item, **kwds), when=when,
>> reraise=reraise
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 178
>> > item.runtest()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 1671
>> > self.ihook.pytest_pyfunc_call(pyfuncitem=self)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157
>> > result = testfunction(**testargs)
>> > File "/s3ql-source/tests/t0_http.py", line 486
>> > fh = TextIOWrapper(conn)
>> > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
>> >
>> > t0_http.py::test_read_text2[plain]
>> > t0_http.py::test_read_text2[ssl]
>> >
>> /s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
>>
>>
>> > PytestUnraisableExceptionWarning: Exception ignored in:
>> <_io.TextIOWrapper encoding='UTF-8'>
>> >
>> > AttributeError: 'HTTPConnection' object has no attribute 'flush'
>> >
>> > During handling of the above exception, another exception occurred:
>> >
>> > Traceback (most recent call last):
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157, in
>> > pytest_pyfunc_call
>> > result = testfunction(**testargs)
>> > AttributeError: 'HTTPConnection' object has no attribute 'close'. Did
>> you mean: 'closed'?
>> >
>> >
>> > Object allocated at:
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py", line 367
>> > item.config.hook.pytest_runtest_protocol(item=item,
>> nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 117
>> > runtestprotocol(item, nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 136
>> > reports.append(call_and_report(item, "call", log))
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 245
>> > call = CallInfo.from_call(
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 344
>> > result: TResult | None = func()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 246
>> > lambda: runtest_hook(item=item, **kwds), when=when,
>> reraise=reraise
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 178
>> > item.runtest()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 1671
>> > self.ihook.pytest_pyfunc_call(pyfuncitem=self)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157
>> > result = testfunction(**testargs)
>> > File "/s3ql-source/tests/t0_http.py", line 494
>> > fh = TextIOWrapper(conn)
>> > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
>> >
>> > t0_http.py::test_read_text3[plain]
>> > t0_http.py::test_read_text3[ssl]
>> >
>> /s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
>>
>>
>> > PytestUnraisableExceptionWarning: Exception ignored in:
>> <_io.TextIOWrapper encoding='UTF-8'>
>> >
>> > AttributeError: 'HTTPConnection' object has no attribute 'flush'
>> >
>> > During handling of the above exception, another exception occurred:
>> >
>> > Traceback (most recent call last):
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157, in
>> > pytest_pyfunc_call
>> > result = testfunction(**testargs)
>> > AttributeError: 'HTTPConnection' object has no attribute 'close'. Did
>> you mean: 'closed'?
>> >
>> >
>> > Object allocated at:
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py", line 367
>> > item.config.hook.pytest_runtest_protocol(item=item,
>> nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 117
>> > runtestprotocol(item, nextitem=nextitem)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 136
>> > reports.append(call_and_report(item, "call", log))
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 245
>> > call = CallInfo.from_call(
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 344
>> > result: TResult | None = func()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 246
>> > lambda: runtest_hook(item=item, **kwds), when=when,
>> reraise=reraise
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line
>> 178
>> > item.runtest()
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 1671
>> > self.ihook.pytest_pyfunc_call(pyfuncitem=self)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line
>> 512
>> > return self._hookexec(self.name, self._hookimpls.copy(), kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line
>> 120
>> > return self._inner_hookexec(hook_name, methods, kwargs,
>> firstresult)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line
>> 121
>> > res = hook_impl.function(*args)
>> > File
>> "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line
>> 157
>> > result = testfunction(**testargs)
>> > File "/s3ql-source/tests/t0_http.py", line 503
>> > fh = TextIOWrapper(conn)
>> > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
>> >
>> >
>> >
>> >
>> > Until we address Python 3.13 compatibility issues, you might want to
>> install S3QL inside a venv with
>> > Python 3.12.
>> >
>> >
>> >
>
>
--
You received this message because you are subscribed to the Google Groups
"s3ql" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/s3ql/a2ee3022-ca56-4ff7-b31d-3ed975019a26n%40googlegroups.com.