Bug 2291634 - F41FailsToInstall: python3-beaker
Summary: F41FailsToInstall: python3-beaker
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-beaker
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Jonathan Wright
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On: 2245641 2291971 2291973
Blocks: F41FTBFS F41FailsToInstall PYTHON3.13
TreeView+ depends on / blocked
 
Reported: 2024-06-12 11:21 UTC by Fedora Fails To Install
Modified: 2024-06-21 20:03 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2024-06-21 20:03:30 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Fedora Fails To Install 2024-06-12 11:21:15 UTC
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!

Comment 1 Miro Hrončok 2024-06-12 15:16:40 UTC
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) ======

Comment 2 Fedora Fails To Install 2024-06-19 20:02:52 UTC
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.

Comment 3 Adam Williamson 2024-06-21 17:37:23 UTC
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.


Note You need to log in before you can comment on or make changes to this bug.