Hello, Please note that this comment was generated automatically by https://pagure.io/releng/blob/main/f/scripts/ftbfs-fti/follow-policy.py If you feel that this output has mistakes, please open an issue at https://pagure.io/releng/ Your package (python-beaker) Fails To Install in Fedora 41: can't install python3-beaker: - nothing provides python(abi) = 3.12 needed by python3-beaker-1.12.1-5.fc40.noarch If you know about this problem and are planning on fixing it, please acknowledge so by setting the bug status to ASSIGNED. If you don't have time to maintain this package, consider orphaning it, so maintainers of dependent packages realize the problem. If you don't react accordingly to the policy for FTBFS/FTI bugs (https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/), your package may be orphaned in 8+ weeks. P.S. The data was generated solely from koji buildroot, so it might be newer than the latest compose or the content on mirrors. To reproduce, use the koji/local repo only, e.g. in mock: $ mock -r fedora-41-x86_64 --config-opts mirrored=False install python3-beaker P.P.S. If this bug has been reported in the middle of upgrading multiple dependent packages, please consider using side tags: https://docs.fedoraproject.org/en-US/fesco/Updates_Policy/#updating-inter-dependent-packages Thanks!
The missing dependency to build this can be worked around like this: -BuildRequires: python3dist(webtest) +# BuildRequires: python3dist(webtest) -- https://bugzilla.redhat.com/2245641 -%pytest +# test_ext_redis.py needs webtest +%pytest --ignore tests/test_managers/test_ext_redis.py However, even then, tests/test_container.py fails on Python 3.13 with: =================================== FAILURES =================================== ______________________________ test_dbm_container ______________________________ totaltime = 10, expiretime = None, delay = 0 def test_dbm_container(totaltime=10, expiretime=None, delay=0): > _run_container_test(clsmap['dbm'], totaltime, expiretime, delay, False) tests/test_container.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = <class 'beaker.container.DBMNamespaceManager'>, totaltime = 10 expiretime = None, delay = 0, threadlocal = False def _run_container_test(cls, totaltime, expiretime, delay, threadlocal): print("\ntesting %s for %d secs with expiretime %s delay %d" % ( cls, totaltime, expiretime, delay)) CachedWidget.totalcreates = 0 CachedWidget.delay = delay # allow for python overhead when checking current time against expire times fudge = 10 starttime = time.time() running = [True] class RunThread(Thread): def run(self): print("%s starting" % self) if threadlocal: localvalue = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) localvalue.clear_value() else: localvalue = value try: while running[0]: item = localvalue.get_value() if expiretime is not None: currenttime = time.time() itemtime = item.time assert itemtime + expiretime + delay + fudge >= currenttime, \ "created: %f expire: %f delay: %f currenttime: %f" % \ (itemtime, expiretime, delay, currenttime) time.sleep(random.random() * .00001) except: running[0] = False raise print("%s finishing" % self) if not threadlocal: value = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) value.clear_value() else: value = None threads = [RunThread() for i in range(1, 8)] for t in threads: t.start() time.sleep(totaltime) failed = not running[0] running[0] = False for t in threads: t.join() > assert not failed, "One or more threads failed" E AssertionError: One or more threads failed E assert not True tests/test_container.py:90: AssertionError ----------------------------- Captured stdout call ----------------------------- testing <class 'beaker.container.DBMNamespaceManager'> for 10 secs with expiretime None delay 0 <RunThread(Thread-8, started 140548362995392)> starting <RunThread(Thread-9, started 140548373481152)> starting <RunThread(Thread-10, started 140548459464384)> starting <RunThread(Thread-11, started 140548469950144)> starting <RunThread(Thread-12, started 140548501407424)> starting<RunThread(Thread-13, started 140548490921664)> starting <RunThread(Thread-14, started 140548480435904)> starting <RunThread(Thread-8, started 140548362995392)> finishing _____________________________ test_dbm_container_2 _____________________________ def test_dbm_container_2(): > test_dbm_container(expiretime=12) tests/test_container.py:118: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_container.py:103: in test_dbm_container _run_container_test(clsmap['dbm'], totaltime, expiretime, delay, False) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = <class 'beaker.container.DBMNamespaceManager'>, totaltime = 10 expiretime = 12, delay = 0, threadlocal = False def _run_container_test(cls, totaltime, expiretime, delay, threadlocal): print("\ntesting %s for %d secs with expiretime %s delay %d" % ( cls, totaltime, expiretime, delay)) CachedWidget.totalcreates = 0 CachedWidget.delay = delay # allow for python overhead when checking current time against expire times fudge = 10 starttime = time.time() running = [True] class RunThread(Thread): def run(self): print("%s starting" % self) if threadlocal: localvalue = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) localvalue.clear_value() else: localvalue = value try: while running[0]: item = localvalue.get_value() if expiretime is not None: currenttime = time.time() itemtime = item.time assert itemtime + expiretime + delay + fudge >= currenttime, \ "created: %f expire: %f delay: %f currenttime: %f" % \ (itemtime, expiretime, delay, currenttime) time.sleep(random.random() * .00001) except: running[0] = False raise print("%s finishing" % self) if not threadlocal: value = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) value.clear_value() else: value = None threads = [RunThread() for i in range(1, 8)] for t in threads: t.start() time.sleep(totaltime) failed = not running[0] running[0] = False for t in threads: t.join() > assert not failed, "One or more threads failed" E AssertionError: One or more threads failed E assert not True tests/test_container.py:90: AssertionError ----------------------------- Captured stdout call ----------------------------- testing <class 'beaker.container.DBMNamespaceManager'> for 10 secs with expiretime 12 delay 0 <RunThread(Thread-43, started 140548480435904)> starting <RunThread(Thread-44, started 140548490921664)> starting <RunThread(Thread-45, started 140548501407424)> starting<RunThread(Thread-46, started 140548469950144)> starting <RunThread(Thread-47, started 140548459464384)> starting <RunThread(Thread-48, started 140548373481152)> starting <RunThread(Thread-49, started 140548362995392)> starting <RunThread(Thread-43, started 140548480435904)> finishing _____________________________ test_dbm_container_3 _____________________________ def test_dbm_container_3(): > test_dbm_container(expiretime=15, delay=2) tests/test_container.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_container.py:103: in test_dbm_container _run_container_test(clsmap['dbm'], totaltime, expiretime, delay, False) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = <class 'beaker.container.DBMNamespaceManager'>, totaltime = 10 expiretime = 15, delay = 2, threadlocal = False def _run_container_test(cls, totaltime, expiretime, delay, threadlocal): print("\ntesting %s for %d secs with expiretime %s delay %d" % ( cls, totaltime, expiretime, delay)) CachedWidget.totalcreates = 0 CachedWidget.delay = delay # allow for python overhead when checking current time against expire times fudge = 10 starttime = time.time() running = [True] class RunThread(Thread): def run(self): print("%s starting" % self) if threadlocal: localvalue = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) localvalue.clear_value() else: localvalue = value try: while running[0]: item = localvalue.get_value() if expiretime is not None: currenttime = time.time() itemtime = item.time assert itemtime + expiretime + delay + fudge >= currenttime, \ "created: %f expire: %f delay: %f currenttime: %f" % \ (itemtime, expiretime, delay, currenttime) time.sleep(random.random() * .00001) except: running[0] = False raise print("%s finishing" % self) if not threadlocal: value = Value( 'test', cls('test', data_dir='./cache'), createfunc=CachedWidget, expiretime=expiretime, starttime=starttime) value.clear_value() else: value = None threads = [RunThread() for i in range(1, 8)] for t in threads: t.start() time.sleep(totaltime) failed = not running[0] running[0] = False for t in threads: t.join() > assert not failed, "One or more threads failed" E AssertionError: One or more threads failed E assert not True tests/test_container.py:90: AssertionError ----------------------------- Captured stdout call ----------------------------- testing <class 'beaker.container.DBMNamespaceManager'> for 10 secs with expiretime 15 delay 2 <RunThread(Thread-50, started 140548362995392)> starting <RunThread(Thread-51, started 140548373481152)> starting<RunThread(Thread-52, started 140548459464384)> starting <RunThread(Thread-53, started 140548469950144)> starting <RunThread(Thread-54, started 140548501407424)> starting <RunThread(Thread-55, started 140548490921664)> starting <RunThread(Thread-56, started 140548480435904)> starting <RunThread(Thread-50, started 140548362995392)> finishing =========================== short test summary info ============================ FAILED tests/test_container.py::test_dbm_container - AssertionError: One or m... FAILED tests/test_container.py::test_dbm_container_2 - AssertionError: One or... FAILED tests/test_container.py::test_dbm_container_3 - AssertionError: One or... ====== 3 failed, 101 passed, 11 skipped, 28 warnings in 151.84s (0:02:31) ======
Hello, Please note that this comment was generated automatically by https://pagure.io/releng/blob/main/f/scripts/ftbfs-fti/follow-policy.py If you feel that this output has mistakes, please open an issue at https://pagure.io/releng/ This package fails to install and maintainers are advised to take one of the following actions: - Fix this bug and close this bugzilla once the update makes it to the repository. (The same script that posted this comment will eventually close this bugzilla when the fixed package reaches the repository, so you don't have to worry about it.) or - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet. or - Orphan the package if you no longer plan to maintain it. If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue. This package may be orphaned in 7+ weeks. This is the first reminder (step 3) from the policy. Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug.
Note, python3-beaker seems to be on a default Fedora 40 Workstation install (somehow), so this means we get a scary message on F40 to F41 upgrade: https://openqa.fedoraproject.org/tests/2693381#step/graphical_upgrade_run/11 I'll see if I can find time to look at fixing this later today.
"Fixed" in https://bodhi.fedoraproject.org/updates/FEDORA-2024-22d31724f6 , see https://github.com/bbangert/beaker/issues/242 and https://github.com/bbangert/beaker/pull/243 for details.