Bug 1818600

Summary: calibre fails to build with Python 3.9: Hangs in test_jobs_manager
Product: [Fedora] Fedora Reporter: Miro Hrončok <mhroncok>
Component: calibreAssignee: Kevin Fenzi <kevin>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: awilliam, chkr, cstratak, enpontus, helio, kevin, mhroncok, mplch, netllama, nushio, zbyszek
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-05-15 17:10:18 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1807186    
Bug Blocks: 1785415    

Description Miro Hrončok 2020-03-29 14:44:53 UTC
calibre fails to build with Python 3.9.0a5, it hangs in %check:

test_jobs_manager (calibre.srv.tests.loop.LoopTest)
Test the jobs manager ... Exception in thread JobsMonitor0:
Traceback (most recent call last):
  File "/usr/lib64/python3.9/threading.py", line 944, in _bootstrap_inner
    self.run()
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/srv/jobs.py", line 43, in run
    result = func()
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/utils/ipc/simple_worker.py", line 258, in fork_job
    return two_part_fork_job(env, priority, cwd)(
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/utils/ipc/simple_worker.py", line 174, in two_part_fork_job
    listener, w = create_worker(env, priority, cwd)
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/utils/ipc/simple_worker.py", line 129, in create_worker
    address, listener = create_listener(auth_key)
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/utils/ipc/server.py", line 142, in create_listener
    l = LinuxListener(address=address, authkey=authkey, backlog=backlog)
  File "/builddir/build/BUILD/calibre-4.12.0/src/calibre/utils/ipc/server.py", line 109, in __init__
    self._listener._unlink.cancel()
AttributeError: 'NoneType' object has no attribute 'cancel'
 !! Copr timeout => sending INT

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.9/fedora-rawhide-x86_64/01322481-calibre/

For all our attempts to build calibre with Python 3.9, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/package/calibre/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.9:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/

Let us know here if you have any questions.

Python 3.9 will be included in Fedora 33. To make that update smoother, we're building Fedora packages with early pre-releases of Python 3.9.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon.
We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Adam Williamson 2020-05-14 22:54:51 UTC
Can you please try again with 4.15.0 I just built in Rawhide? It fails in mock, but the error is different and may be mock-specific:

test_qt (calibre.test_build.BuildTest) ... [5749:5749:0514/135010.702617:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

Comment 2 Miro Hrončok 2020-05-14 23:07:41 UTC
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/package/calibre/ picked up your commit.

It failed. The error was:

ERROR: test_feedparser (calibre.test_build.BuildTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/calibre-4.15.0/src/calibre/test_build.py", line 322, in test_feedparser
    from calibre.web.feeds.feedparser import parse
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 982, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 925, in _find_spec
  File "/builddir/build/BUILD/calibre-4.15.0/src/calibre/startup.py", line 53, in find_spec
    m = import_module('feedparser')
  File "/usr/lib64/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3.9/site-packages/feedparser.py", line 93, in <module>
    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
AttributeError: module 'base64' has no attribute 'decodestring'


See https://docs.python.org/3.9/whatsnew/3.9.html#removed

"base64.encodestring() and base64.decodestring(), aliases deprecated since Python 3.1, have been removed: use base64.encodebytes() and base64.decodebytes() instead."

bz1807186

Comment 3 Adam Williamson 2020-05-15 16:01:08 UTC
so, progress!

Comment 4 Miro Hrončok 2020-05-15 16:13:38 UTC
Indeed, but bz1807186 remains unanswered.

Comment 5 Adam Williamson 2020-05-15 16:30:45 UTC
Not any more! I have less patience than you. :P