Project

General

Profile

Bug #62140

Updated by Kefu Chai 9 months ago

Fedora rawhide (a.k.a. f39) has updated Cython to Cython-3 (from Cython-0.29) 

 Builds now fail with the following errors: 
 <pre> 
 

 ... 
 cd /builddir/build/BUILD/ceph-18.1.2/src/pybind/rbd && env CC="/usr/bin/gcc" CFLAGS="" CPPFLAGS="-iquote/builddir/build/BUILD/ceph-18.1.2/src/include -w -D'void0=dead_function(void)' -D'__Pyx_check_single_interpreter(ARG)=ARG##0'" CXX="/usr/bin/g++" LDSHARED="/usr/bin/gcc -shared" OPT="-DNDEBUG -g -fwrapv -O2 -w" LDFLAGS=-L/builddir/build/BUILD/ceph-18.1.2/redhat-linux-build/lib CYTHON_BUILD_DIR=/builddir/build/BUILD/ceph-18.1.2/redhat-linux-build/src/pybind/rbd CEPH_LIBDIR=/builddir/build/BUILD/ceph-18.1.2/redhat-linux-build/lib /usr/bin/python3.12 /builddir/build/BUILD/ceph-18.1.2/src/pybind/rbd/setup.py build --build-base /builddir/build/BUILD/ceph-18.1.2/redhat-linux-build/lib/cython_modules --build-platlib /builddir/build/BUILD/ceph-18.1.2/redhat-linux-build/lib/cython_modules/lib.3 
 /builddir/build/BUILD/ceph-18.1.2/src/pybind/rbd/setup.py:8: DeprecationWarning: 'pkgutil.find_loader' is deprecated and slated for removal in Python 3.14; use importlib.util.find_spec() instead 
   if not pkgutil.find_loader('setuptools'): 
 warning: rbd.pyx:36:0: The 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310 
 warning: rbd.pyx:361:0: The 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310 
 warning: c_rbd.pxd:596:48: The keyword 'nogil' should appear at the end of the function signature line. Placing it before 'except' or 'noexcept' will be disallowed in a future version of Cython. 
 warning: ../rados/rados.pxd:7:0: The 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         name = cstr(name, 'name') 
         cdef: 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_name = name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:760:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_name = name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:763:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         image_id = cstr(image_id, 'image_id') 
         cdef: 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_id = image_id 
             int _force = force 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:868:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
             char *_image_id = image_id 
             int _force = force 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:871:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         image_name = cstr(image_name, 'image_name') 
         cdef: 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1097:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1100:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         image_name = cstr(image_name, 'image_name') 
         cdef: 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1124:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1127:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         image_name = cstr(image_name, 'image_name') 
         cdef: 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1151:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
             rados_ioctx_t _ioctx = convert_ioctx(ioctx) 
             char *_image_name = image_name 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:1154:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         cdef: 
             rbd_completion_t completion 
             PyObject* p_completion_obj= <PyObject*>completion_obj 
         with nogil: 
             ret = rbd_aio_create_completion(p_completion_obj, __aio_complete_cb, 
                                                               ^ 
 ------------------------------------------------------------ 
 rbd.pyx:2927:62: Cannot assign type 'void (rbd_completion_t, void *) except * nogil' to 'rbd_callback_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         if not allow_shrink and old_size > size: 
             raise InvalidArgument("error allow_shrink is False but old_size > new_size") 
         cdef: 
             uint64_t _size = size 
             bint _allow_shrink = allow_shrink 
             librbd_progress_fn_t prog_cb = &no_op_progress_callback 
                                            ^ 
 ------------------------------------------------------------ 
 rbd.pyx:3007:43: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         name = cstr(name, 'name') 
         cdef: 
             char *_name = name 
             uint32_t _flags = flags 
             librbd_progress_fn_t prog_cb = &no_op_progress_callback 
                                            ^ 
 ------------------------------------------------------------ 
 rbd.pyx:3511:43: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         name = cstr(name, 'name') 
         cdef: 
             char *_name = name 
             uint32_t _flags = flags 
             librbd_progress_fn_t prog_cb = &no_op_progress_callback 
                                            ^ 
 ------------------------------------------------------------ 
 rbd.pyx:3570:43: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         Flatten clone image (copy all blocks from parent to child) 
         :param on_progress: optional progress callback function 
         :type on_progress: callback function 
         """ 
         cdef: 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:4085:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
         """ 
         cdef: 
             librbd_progress_fn_t _prog_cb = &no_op_progress_callback 
             void *_prog_arg = NULL 
         if on_progress: 
             _prog_cb = &progress_callback 
                        ^ 
 ------------------------------------------------------------ 
 rbd.pyx:4088:23: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Error compiling Cython file: 
 ------------------------------------------------------------ 
 ... 
     @requires_not_closed 
     def rebuild_object_map(self): 
         """ 
         Rebuild the object map for the image HEAD or currently set snapshot 
         """ 
         cdef librbd_progress_fn_t prog_cb = &no_op_progress_callback 
                                             ^ 
 ------------------------------------------------------------ 
 rbd.pyx:4112:44: Cannot assign type 'int (*)(uint64_t, uint64_t, void *) except -1' to 'librbd_progress_fn_t' 
 Compiling rbd.pyx because it changed. 
 [1/1] Cythonizing rbd.pyx 
 Traceback (most recent call last): 
   File "/builddir/build/BUILD/ceph-18.1.2/src/pybind/rbd/setup.py", line 192, in <module> 
     ext_modules=cythonize( 
                 ^^^^^^^^^^ 
   File "/usr/lib64/python3.12/site-packages/Cython/Build/Dependencies.py", line 1134, in cythonize 
     cythonize_one(*args) 
   File "/usr/lib64/python3.12/site-packages/Cython/Build/Dependencies.py", line 1301, in cythonize_one 
     raise CompileError(None, pyx_file) 
 Cython.Compiler.Errors.CompileError: rbd.pyx 
 ... 

 </pre> 

 full log at https://kojipkgs.fedoraproject.org//work/tasks/4604/103744604/build.log for a limited amount of time.    Note the warnings too. 

 I used the following patch: 
 <pre><code class="diff"> 
 --- ceph-18.1.2/src/pybind/rbd/rbd.pyx.orig 	 2023-07-21 13:30:08.156825317 -0400 
 +++ ceph-18.1.2/src/pybind/rbd/rbd.pyx 	 2023-07-24 09:09:27.930137117 -0400 
 @@ -371,10 +371,10 @@ 
      cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL: 
          return <rados_ioctx_t>ioctx.io 
 
 -cdef int progress_callback(uint64_t offset, uint64_t total, void* ptr) with gil: 
 +cdef int progress_callback(uint64_t offset, uint64_t total, void* ptr) noexcept with gil: 
      return (<object>ptr)(offset, total) 
 
 -cdef int no_op_progress_callback(uint64_t offset, uint64_t total, void* ptr): 
 +cdef int no_op_progress_callback(uint64_t offset, uint64_t total, void* ptr) noexcept with gil: 
      return 0 
 
  def cstr(val, name, encoding="utf-8", opt=False): 
 @@ -426,7 +426,7 @@ 
 
  cdef class Completion 
 
 -cdef void __aio_complete_cb(rbd_completion_t completion, void *args) with gil: 
 +cdef void __aio_complete_cb(rbd_completion_t completion, void *args) noexcept with gil: 
      """ 
      Callback to oncomplete() for asynchronous operations 
      """ 
 </code></pre>

Back