[packages/ceph] - updated to 18.2.4, added patches for gcc 14.x and re2 20240501

qboosh qboosh at pld-linux.org
Thu Sep 5 17:53:06 CEST 2024


commit 0f96c7a50332528f9ea7ec68ed85570da88ec5b3
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Thu Sep 5 17:26:48 2024 +0200

    - updated to 18.2.4, added patches for gcc 14.x and re2 20240501

 ceph-arrow-re2.patch |  11 +++
 ceph-gcc14-2.patch   | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++
 ceph-gcc14.patch     | 141 ++++++++++++++++++++++++++++
 ceph.spec            |  11 ++-
 4 files changed, 414 insertions(+), 2 deletions(-)
---
diff --git a/ceph.spec b/ceph.spec
index 3786055..5de3587 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -53,12 +53,12 @@
 Summary:	User space components of the Ceph file system
 Summary(pl.UTF-8):	Działające w przestrzeni użytkownika elementy systemu plików Ceph
 Name:		ceph
-Version:	18.2.3
+Version:	18.2.4
 Release:	1
 License:	LGPL v2.1 (libraries), GPL v2 (some programs)
 Group:		Base
 Source0:	http://download.ceph.com/tarballs/%{name}-%{version}.tar.gz
-# Source0-md5:	cfa96354e8cd5168c8c42ff9fafc49a4
+# Source0-md5:	28ab44c5c5a05786ec02b25ae5300b2b
 Source1:	ceph.sysconfig
 Source3:	ceph.tmpfiles
 Patch0:		%{name}-python.patch
@@ -81,6 +81,9 @@ Patch15:	%{name}-gcc12.patch
 # https://src.fedoraproject.org/rpms/ceph/blob/rawhide/f/0020-src-arrow-cpp-cmake_modules-ThirdpartyToolchain.cmake.patch
 Patch16:	%{name}-system-xsimd.patch
 Patch17:	boost1.81.patch
+Patch18:	%{name}-gcc14.patch
+Patch19:	%{name}-gcc14-2.patch
+Patch20:	%{name}-arrow-re2.patch
 URL:		https://ceph.io/
 %{?with_qatzip:BuildRequires:	QATzip-devel}
 %{?with_babeltrace:BuildRequires:	babeltrace-devel}
@@ -155,6 +158,7 @@ BuildRequires:	python3-modules >= 1:3.6.0
 %{?with_tests:BuildRequires:	python3-tox >= 2.9.1}
 BuildRequires:	rabbitmq-c-devel
 %{?with_seastar:BuildRequires:	ragel >= 6.10}
+BuildRequires:	re2-devel
 %{?with_system_rocksdb:BuildRequires:	rocksdb-devel >= 5.14}
 BuildRequires:	rpmbuild(macros) >= 2.021
 %{?with_qat:BuildRequires:	qatlib-devel}
@@ -357,6 +361,9 @@ uruchamiania demonów.
 %patch15 -p1
 %patch16 -p1
 %patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
 
 %{__sed} -i -e '1s,/usr/bin/env bash,/bin/bash,' \
 	src/{ceph-post-file.in,rbd-replay-many,rbdmap} \
diff --git a/ceph-arrow-re2.patch b/ceph-arrow-re2.patch
new file mode 100644
index 0000000..34d8053
--- /dev/null
+++ b/ceph-arrow-re2.patch
@@ -0,0 +1,11 @@
+--- ceph-18.2.4/src/arrow/cpp/src/arrow/compute/kernels/scalar_string.cc.orig	2021-11-10 03:04:48.000000000 +0100
++++ ceph-18.2.4/src/arrow/cpp/src/arrow/compute/kernels/scalar_string.cc	2024-09-04 19:26:35.961458373 +0200
+@@ -3012,7 +3012,7 @@ struct ExtractRegex : public ExtractRege
+         result->value.reserve(group_count);
+         for (int i = 0; i < group_count; i++) {
+           result->value.push_back(
+-              std::make_shared<ScalarType>(found_values[i].as_string()));
++              std::make_shared<ScalarType>(std::string(found_values[i])));
+         }
+         result->is_valid = true;
+       } else {
diff --git a/ceph-gcc14-2.patch b/ceph-gcc14-2.patch
new file mode 100644
index 0000000..334de92
--- /dev/null
+++ b/ceph-gcc14-2.patch
@@ -0,0 +1,253 @@
+From f9aea9105b6c1a8d7bff0ec0675f84f2ffb1db6f Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer at redhat.com>
+Date: Wed, 20 Dec 2023 14:16:19 +0100
+Subject: [PATCH 1/2] tracing: Fix C type errors in librados tracing
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes type errors like this:
+
+In file included from /usr/include/lttng/tracepoint-event.h:69,
+                 from …-build/include/tracing/librados.h:4143,
+                 from …/src/tracing/librados.c:6
+:
+…-build/include/tracing/librados.h:
+ In function ‘lttng_ust__event_probe__librados___rados_mon_command_exit’:
+…-build/include/tracing/librados.h:477:9: error: initialization of ‘size_t’ {aka ‘long unsigned int’} from ‘size_t *’ {aka ‘long unsigned int *’} makes integer from pointer without a cast
+  477 |         ceph_ctf_integerp(size_t, outslen, outslen)
+      |         ^~~~~~~~~~~~~~~~~
+
+GCC 14 will likely treat these type mismatches as an error
+and fail the build.
+
+Signed-off-by: Florian Weimer <fweimer at redhat.com>
+---
+ src/tracing/librados.tp      | 4 ++--
+ src/tracing/tracing-common.h | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/tracing/librados.tp b/src/tracing/librados.tp
+index 8b5e78ef15d65..8e116124b83d5 100644
+--- a/src/tracing/librados.tp
++++ b/src/tracing/librados.tp
+@@ -2628,7 +2628,7 @@ TRACEPOINT_EVENT(librados, rados_watch3_enter,
+     TP_FIELDS(
+         ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
+         ctf_string(oid, oid)
+-        ctf_integer_hex(uint64_t, phandle, phandle)
++        ctf_integer_hex(uint64_t*, phandle, phandle)
+         ctf_integer_hex(rados_watchcb2_t, callback, callback)
+         ctf_integer(uint32_t, timeout, timeout)
+         ctf_integer_hex(void*, arg, arg)
+@@ -2658,7 +2658,7 @@ TRACEPOINT_EVENT(librados, rados_aio_watch2_enter,
+         ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
+         ctf_string(oid, oid)
+         ctf_integer_hex(rados_completion_t, completion, completion)
+-        ctf_integer_hex(uint64_t, phandle, phandle)
++        ctf_integer_hex(uint64_t*, phandle, phandle)
+         ctf_integer_hex(rados_watchcb2_t, callback, callback)
+         ctf_integer(uint32_t, timeout, timeout)
+         ctf_integer_hex(void*, arg, arg)
+diff --git a/src/tracing/tracing-common.h b/src/tracing/tracing-common.h
+index 3e07f9de8e85c..03449ab588615 100644
+--- a/src/tracing/tracing-common.h
++++ b/src/tracing/tracing-common.h
+@@ -21,7 +21,7 @@
+ // type should be an integer type
+ // val should have type type*
+ #define ceph_ctf_integerp(type, field, val) \
+-    ctf_integer(type, field, (val) == NULL ? 0 : (val)) \
++    ctf_integer(type, field, (val) == NULL ? 0 : *(val)) \
+     ctf_integer(uint8_t, field##_isnull, (val) == NULL)
+ 
+ // val should have type char*
+
+From a49d154f4a8e493baf2296a15c7b5c56cd25e993 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer at redhat.com>
+Date: Wed, 20 Dec 2023 14:59:19 +0100
+Subject: [PATCH 2/2] pybind: Fix C type errors in Cython-generated Python
+ bindings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Several Ceph APIs use bool * types, which correspond to
+libcpp.bool * types in Cython.  The bint type has an incorrect
+size 4 and cannot be used as a replacement.
+
+This prevents a compilation failure with future compilers:
+
+…-build/src/pybind/rbd/rbd.c: In function ‘__pyx_pf_3rbd_3RBD_104namespace_exists’:
+…-build/src/pybind/rbd/rbd.c:42165:76: error: passing argument 3 of ‘rbd_namespace_exists’ from incompatible pointer type
+42165 |         __pyx_v_ret = rbd_namespace_exists(__pyx_v__ioctx, __pyx_v__name, (&__pyx_v__exists));
+      |                                                                           ~^~~~~~~~~~~~~~~~~
+      |                                                                            |
+      |                                                                            int *
+In file included from …-build/src/pybind/rbd/rbd.c:1268:
+…/src/include/rbd/librbd.h:1496:45: note: expected ‘_Bool *’ but argument is of type ‘int *’
+ 1496 |                                       bool *exists);
+      |                                             ^
+
+Signed-off-by: Florian Weimer <fweimer at redhat.com>
+---
+ src/pybind/rbd/c_rbd.pxd    | 5 +++--
+ src/pybind/rbd/mock_rbd.pxi | 9 +++++++--
+ src/pybind/rbd/rbd.pyx      | 9 +++++----
+ src/pybind/rgw/mock_rgw.pxi | 9 +++++++--
+ src/pybind/rgw/rgw.pyx      | 3 ++-
+ 5 files changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/src/pybind/rbd/c_rbd.pxd b/src/pybind/rbd/c_rbd.pxd
+index 885f7bd46abde..bda23bbc4735f 100644
+--- a/src/pybind/rbd/c_rbd.pxd
++++ b/src/pybind/rbd/c_rbd.pxd
+@@ -2,6 +2,7 @@
+ 
+ from libc.stdint cimport *
+ from ctime cimport time_t, timespec
++cimport libcpp
+ 
+ cdef extern from "rados/librados.h":
+     enum:
+@@ -525,7 +526,7 @@ cdef extern from "rbd/librbd.h" nogil:
+     int rbd_snap_unprotect(rbd_image_t image, const char *snap_name)
+     int rbd_snap_is_protected(rbd_image_t image, const char *snap_name,
+                               int *is_protected)
+-    int rbd_snap_exists(rbd_image_t image, const char *snapname, bint *exists)
++    int rbd_snap_exists(rbd_image_t image, const char *snapname, libcpp.bool *exists)
+     int rbd_snap_get_limit(rbd_image_t image, uint64_t *limit)
+     int rbd_snap_set_limit(rbd_image_t image, uint64_t limit)
+     int rbd_snap_get_timestamp(rbd_image_t image, uint64_t snap_id, timespec *timestamp)
+@@ -711,7 +712,7 @@ cdef extern from "rbd/librbd.h" nogil:
+     int rbd_namespace_list(rados_ioctx_t io, char *namespace_names,
+                            size_t *size)
+     int rbd_namespace_exists(rados_ioctx_t io, const char *namespace_name,
+-                             bint *exists)
++                             libcpp.bool *exists)
+ 
+     int rbd_pool_init(rados_ioctx_t, bint force)
+ 
+diff --git a/src/pybind/rbd/mock_rbd.pxi b/src/pybind/rbd/mock_rbd.pxi
+index 11872bd8146de..364f965fbad43 100644
+--- a/src/pybind/rbd/mock_rbd.pxi
++++ b/src/pybind/rbd/mock_rbd.pxi
+@@ -3,6 +3,11 @@
+ from libc.stdint cimport *
+ from ctime cimport time_t, timespec
+ 
++# Make the bool type available as libcpp.bool, for both C and C++.
++cimport libcpp
++cdef extern from "<stdbool.h>":
++    pass
++
+ cdef nogil:
+     enum:
+         _LIBRADOS_SNAP_HEAD "LIBRADOS_SNAP_HEAD"
+@@ -637,7 +642,7 @@ cdef nogil:
+     int rbd_snap_is_protected(rbd_image_t image, const char *snap_name,
+                               int *is_protected):
+         pass
+-    int rbd_snap_exists(rbd_image_t image, const char *snapname, bint *exists):
++    int rbd_snap_exists(rbd_image_t image, const char *snapname, libcpp.bool *exists):
+         pass
+     int rbd_snap_get_limit(rbd_image_t image, uint64_t *limit):
+         pass
+@@ -896,7 +901,7 @@ cdef nogil:
+                            size_t *size):
+         pass
+     int rbd_namespace_exists(rados_ioctx_t io, const char *namespace_name,
+-                             bint *exists):
++                             libcpp.bool *exists):
+         pass
+     int rbd_pool_init(rados_ioctx_t io, bint force):
+         pass
+diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx
+index fcb2fb3470600..f59ba23f0fe21 100644
+--- a/src/pybind/rbd/rbd.pyx
++++ b/src/pybind/rbd/rbd.pyx
+@@ -23,6 +23,7 @@ from libc cimport errno
+ from libc.stdint cimport *
+ from libc.stdlib cimport malloc, realloc, free
+ from libc.string cimport strdup, memset
++cimport libcpp
+ 
+ try:
+     from collections.abc import Iterable
+@@ -1935,12 +1936,12 @@ class RBD(object):
+         cdef:
+             rados_ioctx_t _ioctx = convert_ioctx(ioctx)
+             const char *_name = name
+-            bint _exists = False
++            libcpp.bool _exists = False
+         with nogil:
+             ret = rbd_namespace_exists(_ioctx, _name, &_exists)
+         if ret != 0:
+             raise make_ex(ret, 'error verifying namespace')
+-        return bool(_exists != 0)
++        return _exists
+ 
+     def namespace_list(self, ioctx):
+         """
+@@ -3679,12 +3680,12 @@ cdef class Image(object):
+         name = cstr(name, 'name')
+         cdef:
+             char *_name = name
+-            bint _exists = False
++            libcpp.bool _exists = False
+         with nogil:
+             ret = rbd_snap_exists(self.image, _name, &_exists)
+         if ret != 0:
+             raise make_ex(ret, 'error getting snapshot exists for %s' % self.name)
+-        return bool(_exists != 0)
++        return _exists
+ 
+     @requires_not_closed
+     def get_snap_limit(self):
+diff --git a/src/pybind/rgw/mock_rgw.pxi b/src/pybind/rgw/mock_rgw.pxi
+index ca893a5bb8a16..806d4df75de05 100644
+--- a/src/pybind/rgw/mock_rgw.pxi
++++ b/src/pybind/rgw/mock_rgw.pxi
+@@ -1,5 +1,10 @@
+ # cython: embedsignature=True
+ 
++# Make the bool type available as libcpp.bool, for both C and C++.
++cimport libcpp
++cdef extern from "<stdbool.h>":
++    pass
++
+ cdef nogil:
+     ctypedef void* librgw_t
+ 
+@@ -111,8 +116,8 @@ cdef nogil:
+ 
+     int rgw_readdir(rgw_fs *fs,
+                     rgw_file_handle *parent_fh, uint64_t *offset,
+-                    bint (*cb)(const char *name, void *arg, uint64_t offset, stat *st, uint32_t st_mask, uint32_t flags) nogil except? -9000,
+-                    void *cb_arg, bint *eof, uint32_t flags) except? -9000:
++                    libcpp.bool (*cb)(const char *name, void *arg, uint64_t offset, stat *st, uint32_t st_mask, uint32_t flags) nogil except? -9000,
++                    void *cb_arg, libcpp.bool *eof, uint32_t flags) except? -9000:
+         pass
+ 
+     int rgw_getattr(rgw_fs *fs,
+diff --git a/src/pybind/rgw/rgw.pyx b/src/pybind/rgw/rgw.pyx
+index 9bbcdfff586a8..d210a70bbb8e3 100644
+--- a/src/pybind/rgw/rgw.pyx
++++ b/src/pybind/rgw/rgw.pyx
+@@ -7,6 +7,7 @@ from cpython cimport PyObject, ref, exc, array
+ from libc.stdint cimport *
+ from libc.stdlib cimport malloc, realloc, free
+ from cstat cimport stat
++cimport libcpp
+ 
+ IF BUILD_DOC:
+     include "mock_rgw.pxi"
+@@ -373,7 +374,7 @@ cdef class LibRGWFS(object):
+         cdef:
+             rgw_file_handle *_dir_handler = <rgw_file_handle*>dir_handler.handler
+             uint64_t _offset = offset
+-            bint _eof
++            libcpp.bool _eof
+             uint32_t _flags = flags
+         with nogil:
+             ret = rgw_readdir(self.fs, _dir_handler, &_offset, &readdir_cb,
diff --git a/ceph-gcc14.patch b/ceph-gcc14.patch
new file mode 100644
index 0000000..129f50e
--- /dev/null
+++ b/ceph-gcc14.patch
@@ -0,0 +1,141 @@
+From 0eace4ea9ea42412d4d6a16d24a8660642e41173 Mon Sep 17 00:00:00 2001
+From: Radoslaw Zarzynski <rzarzyns at redhat.com>
+Date: Wed, 24 Jan 2024 17:22:44 +0000
+Subject: [PATCH] common/dout: fix FTBFS on GCC 14
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The following problem has been reported by Kaleb Keithley:
+
+```
+/builddir/build/BUILD/ceph-18.2.1/src/osd/osd_types.h: In lambda function:
+/builddir/build/BUILD/ceph-18.2.1/src/common/dout.h:184:73: error: call to non-‘constexpr’ function ‘virtual unsigned int DoutPrefixProvider::get_subsys() const’
+  184 |     dout_impl(pdpp->get_cct(), ceph::dout::need_dynamic(pdpp->get_subsys()), v) \
+      |                                                         ~~~~~~~~~~~~~~~~^~
+/builddir/build/BUILD/ceph-18.2.1/src/common/dout.h:155:58: note: in definition of macro ‘dout_impl’
+  155 |       return (cctX->_conf->subsys.template should_gather<sub, v>());    \
+      |                                                          ^~~
+/builddir/build/BUILD/ceph-18.2.1/src/osd/osd_types.h:3617:3: note: in expansion of macro ‘ldpp_dout’
+ 3617 |   ldpp_dout(dpp, 10) << "build_prior all_probe " << all_probe << dendl;
+      |   ^~~~~~~~~
+```
+
+For details of the problem and the idea behind the fix,
+please refer to the comment this commit brings to `dout.h`.
+
+The minimized replicator that the facilitated Goldbot-based
+investigation:
+
+```cpp
+namespace ceph::dout {
+
+template<typename T>
+struct dynamic_marker_t {
+  T value;
+  // constexpr ctor isn't needed as it's an aggregate type
+  constexpr operator T() const { return value; }
+};
+
+template<typename T>
+constexpr dynamic_marker_t<T> need_dynamic(T&& t) {
+  return dynamic_marker_t<T>{ std::forward<T>(t) };
+}
+
+template<typename T>
+struct is_dynamic : public std::false_type {};
+
+template<typename T>
+struct is_dynamic<dynamic_marker_t<T>> : public std::true_type {};
+
+} // ceph::dout
+
+struct subsys_t {
+  template <unsigned SubV, int LvlV>
+  bool should_gather() const {
+    return true;
+  }
+  bool should_gather(const unsigned sub, int level) const {
+    return false;
+  }
+};
+
+static subsys_t subsys;
+
+  do {                                                                  \
+  const bool should_gather = [&](const auto cctX) {                     \
+    if constexpr (ceph::dout::is_dynamic<decltype(sub)>::value ||       \
+                  ceph::dout::is_dynamic<decltype(v)>::value) {         \
+      std::cout << "the dynamic path" << std::endl;                     \
+      return subsys.should_gather(sub, v);                              \
+    } else {                                                            \
+      /* The parentheses are **essential** because commas in angle      \
+       * brackets are NOT ignored on macro expansion! A language's      \
+       * limitation, sorry. */                                          \
+      std::cout << "the static path" << std::endl;                      \
+      /*return subsys.should_gather(sub, v);*/                              \
+      return (subsys.template should_gather<sub, v>());             \
+    }                                                                   \
+  }(cct);                                                               \
+  } while (0)
+
+  if (decltype(auto) pdpp = (dpp); pdpp) /* workaround -Wnonnull-compare for 'this' */ \
+    dout_impl(42, sub, v)
+
+  if (decltype(auto) pdpp = (dpp); pdpp) /* workaround -Wnonnull-compare for 'this' */ \
+    dout_impl(42, ceph::dout::need_dynamic(42), v)
+
+int main() {
+    std::random_device dev;
+    std::mt19937 rng(dev());
+    std::uniform_int_distribution<std::mt19937::result_type> dist6(1,6); // distribution in range [1, 6]
+
+    int sub = dist6(rng);
+    ldpp_dout("mocked out", sub);
+    //ldpp_subdout("mocked out", 4, 3);
+}
+```
+
+Fixes: https://tracker.ceph.com/issues/64050
+Signed-off-by: Radoslaw Zarzynski <rzarzyns at redhat.com>
+---
+ src/common/dout.h | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/src/common/dout.h b/src/common/dout.h
+index 4cd60efff8fef..6516060c5438e 100644
+--- a/src/common/dout.h
++++ b/src/common/dout.h
+@@ -144,17 +144,27 @@ struct is_dynamic<dynamic_marker_t<T>> : public std::true_type {};
+ #else
+ #define dout_impl(cct, sub, v)						\
+   do {									\
+-  const bool should_gather = [&](const auto cctX) {			\
+-    if constexpr (ceph::dout::is_dynamic<decltype(sub)>::value ||	\
+-		  ceph::dout::is_dynamic<decltype(v)>::value) {		\
++  const bool should_gather = [&](const auto cctX, auto sub_, auto v_) {	\
++    /* The check is performed on `sub_` and `v_` to leverage the C++'s 	\
++     * guarantee on _discarding_ one of blocks of `if constexpr`, which	\
++     * includes also the checks for ill-formed code (`should_gather<>`	\
++     * must not be feed with non-const expresions), BUT ONLY within	\
++     * a template (thus the generic lambda) and under the restriction	\
++     * it's dependant on a parameter of this template).			\
++     * GCC prior to v14 was not enforcing these restrictions. */	\
++    if constexpr (ceph::dout::is_dynamic<decltype(sub_)>::value ||	\
++		  ceph::dout::is_dynamic<decltype(v_)>::value) {	\
+       return cctX->_conf->subsys.should_gather(sub, v);			\
+     } else {								\
++      constexpr auto sub_helper = static_cast<decltype(sub_)>(sub);	\
++      constexpr auto v_helper = static_cast<decltype(v_)>(v);		\
+       /* The parentheses are **essential** because commas in angle	\
+        * brackets are NOT ignored on macro expansion! A language's	\
+        * limitation, sorry. */						\
+-      return (cctX->_conf->subsys.template should_gather<sub, v>());	\
++      return (cctX->_conf->subsys.template should_gather<sub_helper,	\
++							 v_helper>());	\
+     }									\
+-  }(cct);								\
++  }(cct, sub, v);							\
+ 									\
+   if (should_gather) {							\
+     ceph::logging::MutableEntry _dout_e(v, sub);                        \
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/ceph.git/commitdiff/0f96c7a50332528f9ea7ec68ed85570da88ec5b3



More information about the pld-cvs-commit mailing list