Compare commits
98 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c5598efe8 | |||
| 8fa2f6e626 | |||
| 3a3173ee12 | |||
| 0ceeb07f51 | |||
| df9f29a42f | |||
| 7a652c7616 | |||
| d26f7d1015 | |||
| 48feed4a4d | |||
| cf2bdd5f8e | |||
| 39ab64deb9 | |||
| 73999fa1c0 | |||
| 20f3025d76 | |||
| ca9114cab0 | |||
| 3fddb94cca | |||
| b65611de9e | |||
| 059dc66b73 | |||
| 65f3783e6b | |||
| b7390cc379 | |||
| 12e10018d3 | |||
| 3816c2c84c | |||
| d412b12357 | |||
| 0e004b5c4d | |||
| e734c59205 | |||
| eb50428bb2 | |||
| ff96b156de | |||
| a71490735f | |||
| bae6b119a3 | |||
| 3d257c9866 | |||
| 10c2ce06df | |||
| 675842896e | |||
| b383e9871a | |||
| ed9eb44736 | |||
| 09ccc8e9b9 | |||
| be4504721e | |||
| 462b6371a8 | |||
| 73fbd52cf0 | |||
| 76311ff73d | |||
| 7777c12922 | |||
| 7b02812bfa | |||
| f30547975e | |||
| 71415e347c | |||
| ab3a611b40 | |||
| 3e62f6732f | |||
| 79153d6480 | |||
| 523d1206e6 | |||
| 74fb57d14d | |||
| 72afc44846 | |||
| 709057efd7 | |||
| e2f83f0159 | |||
| 84c56bc5b9 | |||
| 051c60d292 | |||
| cd9775de83 | |||
| bf3e97a4bf | |||
| 10008f4d4d | |||
| 9a53ef8bfc | |||
| 2126a0838a | |||
| b6da7b6869 | |||
| 211fde613e | |||
| 0355ace5e2 | |||
| 8b27c56f29 | |||
| 4751d59373 | |||
| cb9e33d375 | |||
| ef563fd8d7 | |||
| 396c7768f7 | |||
| 7782c6b1de | |||
| 777309ac00 | |||
| 9e8f3de90d | |||
| b2198c3560 | |||
| b4f3e5cd1b | |||
| 4d7d8d4f06 | |||
| 9fe6d8aff6 | |||
| 542aea1c02 | |||
| 5b30d830a7 | |||
| 57f6aa766d | |||
| d890f19b59 | |||
| 3cf60da63e | |||
| 1617d904e2 | |||
| e75c15b5e1 | |||
| a5f57bdda7 | |||
| d43cb58ea8 | |||
| 77b4049f20 | |||
| 6760483703 | |||
| 6f7af637e0 | |||
| 04cb11136d | |||
| dfb67a0a2d | |||
| 8c24c6966e | |||
| 0707993c6f | |||
| 7b9e357bb6 | |||
| 5487589f86 | |||
| 4dc6f31337 | |||
| b1b1f3dfe5 | |||
| af927eceb5 | |||
| c302acab65 | |||
| fdf49fe866 | |||
| 9d891cfd36 | |||
| d17727fb4b | |||
| d95a6a107c | |||
| b34a342a82 |
@@ -1,11 +0,0 @@
|
||||
--- ceph-16.1.0-43-g6b74fb5c/cmake/modules/Finduring.cmake.orig 2021-02-01 08:45:39.316108287 -0500
|
||||
+++ ceph-16.1.0-43-g6b74fb5c/cmake/modules/Finduring.cmake 2021-02-01 08:45:59.813665378 -0500
|
||||
@@ -5,7 +5,7 @@
|
||||
# uring_FOUND - True if uring found.
|
||||
|
||||
find_path(URING_INCLUDE_DIR liburing.h)
|
||||
-find_library(URING_LIBRARIES liburing.a liburing)
|
||||
+find_library(URING_LIBRARIES liburing.so liburing)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(uring DEFAULT_MSG URING_LIBRARIES URING_INCLUDE_DIR)
|
||||
@@ -1,42 +0,0 @@
|
||||
--- ceph-16.2.7/src/common/LogEntry.cc.orig 2022-01-17 13:52:10.799134159 -0500
|
||||
+++ ceph-16.2.7/src/common/LogEntry.cc 2022-01-17 13:52:47.244469274 -0500
|
||||
@@ -183,7 +183,7 @@
|
||||
return "crit";
|
||||
default:
|
||||
ceph_abort();
|
||||
- return 0;
|
||||
+ return "";
|
||||
}
|
||||
}
|
||||
|
||||
--- ceph-16.2.7/src/test/librados/tier_cxx.cc.orig 2022-01-19 09:30:47.209459506 -0500
|
||||
+++ ceph-16.2.7/src/test/librados/tier_cxx.cc 2022-01-19 10:02:47.783240298 -0500
|
||||
@@ -120,7 +120,7 @@
|
||||
}
|
||||
|
||||
void check_fp_oid_refcount(librados::IoCtx& ioctx, std::string foid, uint64_t count,
|
||||
- std::string fp_algo = NULL)
|
||||
+ std::string fp_algo = "")
|
||||
{
|
||||
bufferlist t;
|
||||
int size = foid.length();
|
||||
@@ -148,7 +148,7 @@
|
||||
ASSERT_LE(count, refs.count());
|
||||
}
|
||||
|
||||
-string get_fp_oid(string oid, std::string fp_algo = NULL)
|
||||
+string get_fp_oid(string oid, std::string fp_algo = "")
|
||||
{
|
||||
if (fp_algo == "sha1") {
|
||||
unsigned char fingerprint[CEPH_CRYPTO_SHA1_DIGESTSIZE + 1];
|
||||
--- ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h.orig 2022-02-11 17:21:40.268627997 -0500
|
||||
+++ ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h 2022-02-11 17:21:57.155325437 -0500
|
||||
@@ -466,7 +466,7 @@
|
||||
|
||||
std::string print(int ident) override
|
||||
{
|
||||
- return std::string(0);
|
||||
+ return std::string("");
|
||||
}
|
||||
|
||||
void push_argument(base_statement* arg)
|
||||
@@ -1,11 +0,0 @@
|
||||
--- ceph-17.1.0-175-g086c8f84/src/arrow/cpp/cmake_modules/ThirdpartyToolchain.cmake.orig 2022-04-08 11:27:53.593570634 -0400
|
||||
+++ ceph-17.1.0-175-g086c8f84/src/arrow/cpp/cmake_modules/ThirdpartyToolchain.cmake 2022-04-08 11:28:20.778087653 -0400
|
||||
@@ -1991,7 +1991,7 @@
|
||||
|
||||
if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL STREQUAL "NONE"
|
||||
))
|
||||
- set(xsimd_SOURCE "BUNDLED")
|
||||
+ set(xsimd_SOURCE "SYSTEM")
|
||||
resolve_dependency(xsimd)
|
||||
# TODO: Don't use global includes but rather target_include_directories
|
||||
include_directories(SYSTEM ${XSIMD_INCLUDE_DIR})
|
||||
@@ -1,32 +0,0 @@
|
||||
--- ceph-18.0.0-1810-g728e8ac0/src/osd/scrubber/scrub_backend.h.orig 2023-01-18 16:35:03.398700052 -0500
|
||||
+++ ceph-18.0.0-1810-g728e8ac0/src/osd/scrubber/scrub_backend.h 2023-01-18 16:37:55.882677965 -0500
|
||||
@@ -183,20 +183,20 @@
|
||||
// note: 'if' chain, as hard to consistently (on all compilers) avoid some
|
||||
// warnings for a switch plus multiple return paths
|
||||
if (as_auth.possible_auth == shard_as_auth_t::usable_t::not_usable) {
|
||||
- return format_to(ctx.out(),
|
||||
- "{{shard-not-usable:{}}}",
|
||||
- as_auth.error_text);
|
||||
+ return fmt::format_to(ctx.out(),
|
||||
+ "{{shard-not-usable:{}}}",
|
||||
+ as_auth.error_text.c_str());
|
||||
}
|
||||
if (as_auth.possible_auth == shard_as_auth_t::usable_t::not_found) {
|
||||
- return format_to(ctx.out(), "{{shard-not-found}}");
|
||||
+ return fmt::format_to(ctx.out(), "{{shard-not-found}}");
|
||||
}
|
||||
- return format_to(ctx.out(),
|
||||
- "{{shard-usable: soid:{} {{txt:{}}} }}",
|
||||
- as_auth.oi.soid,
|
||||
- as_auth.error_text);
|
||||
+ return fmt::format_to(ctx.out(),
|
||||
+ "{{shard-usable: soid:{} {{txt:{}}} }}",
|
||||
+ as_auth.oi.soid,
|
||||
+ as_auth.error_text.c_str());
|
||||
|
||||
} else {
|
||||
- return format_to(
|
||||
+ return fmt::format_to(
|
||||
ctx.out(),
|
||||
"usable:{} soid:{} {{txt:{}}}",
|
||||
(as_auth.possible_auth == shard_as_auth_t::usable_t::usable) ? "yes"
|
||||
@@ -1,199 +0,0 @@
|
||||
--- ceph-18.0.0-2148-g9754cafc/src/osd/scrubber/scrub_backend.cc.orig 2023-02-08 16:01:53.800709761 -0500
|
||||
+++ ceph-18.0.0-2148-g9754cafc/src/osd/scrubber/scrub_backend.cc 2023-02-11 05:06:14.954254050 -0500
|
||||
@@ -507,11 +507,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
- dout(10) << fmt::format("{}: selecting osd {} for obj {} with oi {}",
|
||||
+ dout(10) << fmt::format("{}: selecting osd {} for obj {} with oi {:p}",
|
||||
__func__,
|
||||
ret_auth.auth_shard,
|
||||
ho,
|
||||
- ret_auth.auth_oi)
|
||||
+ (void*)&ret_auth.auth_oi)
|
||||
<< dendl;
|
||||
|
||||
return ret_auth;
|
||||
@@ -1171,23 +1171,23 @@
|
||||
|
||||
if (auth.digest_present && candidate.digest_present &&
|
||||
auth.digest != candidate.digest) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "data_digest {:#x} != data_digest {:#x} from shard {}",
|
||||
- candidate.digest,
|
||||
- auth.digest,
|
||||
- auth_shard);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "data_digest {:#x} != data_digest {:#x} from shard {}",
|
||||
+ candidate.digest,
|
||||
+ auth.digest,
|
||||
+ auth_shard);
|
||||
error = true;
|
||||
obj_result.set_data_digest_mismatch();
|
||||
}
|
||||
|
||||
if (auth.omap_digest_present && candidate.omap_digest_present &&
|
||||
auth.omap_digest != candidate.omap_digest) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}omap_digest {:#x} != omap_digest {:#x} from shard {}",
|
||||
- sep(error),
|
||||
- candidate.omap_digest,
|
||||
- auth.omap_digest,
|
||||
- auth_shard);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}omap_digest {:#x} != omap_digest {:#x} from shard {}",
|
||||
+ sep(error),
|
||||
+ candidate.omap_digest,
|
||||
+ auth.omap_digest,
|
||||
+ auth_shard);
|
||||
obj_result.set_omap_digest_mismatch();
|
||||
}
|
||||
|
||||
@@ -1195,24 +1195,24 @@
|
||||
if (m_is_replicated) {
|
||||
if (auth_oi.is_data_digest() && candidate.digest_present &&
|
||||
auth_oi.data_digest != candidate.digest) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}data_digest {:#x} != data_digest {:#x} from auth oi {}",
|
||||
- sep(error),
|
||||
- candidate.digest,
|
||||
- auth_oi.data_digest,
|
||||
- auth_oi);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}data_digest {:#x} != data_digest {:#x} from auth oi {:p}",
|
||||
+ sep(error),
|
||||
+ candidate.digest,
|
||||
+ auth_oi.data_digest,
|
||||
+ (void*)&auth_oi);
|
||||
shard_result.set_data_digest_mismatch_info();
|
||||
}
|
||||
|
||||
// for replicated:
|
||||
if (auth_oi.is_omap_digest() && candidate.omap_digest_present &&
|
||||
auth_oi.omap_digest != candidate.omap_digest) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}omap_digest {:#x} != omap_digest {:#x} from auth oi {}",
|
||||
- sep(error),
|
||||
- candidate.omap_digest,
|
||||
- auth_oi.omap_digest,
|
||||
- auth_oi);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}omap_digest {:#x} != omap_digest {:#x} from auth oi {:p}",
|
||||
+ sep(error),
|
||||
+ candidate.omap_digest,
|
||||
+ auth_oi.omap_digest,
|
||||
+ (void*)&auth_oi);
|
||||
shard_result.set_omap_digest_mismatch_info();
|
||||
}
|
||||
}
|
||||
@@ -1241,7 +1241,7 @@
|
||||
auth_bl.push_back(auth_attr->second);
|
||||
|
||||
if (!can_bl.contents_equal(auth_bl)) {
|
||||
- format_to(std::back_inserter(out), "{}object info inconsistent ", sep(error));
|
||||
+ fmt::format_to(std::back_inserter(out), "{}object info inconsistent ", sep(error));
|
||||
obj_result.set_object_info_inconsistency();
|
||||
}
|
||||
}
|
||||
@@ -1261,7 +1261,7 @@
|
||||
auth_bl.push_back(auth_attr->second);
|
||||
|
||||
if (!can_bl.contents_equal(auth_bl)) {
|
||||
- format_to(std::back_inserter(out), "{}snapset inconsistent ", sep(error));
|
||||
+ fmt::format_to(std::back_inserter(out), "{}snapset inconsistent ", sep(error));
|
||||
obj_result.set_snapset_inconsistency();
|
||||
}
|
||||
}
|
||||
@@ -1284,7 +1284,7 @@
|
||||
auth_bl.push_back(auth_hi->second);
|
||||
|
||||
if (!can_bl.contents_equal(auth_bl)) {
|
||||
- format_to(std::back_inserter(out), "{}hinfo inconsistent ", sep(error));
|
||||
+ fmt::format_to(std::back_inserter(out), "{}hinfo inconsistent ", sep(error));
|
||||
obj_result.set_hinfo_inconsistency();
|
||||
}
|
||||
}
|
||||
@@ -1296,22 +1296,22 @@
|
||||
|
||||
uint64_t oi_size = logical_to_ondisk_size(auth_oi.size);
|
||||
if (oi_size != candidate.size) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}size {} != size {} from auth oi {}",
|
||||
- sep(error),
|
||||
- candidate.size,
|
||||
- oi_size,
|
||||
- auth_oi);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}size {} != size {} from auth oi {:p}",
|
||||
+ sep(error),
|
||||
+ candidate.size,
|
||||
+ oi_size,
|
||||
+ (void*)&auth_oi);
|
||||
shard_result.set_size_mismatch_info();
|
||||
}
|
||||
|
||||
if (auth.size != candidate.size) {
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}size {} != size {} from shard {}",
|
||||
- sep(error),
|
||||
- candidate.size,
|
||||
- auth.size,
|
||||
- auth_shard);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}size {} != size {} from shard {}",
|
||||
+ sep(error),
|
||||
+ candidate.size,
|
||||
+ auth.size,
|
||||
+ auth_shard);
|
||||
obj_result.set_size_mismatch();
|
||||
}
|
||||
|
||||
@@ -1320,11 +1320,11 @@
|
||||
if (candidate.size > m_conf->osd_max_object_size &&
|
||||
!obj_result.has_size_too_large()) {
|
||||
|
||||
- format_to(std::back_inserter(out),
|
||||
- "{}size {} > {} is too large",
|
||||
- sep(error),
|
||||
- candidate.size,
|
||||
- m_conf->osd_max_object_size);
|
||||
+ fmt::format_to(std::back_inserter(out),
|
||||
+ "{}size {} > {} is too large",
|
||||
+ sep(error),
|
||||
+ candidate.size,
|
||||
+ m_conf->osd_max_object_size);
|
||||
obj_result.set_size_too_large();
|
||||
}
|
||||
|
||||
@@ -1340,10 +1340,10 @@
|
||||
|
||||
auto cand = candidate.attrs.find(k);
|
||||
if (cand == candidate.attrs.end()) {
|
||||
- format_to(std::back_inserter(out), "{}attr name mismatch '{}'", sep(error), k);
|
||||
+ fmt::format_to(std::back_inserter(out), "{}attr name mismatch '{}'", sep(error), k);
|
||||
obj_result.set_attr_name_mismatch();
|
||||
} else if (cand->second.cmp(v)) {
|
||||
- format_to(std::back_inserter(out), "{}attr value mismatch '{}'", sep(error), k);
|
||||
+ fmt::format_to(std::back_inserter(out), "{}attr value mismatch '{}'", sep(error), k);
|
||||
obj_result.set_attr_value_mismatch();
|
||||
}
|
||||
}
|
||||
@@ -1356,7 +1356,7 @@
|
||||
|
||||
auto in_auth = auth.attrs.find(k);
|
||||
if (in_auth == auth.attrs.end()) {
|
||||
- format_to(std::back_inserter(out), "{}attr name mismatch '{}'", sep(error), k);
|
||||
+ fmt::format_to(std::back_inserter(out), "{}attr name mismatch '{}'", sep(error), k);
|
||||
obj_result.set_attr_name_mismatch();
|
||||
}
|
||||
}
|
||||
@@ -1823,8 +1823,7 @@
|
||||
SnapMapReaderI& snaps_getter)
|
||||
{
|
||||
using result_t = Scrub::SnapMapReaderI::result_t;
|
||||
- dout(15) << fmt::format("{}: obj:{} snapset:{}", __func__, hoid, snapset)
|
||||
- << dendl;
|
||||
+ // dout(15) << fmt::format("{}: obj:{} snapset:{}", __func__, hoid, snapset) << dendl;
|
||||
|
||||
auto p = snapset.clone_snaps.find(hoid.snap);
|
||||
if (p == snapset.clone_snaps.end()) {
|
||||
@@ -1,151 +0,0 @@
|
||||
--- ceph-17.2.6/src/kv/rocksdb_cache/ShardedCache.h.orig 2023-04-05 11:09:51.000000000 -0400
|
||||
+++ ceph-17.2.6/src/kv/rocksdb_cache/ShardedCache.h 2023-04-21 16:22:26.665067333 -0400
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <mutex>
|
||||
|
||||
#include "rocksdb/version.h"
|
||||
-#include "rocksdb/cache.h"
|
||||
+#include "rocksdb/advanced_cache.h"
|
||||
#include "include/ceph_hash.h"
|
||||
#include "common/PriorityCache.h"
|
||||
//#include "hash.h"
|
||||
@@ -26,7 +26,8 @@
|
||||
|
||||
namespace rocksdb_cache {
|
||||
|
||||
-using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
|
||||
+// using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
|
||||
+using DeleterFn = void (*)(rocksdb::Cache::ObjectPtr obj, rocksdb::MemoryAllocator* allocator);
|
||||
|
||||
// Single cache shard interface.
|
||||
class CacheShard {
|
||||
@@ -34,11 +35,19 @@
|
||||
CacheShard() = default;
|
||||
virtual ~CacheShard() = default;
|
||||
|
||||
- virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
|
||||
- size_t charge,
|
||||
- DeleterFn deleter,
|
||||
- rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) = 0;
|
||||
- virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) = 0;
|
||||
+ virtual rocksdb::Status Insert(const rocksdb::Slice& key,
|
||||
+ rockdb::ObjectPtr obj,
|
||||
+ const rocksdb::CacheItemHelper* helper,
|
||||
+ size_t charge,
|
||||
+ rocksdb:Handle** handle = nullptr,
|
||||
+ Rocksdb::Priority priority = Rocksdb::Priority::LOW)
|
||||
+ virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key,
|
||||
+ const rocksdb::CacheItemHelper* helper = nullptr,
|
||||
+ rocksdb::CreateContext* create_context = nullptr,
|
||||
+ rocksdb::Priority priority = rocksdb::Priority::LOW,
|
||||
+ bool wait = true,
|
||||
+ rocksdb::Statistics* stats = nullptr);
|
||||
+
|
||||
virtual bool Ref(rocksdb::Cache::Handle* handle) = 0;
|
||||
virtual bool Release(rocksdb::Cache::Handle* handle, bool force_erase = false) = 0;
|
||||
virtual void Erase(const rocksdb::Slice& key, uint32_t hash) = 0;
|
||||
@@ -68,8 +77,8 @@
|
||||
virtual const char* Name() const override = 0;
|
||||
virtual rocksdb::Status Insert(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
DeleterFn,
|
||||
- rocksdb::Cache::Handle** handle, Priority priority) override;
|
||||
- virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats) override;
|
||||
+ rocksdb::Cache::Handle** handle, Priority priority);
|
||||
+ virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats);
|
||||
virtual bool Ref(rocksdb::Cache::Handle* handle) override;
|
||||
virtual bool Release(rocksdb::Cache::Handle* handle, bool force_erase = false) override;
|
||||
virtual void* Value(Handle* handle) override = 0;
|
||||
@@ -84,14 +93,17 @@
|
||||
virtual size_t GetPinnedUsage() const override;
|
||||
virtual size_t GetCharge(Handle* handle) const = 0;
|
||||
#if (ROCKSDB_MAJOR >= 7 || (ROCKSDB_MAJOR == 6 && ROCKSDB_MINOR >= 22))
|
||||
- virtual DeleterFn GetDeleter(Handle* handle) const override;
|
||||
+ virtual DeleterFn GetDeleter(Handle* handle) const;
|
||||
#endif
|
||||
virtual void DisownData() override = 0;
|
||||
#if (ROCKSDB_MAJOR >= 7 || (ROCKSDB_MAJOR == 6 && ROCKSDB_MINOR >= 22))
|
||||
+ virtual const rocksdb::CacheItemHelper* GetCacheItemHelper(rocksdb::Cache::Handle* handle) const;
|
||||
virtual void ApplyToAllEntries(
|
||||
- const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
- DeleterFn deleter)>& callback,
|
||||
- const ApplyToAllEntriesOptions& opts) override;
|
||||
+ const std::function<void(const rocksdb::Slice& key,
|
||||
+ rocksdb::Cache::ObjectPtr obj,
|
||||
+ size_t charge,
|
||||
+ const rocksdb::CacheItemHelper* helper)>& callback,
|
||||
+ const rocksdb::ApplyToAllEntriesOptions& opts);
|
||||
#else
|
||||
virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
bool thread_safe) override;
|
||||
--- ceph-17.2.6/src/kv/RocksDBStore.cc.orig 2023-04-05 11:09:51.000000000 -0400
|
||||
+++ ceph-17.2.6/src/kv/RocksDBStore.cc 2023-04-20 16:19:29.280669881 -0400
|
||||
@@ -903,6 +903,19 @@
|
||||
// base_name - name of column without shard suffix: "-"+number
|
||||
// options - additional options to apply
|
||||
// cf_opt - column family options to update
|
||||
+
|
||||
+rocksdb::Status GetColumnFamilyOptionsFromMap(
|
||||
+ const rocksdb::ColumnFamilyOptions& base_options,
|
||||
+ const std::unordered_map<std::string, std::string>& opts_map,
|
||||
+ rocksdb::ColumnFamilyOptions* new_options, bool input_strings_escaped,
|
||||
+ bool ignore_unknown_options) {
|
||||
+ rocksdb::ConfigOptions config_options;
|
||||
+ config_options.ignore_unknown_options = ignore_unknown_options;
|
||||
+ config_options.input_strings_escaped = input_strings_escaped;
|
||||
+ return rocksdb::GetColumnFamilyOptionsFromMap(config_options, base_options, opts_map,
|
||||
+ new_options);
|
||||
+}
|
||||
+
|
||||
int RocksDBStore::update_column_family_options(const std::string& base_name,
|
||||
const std::string& more_options,
|
||||
rocksdb::ColumnFamilyOptions* cf_opt)
|
||||
@@ -916,7 +929,7 @@
|
||||
<< " options=" << more_options << dendl;
|
||||
return r;
|
||||
}
|
||||
- status = rocksdb::GetColumnFamilyOptionsFromMap(*cf_opt, options_map, cf_opt);
|
||||
+ status = GetColumnFamilyOptionsFromMap(*cf_opt, options_map, cf_opt, false, false);
|
||||
if (!status.ok()) {
|
||||
dout(5) << __func__ << " invalid column family optionsp; column family="
|
||||
<< base_name << " options=" << more_options << dendl;
|
||||
@@ -937,6 +950,20 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+rocksdb::Status GetBlockBasedTableOptionsFromMap(
|
||||
+ const rocksdb::BlockBasedTableOptions& table_options,
|
||||
+ const std::unordered_map<std::string, std::string>& opts_map,
|
||||
+ rocksdb::BlockBasedTableOptions* new_table_options, bool input_strings_escaped,
|
||||
+ bool ignore_unknown_options) {
|
||||
+ rocksdb::ConfigOptions config_options;
|
||||
+ config_options.input_strings_escaped = input_strings_escaped;
|
||||
+ config_options.ignore_unknown_options = ignore_unknown_options;
|
||||
+ config_options.invoke_prepare_options = false;
|
||||
+
|
||||
+ return rocksdb::GetBlockBasedTableOptionsFromMap(config_options, table_options,
|
||||
+ opts_map, new_table_options);
|
||||
+}
|
||||
+
|
||||
int RocksDBStore::apply_block_cache_options(const std::string& column_name,
|
||||
const std::string& block_cache_opt,
|
||||
rocksdb::ColumnFamilyOptions* cf_opt)
|
||||
@@ -981,7 +1008,7 @@
|
||||
}
|
||||
|
||||
rocksdb::BlockBasedTableOptions column_bbt_opts;
|
||||
- status = GetBlockBasedTableOptionsFromMap(bbt_opts, cache_options_map, &column_bbt_opts);
|
||||
+ status = GetBlockBasedTableOptionsFromMap(bbt_opts, cache_options_map, &column_bbt_opts, false, false);
|
||||
if (!status.ok()) {
|
||||
dout(5) << __func__ << " invalid block cache options; column=" << column_name
|
||||
<< " options=" << block_cache_opt << dendl;
|
||||
--- ceph-17.2.6/src/kv/rocksdb_cache/BinnedLRUCache.h.orig 2023-04-21 10:11:00.180387609 -0400
|
||||
+++ ceph-17.2.6/src/kv/rocksdb_cache/BinnedLRUCache.h 2023-04-21 10:17:15.527816193 -0400
|
||||
@@ -121,7 +121,7 @@
|
||||
void Free() {
|
||||
ceph_assert((refs == 1 && InCache()) || (refs == 0 && !InCache()));
|
||||
if (deleter) {
|
||||
- (*deleter)(key(), value);
|
||||
+ (*deleter)(this, nullptr);
|
||||
}
|
||||
delete[] key_data;
|
||||
delete this;
|
||||
@@ -1,61 +0,0 @@
|
||||
--- ceph-18.0.0-2726-g7cea3740/src/rgw/rgw_asio_client.cc.orig 2023-03-14 18:46:02.037195570 -0400
|
||||
+++ ceph-18.0.0-2726-g7cea3740/src/rgw/rgw_asio_client.cc 2023-03-14 18:55:14.446438244 -0400
|
||||
@@ -39,11 +39,13 @@
|
||||
const auto& value = header->value();
|
||||
|
||||
if (field == beast::http::field::content_length) {
|
||||
- env.set("CONTENT_LENGTH", value.to_string());
|
||||
+ std::string scratch{value.data(), value.size()};
|
||||
+ env.set("CONTENT_LENGTH", scratch.c_str());
|
||||
continue;
|
||||
}
|
||||
if (field == beast::http::field::content_type) {
|
||||
- env.set("CONTENT_TYPE", value.to_string());
|
||||
+ std::string scratch{value.data(), value.size()};
|
||||
+ env.set("CONTENT_TYPE", scratch.c_str());
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -62,26 +64,37 @@
|
||||
}
|
||||
*dest = '\0';
|
||||
|
||||
- env.set(buf, value.to_string());
|
||||
+ std::string scratch{value.data(), value.size()};
|
||||
+ env.set(buf, scratch.c_str());
|
||||
}
|
||||
|
||||
int major = request.version() / 10;
|
||||
int minor = request.version() % 10;
|
||||
env.set("HTTP_VERSION", std::to_string(major) + '.' + std::to_string(minor));
|
||||
|
||||
- env.set("REQUEST_METHOD", request.method_string().to_string());
|
||||
+ {
|
||||
+ std::string scratch {request.method_string().data(),request.method_string().size()};
|
||||
+ env.set("REQUEST_METHOD", scratch.c_str());
|
||||
+ }
|
||||
|
||||
// split uri from query
|
||||
auto uri = request.target();
|
||||
auto pos = uri.find('?');
|
||||
if (pos != uri.npos) {
|
||||
auto query = uri.substr(pos + 1);
|
||||
- env.set("QUERY_STRING", query.to_string());
|
||||
+ std::string scratch{query.data(), query.size()};
|
||||
+ env.set("QUERY_STRING", scratch.c_str());
|
||||
uri = uri.substr(0, pos);
|
||||
}
|
||||
- env.set("SCRIPT_URI", uri.to_string());
|
||||
+ {
|
||||
+ std::string scratch {uri.data(), uri.size()};
|
||||
+ env.set("SCRIPT_URI", scratch.c_str());
|
||||
+ }
|
||||
|
||||
- env.set("REQUEST_URI", request.target().to_string());
|
||||
+ {
|
||||
+ std::string scratch {request.target().data(), request.target().size()};
|
||||
+ env.set("REQUEST_URI", scratch.c_str());
|
||||
+ }
|
||||
|
||||
char port_buf[16];
|
||||
snprintf(port_buf, sizeof(port_buf), "%d", local_endpoint.port());
|
||||
+28
-27
@@ -1,6 +1,27 @@
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.009605033 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S 2023-04-30 14:28:32.239465067 -0400
|
||||
@@ -80,3 +80,18 @@
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:28:37.137194693 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S 2025-05-19 18:30:54.292857720 -0400
|
||||
@@ -144,4 +144,18 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
+
|
||||
+.section .note.gnu.property
|
||||
+.align=8
|
||||
+
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x01, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
# endif
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:28:22.611442193 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/make_x86_64_sysv_elf_gas.S 2025-05-19 18:31:01.037742795 -0400
|
||||
@@ -159,4 +159,18 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
@@ -18,30 +39,10 @@
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.008605050 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/jump_x86_64_sysv_elf_gas.S 2023-04-30 14:27:50.145210847 -0400
|
||||
@@ -89,3 +89,17 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
+
|
||||
+.section .note.gnu.property
|
||||
+.align=8
|
||||
+
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x01, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
+ .byte 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
|
||||
+ .byte 0x05, 0x00, 0x00, 0x00, 0x47, 0x4E, 0x55, 0x00
|
||||
+ .byte 0x02, 0x00, 0x00, 0xC0, 0x04, 0x00, 0x00, 0x00
|
||||
+ .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
--- ceph-17.2.6/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S.orig 2023-04-30 14:25:35.009605033 -0400
|
||||
+++ ceph-17.2.6/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S 2023-04-30 14:29:30.402434597 -0400
|
||||
@@ -92,3 +92,17 @@
|
||||
# endif
|
||||
--- ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S.orig 2025-05-19 18:29:35.836194529 -0400
|
||||
+++ ceph-20.0.0-1954-g77a7c83d/src/boost/libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S 2025-05-19 18:31:15.172501956 -0400
|
||||
@@ -137,3 +137,17 @@
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
--- ceph/src/CMakeLists.txt.orig 2023-11-01 11:53:53.618167190 -0400
|
||||
+++ ceph/src/CMakeLists.txt 2023-11-01 13:52:51.292643490 -0400
|
||||
@@ -625,6 +625,7 @@
|
||||
add_subdirectory(perfglue)
|
||||
|
||||
add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc)
|
||||
+add_dependencies(rados_snap_set_diff_obj legacy-option-headers)
|
||||
|
||||
option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON)
|
||||
|
||||
@@ -881,6 +882,7 @@
|
||||
add_library(krbd STATIC krbd.cc
|
||||
$<TARGET_OBJECTS:parse_secret_objs>)
|
||||
target_link_libraries(krbd keyutils::keyutils)
|
||||
+ add_dependencies(krbd legacy-option-headers)
|
||||
endif()
|
||||
add_subdirectory(librbd)
|
||||
if(WITH_FUSE)
|
||||
@@ -1,37 +0,0 @@
|
||||
diff --git a/src/common/dout.h b/src/common/dout.h
|
||||
index 4cd60efff8fef..db68a042a7f1b 100644
|
||||
--- a/src/common/dout.h
|
||||
+++ b/src/common/dout.h
|
||||
@@ -144,17 +144,24 @@ 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 { \
|
||||
- /* 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>()); \
|
||||
+ constexpr auto sub_helper = static_cast<decltype(sub_)>(sub); \
|
||||
+ constexpr auto v_helper = static_cast<decltype(v_)>(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); \
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-18.2.3/src/boost/boost/python/call_method.hpp.orig 2024-06-07 11:14:58.579734749 -0400
|
||||
+++ ceph-18.2.3/src/boost/boost/python/call_method.hpp 2024-06-07 11:19:06.754520504 -0400
|
||||
@@ -59,7 +59,7 @@
|
||||
)
|
||||
{
|
||||
PyObject* const result =
|
||||
- PyEval_CallMethod(
|
||||
+ PyObject_CallMethod(
|
||||
self
|
||||
, const_cast<char*>(name)
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
@@ -0,0 +1,19 @@
|
||||
--- ceph-18.2.3/src/mgr/PyModule.cc.orig 2024-06-06 16:31:10.340731851 -0400
|
||||
+++ ceph-18.2.3/src/mgr/PyModule.cc 2024-06-07 12:58:49.913571410 -0400
|
||||
@@ -342,6 +342,16 @@
|
||||
return ceph_module;
|
||||
}
|
||||
|
||||
+// FIXME
|
||||
+// Removed in Python 3.13 API, but kept for the stable ABI
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+PyAPI_FUNC(void) PySys_SetPath(const wchar_t *);
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
int PyModule::load(PyThreadState *pMainThreadState)
|
||||
{
|
||||
ceph_assert(pMainThreadState != nullptr);
|
||||
@@ -0,0 +1,15 @@
|
||||
--- ceph-19.1.0/src/common/crc32c_ppc_asm.S.orig 2024-07-10 10:55:06.255480790 -0400
|
||||
+++ ceph-19.1.0/src/common/crc32c_ppc_asm.S 2024-07-10 12:53:42.844075490 -0400
|
||||
@@ -54,11 +54,8 @@
|
||||
/* byte reverse permute constant */
|
||||
.octa 0x0F0E0D0C0B0A09080706050403020100
|
||||
|
||||
-#ifdef CRC32_CONSTANTS_HEADER
|
||||
-#include CRC32_CONSTANTS_HEADER
|
||||
-#else
|
||||
+#define __ASSEMBLY__
|
||||
#include "crc32c_ppc_constants.h"
|
||||
-#endif
|
||||
|
||||
.text
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
diff --git a/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c b/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c
|
||||
index fea9e6f98..c7eddb20b 100644
|
||||
--- a/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c
|
||||
+++ b/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/3rdparty/civetweb/src/civetweb.c
|
||||
@@ -1744,7 +1744,9 @@ typedef struct SSL_CTX SSL_CTX;
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/dh.h>
|
||||
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
||||
#include <openssl/engine.h>
|
||||
+#endif
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/opensslv.h>
|
||||
#include <openssl/pem.h>
|
||||
@@ -0,0 +1,20 @@
|
||||
--- ceph-19.2.0/src/rocksdb/db/blob/blob_file_meta.h.orig 2025-01-16 08:16:41.762758595 -0500
|
||||
+++ ceph-19.2.0/src/rocksdb/db/blob/blob_file_meta.h 2025-01-16 08:17:37.172784779 -0500
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_set>
|
||||
+#include <cstdint>
|
||||
|
||||
#include "rocksdb/rocksdb_namespace.h"
|
||||
|
||||
--- ceph-19.2.0/src/rocksdb/include/rocksdb/trace_record.h.orig 2025-01-16 09:04:19.196962397 -0500
|
||||
+++ ceph-19.2.0/src/rocksdb/include/rocksdb/trace_record.h 2025-01-16 09:04:33.885701684 -0500
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
+#include <cstdint>
|
||||
|
||||
#include "rocksdb/rocksdb_namespace.h"
|
||||
#include "rocksdb/slice.h"
|
||||
@@ -0,0 +1,63 @@
|
||||
--- ceph-20.1.0/src/googletest/googletest/CMakeLists.txt.orig 2025-02-07 11:04:56.000000000 -0500
|
||||
+++ ceph-20.1.0/src/googletest/googletest/CMakeLists.txt 2025-09-16 08:11:59.341951770 -0400
|
||||
@@ -53,6 +53,8 @@
|
||||
set_up_hermetic_build()
|
||||
endif()
|
||||
|
||||
+option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
|
||||
+
|
||||
# These commands only run if this is the main project.
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "gtest" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution")
|
||||
|
||||
@@ -121,7 +123,7 @@
|
||||
# are used for other targets, to ensure that gtest can be compiled by a user
|
||||
# aggressive about warnings.
|
||||
cxx_library(gtest "${cxx_strict}" src/gtest-all.cc)
|
||||
-set_target_properties(gtest PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+#set_target_properties(gtest PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
if(GTEST_HAS_ABSL)
|
||||
target_compile_definitions(gtest PUBLIC GTEST_HAS_ABSL=1)
|
||||
target_link_libraries(gtest PUBLIC
|
||||
@@ -139,7 +141,7 @@
|
||||
)
|
||||
endif()
|
||||
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
|
||||
-set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+#set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
string(REPLACE ";" "$<SEMICOLON>" dirs "${gtest_build_include_dirs}")
|
||||
target_include_directories(gtest SYSTEM INTERFACE
|
||||
"$<BUILD_INTERFACE:${dirs}>"
|
||||
--- ceph-20.1.0/src/googletest/googlemock/CMakeLists.txt.orig 2025-02-07 11:04:56.000000000 -0500
|
||||
+++ ceph-20.1.0/src/googletest/googlemock/CMakeLists.txt 2025-09-16 08:12:18.121641875 -0400
|
||||
@@ -49,6 +49,7 @@
|
||||
# if they are the same (the default).
|
||||
add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/${gtest_dir}")
|
||||
|
||||
+option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
|
||||
|
||||
# These commands only run if this is the main project
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution")
|
||||
@@ -96,10 +97,10 @@
|
||||
else()
|
||||
cxx_library(gmock "${cxx_strict}" src/gmock-all.cc)
|
||||
target_link_libraries(gmock PUBLIC gtest)
|
||||
- set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+ # set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc)
|
||||
target_link_libraries(gmock_main PUBLIC gmock)
|
||||
- set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
+ # set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
|
||||
endif()
|
||||
|
||||
string(REPLACE ";" "$<SEMICOLON>" dirs "${gmock_build_include_dirs}")
|
||||
--- ceph-20.1.0/src/googletest/googletest/cmake/internal_utils.cmake.orig 2025-09-22 10:12:18.037349494 -0400
|
||||
+++ ceph-20.1.0/src/googletest/googletest/cmake/internal_utils.cmake 2025-09-22 10:13:13.729590249 -0400
|
||||
@@ -207,7 +207,7 @@
|
||||
endfunction()
|
||||
|
||||
function(cxx_library name cxx_flags)
|
||||
- cxx_library_with_type(${name} "" "${cxx_flags}" ${ARGN})
|
||||
+ cxx_library_with_type(${name} STATIC "${cxx_flags}" ${ARGN})
|
||||
endfunction()
|
||||
|
||||
# cxx_executable_with_flags(name cxx_flags libs srcs...)
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-19.2.0/src/tracing/CMakeLists.txt.orig 2025-01-23 17:51:43.874162594 -0500
|
||||
+++ ceph-19.2.0/src/tracing/CMakeLists.txt 2025-01-23 17:54:21.877186735 -0500
|
||||
@@ -6,6 +6,8 @@
|
||||
set(header_dir ${working_dir}/tracing)
|
||||
file(MAKE_DIRECTORY ${header_dir})
|
||||
|
||||
+set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu23")
|
||||
+
|
||||
add_custom_target(tracepoint_libraries)
|
||||
|
||||
file(GLOB tps "*.tp")
|
||||
@@ -0,0 +1,21 @@
|
||||
--- ceph-20.1.0/src/test/neorados/common_tests.h.orig 2025-09-04 15:35:40.000000000 -0400
|
||||
+++ ceph-20.1.0/src/test/neorados/common_tests.h 2025-09-16 08:13:03.274896767 -0400
|
||||
@@ -47,6 +47,18 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
+#if !defined(GTEST_DISALLOW_COPY_AND_ASSIGN_)
|
||||
+#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \
|
||||
+ type(type const&) = delete; \
|
||||
+ type& operator=(type const&) = delete
|
||||
+#endif
|
||||
+
|
||||
+#if !defined(GTEST_DISALLOW_MOVE_AND_ASSIGN_)
|
||||
+#define GTEST_DISALLOW_MOVE_AND_ASSIGN_(type) \
|
||||
+ type(type&&) noexcept = delete; \
|
||||
+ type& operator=(type&&) noexcept = delete
|
||||
+#endif
|
||||
+
|
||||
/// \file test/neorados/common_tests.h
|
||||
///
|
||||
/// \brief Tools for testing neorados code
|
||||
@@ -0,0 +1,838 @@
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_19.h.orig 2025-07-08 07:40:29.811814549 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_19.h 2025-07-08 07:40:29.811739290 -0400
|
||||
@@ -0,0 +1,114 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/properties.h"
|
||||
+#include "parquet/types.h"
|
||||
+
|
||||
+using parquet::ParquetCipher;
|
||||
+
|
||||
+namespace parquet {
|
||||
+namespace encryption {
|
||||
+
|
||||
+constexpr int kGcmTagLength = 16;
|
||||
+constexpr int kNonceLength = 12;
|
||||
+
|
||||
+// Module types
|
||||
+constexpr int8_t kFooter = 0;
|
||||
+constexpr int8_t kColumnMetaData = 1;
|
||||
+constexpr int8_t kDataPage = 2;
|
||||
+constexpr int8_t kDictionaryPage = 3;
|
||||
+constexpr int8_t kDataPageHeader = 4;
|
||||
+constexpr int8_t kDictionaryPageHeader = 5;
|
||||
+constexpr int8_t kColumnIndex = 6;
|
||||
+constexpr int8_t kOffsetIndex = 7;
|
||||
+
|
||||
+/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
+class AesEncryptor {
|
||||
+ public:
|
||||
+ static AesEncryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
+ std::vector<AesEncryptor*>* all_encryptors);
|
||||
+
|
||||
+ ~AesEncryptor();
|
||||
+
|
||||
+ /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
+ int CiphertextSizeDelta();
|
||||
+
|
||||
+ /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
+ /// If different from value in constructor, exception will be thrown.
|
||||
+ int Encrypt(const uint8_t* plaintext, int plaintext_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len, uint8_t* ciphertext);
|
||||
+
|
||||
+ /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
+ int SignedFooterEncrypt(const uint8_t* footer, int footer_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len,
|
||||
+ const uint8_t* nonce, uint8_t* encrypted_footer);
|
||||
+
|
||||
+ void WipeOut();
|
||||
+
|
||||
+ private:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ explicit AesEncryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
+ // PIMPL Idiom
|
||||
+ class AesEncryptorImpl;
|
||||
+ std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
+class AesDecryptor {
|
||||
+ public:
|
||||
+ static AesDecryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
+ std::vector<AesDecryptor*>* all_decryptors);
|
||||
+
|
||||
+ ~AesDecryptor();
|
||||
+ void WipeOut();
|
||||
+
|
||||
+ /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
+ int CiphertextSizeDelta();
|
||||
+
|
||||
+ /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
+ /// validation. If different from value in constructor, exception will be thrown.
|
||||
+ int Decrypt(const uint8_t* ciphertext, int ciphertext_len, const uint8_t* key,
|
||||
+ int key_len, const uint8_t* aad, int aad_len, uint8_t* plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ explicit AesDecryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
+ // PIMPL Idiom
|
||||
+ class AesDecryptorImpl;
|
||||
+ std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
+ int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
+ int16_t page_ordinal);
|
||||
+
|
||||
+std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
+
|
||||
+// Update last two bytes of page (or page header) module AAD
|
||||
+void QuickUpdatePageAad(const std::string& AAD, int16_t new_page_ordinal);
|
||||
+
|
||||
+// Wraps OpenSSL RAND_bytes function
|
||||
+void RandBytes(unsigned char* buf, int num);
|
||||
+
|
||||
+} // namespace encryption
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_20.h.orig 2025-07-08 07:40:29.812759948 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal_20.h 2025-07-08 07:40:29.812687536 -0400
|
||||
@@ -0,0 +1,141 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "arrow/util/span.h"
|
||||
+#include "parquet/properties.h"
|
||||
+#include "parquet/types.h"
|
||||
+
|
||||
+using parquet::ParquetCipher;
|
||||
+
|
||||
+namespace parquet::encryption {
|
||||
+
|
||||
+constexpr int32_t kGcmTagLength = 16;
|
||||
+constexpr int32_t kNonceLength = 12;
|
||||
+
|
||||
+// Module types
|
||||
+constexpr int8_t kFooter = 0;
|
||||
+constexpr int8_t kColumnMetaData = 1;
|
||||
+constexpr int8_t kDataPage = 2;
|
||||
+constexpr int8_t kDictionaryPage = 3;
|
||||
+constexpr int8_t kDataPageHeader = 4;
|
||||
+constexpr int8_t kDictionaryPageHeader = 5;
|
||||
+constexpr int8_t kColumnIndex = 6;
|
||||
+constexpr int8_t kOffsetIndex = 7;
|
||||
+constexpr int8_t kBloomFilterHeader = 8;
|
||||
+constexpr int8_t kBloomFilterBitset = 9;
|
||||
+
|
||||
+/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
+class PARQUET_EXPORT AesEncryptor {
|
||||
+ public:
|
||||
+ /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
+ /// If write_length is true, prepend ciphertext length to the ciphertext
|
||||
+ explicit AesEncryptor(ParquetCipher::type alg_id, int32_t key_len, bool metadata,
|
||||
+ bool write_length = true);
|
||||
+
|
||||
+ static std::unique_ptr<AesEncryptor> Make(ParquetCipher::type alg_id, int32_t key_len,
|
||||
+ bool metadata, bool write_length = true);
|
||||
+
|
||||
+ ~AesEncryptor();
|
||||
+
|
||||
+ /// The size of the ciphertext, for this cipher and the specified plaintext length.
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int64_t plaintext_len) const;
|
||||
+
|
||||
+ /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
+ /// If different from value in constructor, exception will be thrown.
|
||||
+ int32_t Encrypt(::arrow::util::span<const uint8_t> plaintext,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<uint8_t> ciphertext);
|
||||
+
|
||||
+ /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
+ int32_t SignedFooterEncrypt(::arrow::util::span<const uint8_t> footer,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<const uint8_t> nonce,
|
||||
+ ::arrow::util::span<uint8_t> encrypted_footer);
|
||||
+
|
||||
+ private:
|
||||
+ // PIMPL Idiom
|
||||
+ class AesEncryptorImpl;
|
||||
+ std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
+class PARQUET_EXPORT AesDecryptor {
|
||||
+ public:
|
||||
+ /// \brief Construct an AesDecryptor
|
||||
+ ///
|
||||
+ /// \param alg_id the encryption algorithm to use
|
||||
+ /// \param key_len key length. Possible values: 16, 24, 32 bytes.
|
||||
+ /// \param metadata if true then this is a metadata decryptor
|
||||
+ /// \param contains_length if true, expect ciphertext length prepended to the ciphertext
|
||||
+ explicit AesDecryptor(ParquetCipher::type alg_id, int32_t key_len, bool metadata,
|
||||
+ bool contains_length = true);
|
||||
+
|
||||
+ static std::unique_ptr<AesDecryptor> Make(ParquetCipher::type alg_id, int32_t key_len,
|
||||
+ bool metadata);
|
||||
+
|
||||
+ ~AesDecryptor();
|
||||
+
|
||||
+ /// The size of the plaintext, for this cipher and the specified ciphertext length.
|
||||
+ [[nodiscard]] int32_t PlaintextLength(int32_t ciphertext_len) const;
|
||||
+
|
||||
+ /// The size of the ciphertext, for this cipher and the specified plaintext length.
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int32_t plaintext_len) const;
|
||||
+
|
||||
+ /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
+ /// validation. If different from value in constructor, exception will be thrown.
|
||||
+ /// The caller is responsible for ensuring that the plaintext buffer is at least as
|
||||
+ /// large as PlaintextLength(ciphertext_len).
|
||||
+ int32_t Decrypt(::arrow::util::span<const uint8_t> ciphertext,
|
||||
+ ::arrow::util::span<const uint8_t> key,
|
||||
+ ::arrow::util::span<const uint8_t> aad,
|
||||
+ ::arrow::util::span<uint8_t> plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ // PIMPL Idiom
|
||||
+ class AesDecryptorImpl;
|
||||
+ std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
+};
|
||||
+
|
||||
+std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
+ int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
+ int32_t page_ordinal);
|
||||
+
|
||||
+std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
+
|
||||
+// Update last two bytes of page (or page header) module AAD
|
||||
+void QuickUpdatePageAad(int32_t new_page_ordinal, std::string* AAD);
|
||||
+
|
||||
+// Wraps OpenSSL RAND_bytes function
|
||||
+void RandBytes(unsigned char* buf, size_t num);
|
||||
+
|
||||
+// Ensure OpenSSL is initialized.
|
||||
+//
|
||||
+// This is only necessary in specific situations since OpenSSL otherwise
|
||||
+// initializes itself automatically. For example, under Valgrind, a memory
|
||||
+// leak will be reported if OpenSSL is initialized for the first time from
|
||||
+// a worker thread; calling this function from the main thread prevents this.
|
||||
+void EnsureBackendInitialized();
|
||||
+
|
||||
+} // namespace parquet::encryption
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/encryption_internal.h 2025-07-08 07:40:29.809908891 -0400
|
||||
@@ -17,98 +17,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
-#include <memory>
|
||||
-#include <string>
|
||||
-#include <vector>
|
||||
-
|
||||
-#include "parquet/properties.h"
|
||||
-#include "parquet/types.h"
|
||||
-
|
||||
-using parquet::ParquetCipher;
|
||||
-
|
||||
-namespace parquet {
|
||||
-namespace encryption {
|
||||
-
|
||||
-constexpr int kGcmTagLength = 16;
|
||||
-constexpr int kNonceLength = 12;
|
||||
-
|
||||
-// Module types
|
||||
-constexpr int8_t kFooter = 0;
|
||||
-constexpr int8_t kColumnMetaData = 1;
|
||||
-constexpr int8_t kDataPage = 2;
|
||||
-constexpr int8_t kDictionaryPage = 3;
|
||||
-constexpr int8_t kDataPageHeader = 4;
|
||||
-constexpr int8_t kDictionaryPageHeader = 5;
|
||||
-constexpr int8_t kColumnIndex = 6;
|
||||
-constexpr int8_t kOffsetIndex = 7;
|
||||
-
|
||||
-/// Performs AES encryption operations with GCM or CTR ciphers.
|
||||
-class AesEncryptor {
|
||||
- public:
|
||||
- static AesEncryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
- std::vector<AesEncryptor*>* all_encryptors);
|
||||
-
|
||||
- ~AesEncryptor();
|
||||
-
|
||||
- /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
- int CiphertextSizeDelta();
|
||||
-
|
||||
- /// Encrypts plaintext with the key and aad. Key length is passed only for validation.
|
||||
- /// If different from value in constructor, exception will be thrown.
|
||||
- int Encrypt(const uint8_t* plaintext, int plaintext_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len, uint8_t* ciphertext);
|
||||
-
|
||||
- /// Encrypts plaintext footer, in order to compute footer signature (tag).
|
||||
- int SignedFooterEncrypt(const uint8_t* footer, int footer_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len,
|
||||
- const uint8_t* nonce, uint8_t* encrypted_footer);
|
||||
-
|
||||
- void WipeOut();
|
||||
-
|
||||
- private:
|
||||
- /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
- explicit AesEncryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
- // PIMPL Idiom
|
||||
- class AesEncryptorImpl;
|
||||
- std::unique_ptr<AesEncryptorImpl> impl_;
|
||||
-};
|
||||
-
|
||||
-/// Performs AES decryption operations with GCM or CTR ciphers.
|
||||
-class AesDecryptor {
|
||||
- public:
|
||||
- static AesDecryptor* Make(ParquetCipher::type alg_id, int key_len, bool metadata,
|
||||
- std::vector<AesDecryptor*>* all_decryptors);
|
||||
-
|
||||
- ~AesDecryptor();
|
||||
- void WipeOut();
|
||||
-
|
||||
- /// Size difference between plaintext and ciphertext, for this cipher.
|
||||
- int CiphertextSizeDelta();
|
||||
-
|
||||
- /// Decrypts ciphertext with the key and aad. Key length is passed only for
|
||||
- /// validation. If different from value in constructor, exception will be thrown.
|
||||
- int Decrypt(const uint8_t* ciphertext, int ciphertext_len, const uint8_t* key,
|
||||
- int key_len, const uint8_t* aad, int aad_len, uint8_t* plaintext);
|
||||
-
|
||||
- private:
|
||||
- /// Can serve one key length only. Possible values: 16, 24, 32 bytes.
|
||||
- explicit AesDecryptor(ParquetCipher::type alg_id, int key_len, bool metadata);
|
||||
- // PIMPL Idiom
|
||||
- class AesDecryptorImpl;
|
||||
- std::unique_ptr<AesDecryptorImpl> impl_;
|
||||
-};
|
||||
-
|
||||
-std::string CreateModuleAad(const std::string& file_aad, int8_t module_type,
|
||||
- int16_t row_group_ordinal, int16_t column_ordinal,
|
||||
- int16_t page_ordinal);
|
||||
-
|
||||
-std::string CreateFooterAad(const std::string& aad_prefix_bytes);
|
||||
-
|
||||
-// Update last two bytes of page (or page header) module AAD
|
||||
-void QuickUpdatePageAad(const std::string& AAD, int16_t new_page_ordinal);
|
||||
-
|
||||
-// Wraps OpenSSL RAND_bytes function
|
||||
-void RandBytes(unsigned char* buf, int num);
|
||||
-
|
||||
-} // namespace encryption
|
||||
-} // namespace parquet
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
+#include "encryption_internal_19.h"
|
||||
+#else
|
||||
+#include "encryption_internal_20.h"
|
||||
+#endif
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_19.h.orig 2025-07-08 07:40:29.814292389 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_19.h 2025-07-08 07:40:29.813727465 -0400
|
||||
@@ -0,0 +1,121 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <map>
|
||||
+#include <memory>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/schema.h"
|
||||
+
|
||||
+namespace parquet {
|
||||
+
|
||||
+namespace encryption {
|
||||
+class AesDecryptor;
|
||||
+class AesEncryptor;
|
||||
+} // namespace encryption
|
||||
+
|
||||
+class FileDecryptionProperties;
|
||||
+
|
||||
+class PARQUET_EXPORT Decryptor {
|
||||
+ public:
|
||||
+ Decryptor(encryption::AesDecryptor* decryptor, const std::string& key,
|
||||
+ const std::string& file_aad, const std::string& aad,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+ void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ int CiphertextSizeDelta();
|
||||
+ int Decrypt(const uint8_t* ciphertext, int ciphertext_len, uint8_t* plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ encryption::AesDecryptor* aes_decryptor_;
|
||||
+ std::string key_;
|
||||
+ std::string file_aad_;
|
||||
+ std::string aad_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+};
|
||||
+
|
||||
+class InternalFileDecryptor {
|
||||
+ public:
|
||||
+ explicit InternalFileDecryptor(FileDecryptionProperties* properties,
|
||||
+ const std::string& file_aad,
|
||||
+ ParquetCipher::type algorithm,
|
||||
+ const std::string& footer_key_metadata,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ std::string& file_aad() { return file_aad_; }
|
||||
+
|
||||
+ std::string GetFooterKey();
|
||||
+
|
||||
+ ParquetCipher::type algorithm() { return algorithm_; }
|
||||
+
|
||||
+ std::string& footer_key_metadata() { return footer_key_metadata_; }
|
||||
+
|
||||
+ FileDecryptionProperties* properties() { return properties_; }
|
||||
+
|
||||
+ void WipeOutDecryptionKeys();
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptor();
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptorForColumnMeta(const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptorForColumnData(const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+ std::shared_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+
|
||||
+ private:
|
||||
+ FileDecryptionProperties* properties_;
|
||||
+ // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
+ std::string file_aad_;
|
||||
+ std::map<std::string, std::shared_ptr<Decryptor>> column_data_map_;
|
||||
+ std::map<std::string, std::shared_ptr<Decryptor>> column_metadata_map_;
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> footer_metadata_decryptor_;
|
||||
+ std::shared_ptr<Decryptor> footer_data_decryptor_;
|
||||
+ ParquetCipher::type algorithm_;
|
||||
+ std::string footer_key_metadata_;
|
||||
+ std::vector<encryption::AesDecryptor*> all_decryptors_;
|
||||
+
|
||||
+ /// Key must be 16, 24 or 32 bytes in length. Thus there could be up to three
|
||||
+ // types of meta_decryptors and data_decryptors.
|
||||
+ std::unique_ptr<encryption::AesDecryptor> meta_decryptor_[3];
|
||||
+ std::unique_ptr<encryption::AesDecryptor> data_decryptor_[3];
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+
|
||||
+ std::shared_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
+ std::shared_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata,
|
||||
+ const std::string& aad,
|
||||
+ bool metadata = false);
|
||||
+
|
||||
+ encryption::AesDecryptor* GetMetaAesDecryptor(size_t key_size);
|
||||
+ encryption::AesDecryptor* GetDataAesDecryptor(size_t key_size);
|
||||
+
|
||||
+ int MapKeyLenToDecryptorArrayIndex(int key_len);
|
||||
+};
|
||||
+
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_20.h.orig 2025-07-08 07:40:29.815411998 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor_20.h 2025-07-08 07:40:29.815245155 -0400
|
||||
@@ -0,0 +1,148 @@
|
||||
+// Licensed to the Apache Software Foundation (ASF) under one
|
||||
+// or more contributor license agreements. See the NOTICE file
|
||||
+// distributed with this work for additional information
|
||||
+// regarding copyright ownership. The ASF licenses this file
|
||||
+// to you under the Apache License, Version 2.0 (the
|
||||
+// "License"); you may not use this file except in compliance
|
||||
+// with the License. You may obtain a copy of the License at
|
||||
+//
|
||||
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||
+//
|
||||
+// Unless required by applicable law or agreed to in writing,
|
||||
+// software distributed under the License is distributed on an
|
||||
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
+// KIND, either express or implied. See the License for the
|
||||
+// specific language governing permissions and limitations
|
||||
+// under the License.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <memory>
|
||||
+#include <mutex>
|
||||
+#include <string>
|
||||
+#include <vector>
|
||||
+
|
||||
+#include "parquet/schema.h"
|
||||
+
|
||||
+namespace parquet {
|
||||
+
|
||||
+namespace encryption {
|
||||
+class AesDecryptor;
|
||||
+class AesEncryptor;
|
||||
+} // namespace encryption
|
||||
+
|
||||
+class ColumnCryptoMetaData;
|
||||
+class FileDecryptionProperties;
|
||||
+
|
||||
+// An object handling decryption using well-known encryption parameters
|
||||
+//
|
||||
+// CAUTION: Decryptor objects are not thread-safe.
|
||||
+class PARQUET_EXPORT Decryptor {
|
||||
+ public:
|
||||
+ Decryptor(std::unique_ptr<encryption::AesDecryptor> decryptor, const std::string& key,
|
||||
+ const std::string& file_aad, const std::string& aad,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+ ~Decryptor();
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+ void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
+ ::arrow::MemoryPool* pool() { return pool_; }
|
||||
+
|
||||
+ [[nodiscard]] int32_t PlaintextLength(int32_t ciphertext_len) const;
|
||||
+ [[nodiscard]] int32_t CiphertextLength(int32_t plaintext_len) const;
|
||||
+ int32_t Decrypt(::arrow::util::span<const uint8_t> ciphertext,
|
||||
+ ::arrow::util::span<uint8_t> plaintext);
|
||||
+
|
||||
+ private:
|
||||
+ std::unique_ptr<encryption::AesDecryptor> aes_decryptor_;
|
||||
+ std::string key_;
|
||||
+ std::string file_aad_;
|
||||
+ std::string aad_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+};
|
||||
+
|
||||
+class InternalFileDecryptor {
|
||||
+ public:
|
||||
+ explicit InternalFileDecryptor(std::shared_ptr<FileDecryptionProperties> properties,
|
||||
+ const std::string& file_aad,
|
||||
+ ParquetCipher::type algorithm,
|
||||
+ const std::string& footer_key_metadata,
|
||||
+ ::arrow::MemoryPool* pool);
|
||||
+
|
||||
+ const std::string& file_aad() const { return file_aad_; }
|
||||
+
|
||||
+ std::string GetFooterKey();
|
||||
+
|
||||
+ ParquetCipher::type algorithm() const { return algorithm_; }
|
||||
+
|
||||
+ const std::string& footer_key_metadata() const { return footer_key_metadata_; }
|
||||
+
|
||||
+ const std::shared_ptr<FileDecryptionProperties>& properties() const {
|
||||
+ return properties_;
|
||||
+ }
|
||||
+
|
||||
+ ::arrow::MemoryPool* pool() const { return pool_; }
|
||||
+
|
||||
+ // Get a Decryptor instance for the Parquet footer
|
||||
+ std::unique_ptr<Decryptor> GetFooterDecryptor();
|
||||
+
|
||||
+ // Get a Decryptor instance for column chunk metadata.
|
||||
+ std::unique_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "") {
|
||||
+ return GetColumnDecryptor(column_path, column_key_metadata, aad, /*metadata=*/true);
|
||||
+ }
|
||||
+
|
||||
+ // Get a Decryptor instance for column chunk data.
|
||||
+ std::unique_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
+ const std::string& column_path, const std::string& column_key_metadata,
|
||||
+ const std::string& aad = "") {
|
||||
+ return GetColumnDecryptor(column_path, column_key_metadata, aad, /*metadata=*/false);
|
||||
+ }
|
||||
+
|
||||
+ // Get a Decryptor factory for column chunk metadata.
|
||||
+ //
|
||||
+ // This is typically useful if multi-threaded decryption is expected.
|
||||
+ // This is a static function as it accepts a null `InternalFileDecryptor*`
|
||||
+ // argument if the column is not encrypted.
|
||||
+ static std::function<std::unique_ptr<Decryptor>()> GetColumnMetaDecryptorFactory(
|
||||
+ InternalFileDecryptor*, const ColumnCryptoMetaData* crypto_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+ // Get a Decryptor factory for column chunk data.
|
||||
+ //
|
||||
+ // This is typically useful if multi-threaded decryption is expected.
|
||||
+ // This is a static function as it accepts a null `InternalFileDecryptor*`
|
||||
+ // argument if the column is not encrypted.
|
||||
+ static std::function<std::unique_ptr<Decryptor>()> GetColumnDataDecryptorFactory(
|
||||
+ InternalFileDecryptor*, const ColumnCryptoMetaData* crypto_metadata,
|
||||
+ const std::string& aad = "");
|
||||
+
|
||||
+ private:
|
||||
+ std::shared_ptr<FileDecryptionProperties> properties_;
|
||||
+ // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
+ std::string file_aad_;
|
||||
+ ParquetCipher::type algorithm_;
|
||||
+ std::string footer_key_metadata_;
|
||||
+ ::arrow::MemoryPool* pool_;
|
||||
+
|
||||
+ // Protects footer_key_ updates
|
||||
+ std::mutex mutex_;
|
||||
+ std::string footer_key_;
|
||||
+
|
||||
+ std::string GetColumnKey(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata);
|
||||
+
|
||||
+ std::unique_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
+
|
||||
+ std::unique_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
+ const std::string& column_key_metadata,
|
||||
+ const std::string& aad, bool metadata);
|
||||
+
|
||||
+ std::function<std::unique_ptr<Decryptor>()> GetColumnDecryptorFactory(
|
||||
+ const ColumnCryptoMetaData* crypto_metadata, const std::string& aad, bool metadata);
|
||||
+};
|
||||
+
|
||||
+void UpdateDecryptor(Decryptor* decryptor, int16_t row_group_ordinal,
|
||||
+ int16_t column_ordinal, int8_t module_type);
|
||||
+
|
||||
+} // namespace parquet
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/internal_file_decryptor.h 2025-07-08 07:40:29.813623143 -0400
|
||||
@@ -17,105 +17,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
-#include <map>
|
||||
-#include <memory>
|
||||
-#include <string>
|
||||
-#include <vector>
|
||||
-
|
||||
-#include "parquet/schema.h"
|
||||
-
|
||||
-namespace parquet {
|
||||
-
|
||||
-namespace encryption {
|
||||
-class AesDecryptor;
|
||||
-class AesEncryptor;
|
||||
-} // namespace encryption
|
||||
-
|
||||
-class FileDecryptionProperties;
|
||||
-
|
||||
-class PARQUET_EXPORT Decryptor {
|
||||
- public:
|
||||
- Decryptor(encryption::AesDecryptor* decryptor, const std::string& key,
|
||||
- const std::string& file_aad, const std::string& aad,
|
||||
- ::arrow::MemoryPool* pool);
|
||||
-
|
||||
- const std::string& file_aad() const { return file_aad_; }
|
||||
- void UpdateAad(const std::string& aad) { aad_ = aad; }
|
||||
- ::arrow::MemoryPool* pool() { return pool_; }
|
||||
-
|
||||
- int CiphertextSizeDelta();
|
||||
- int Decrypt(const uint8_t* ciphertext, int ciphertext_len, uint8_t* plaintext);
|
||||
-
|
||||
- private:
|
||||
- encryption::AesDecryptor* aes_decryptor_;
|
||||
- std::string key_;
|
||||
- std::string file_aad_;
|
||||
- std::string aad_;
|
||||
- ::arrow::MemoryPool* pool_;
|
||||
-};
|
||||
-
|
||||
-class InternalFileDecryptor {
|
||||
- public:
|
||||
- explicit InternalFileDecryptor(FileDecryptionProperties* properties,
|
||||
- const std::string& file_aad,
|
||||
- ParquetCipher::type algorithm,
|
||||
- const std::string& footer_key_metadata,
|
||||
- ::arrow::MemoryPool* pool);
|
||||
-
|
||||
- std::string& file_aad() { return file_aad_; }
|
||||
-
|
||||
- std::string GetFooterKey();
|
||||
-
|
||||
- ParquetCipher::type algorithm() { return algorithm_; }
|
||||
-
|
||||
- std::string& footer_key_metadata() { return footer_key_metadata_; }
|
||||
-
|
||||
- FileDecryptionProperties* properties() { return properties_; }
|
||||
-
|
||||
- void WipeOutDecryptionKeys();
|
||||
-
|
||||
- ::arrow::MemoryPool* pool() { return pool_; }
|
||||
-
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptor();
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptorForColumnMeta(const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptorForColumnData(const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetColumnMetaDecryptor(
|
||||
- const std::string& column_path, const std::string& column_key_metadata,
|
||||
- const std::string& aad = "");
|
||||
- std::shared_ptr<Decryptor> GetColumnDataDecryptor(
|
||||
- const std::string& column_path, const std::string& column_key_metadata,
|
||||
- const std::string& aad = "");
|
||||
-
|
||||
- private:
|
||||
- FileDecryptionProperties* properties_;
|
||||
- // Concatenation of aad_prefix (if exists) and aad_file_unique
|
||||
- std::string file_aad_;
|
||||
- std::map<std::string, std::shared_ptr<Decryptor>> column_data_map_;
|
||||
- std::map<std::string, std::shared_ptr<Decryptor>> column_metadata_map_;
|
||||
-
|
||||
- std::shared_ptr<Decryptor> footer_metadata_decryptor_;
|
||||
- std::shared_ptr<Decryptor> footer_data_decryptor_;
|
||||
- ParquetCipher::type algorithm_;
|
||||
- std::string footer_key_metadata_;
|
||||
- std::vector<encryption::AesDecryptor*> all_decryptors_;
|
||||
-
|
||||
- /// Key must be 16, 24 or 32 bytes in length. Thus there could be up to three
|
||||
- // types of meta_decryptors and data_decryptors.
|
||||
- std::unique_ptr<encryption::AesDecryptor> meta_decryptor_[3];
|
||||
- std::unique_ptr<encryption::AesDecryptor> data_decryptor_[3];
|
||||
-
|
||||
- ::arrow::MemoryPool* pool_;
|
||||
-
|
||||
- std::shared_ptr<Decryptor> GetFooterDecryptor(const std::string& aad, bool metadata);
|
||||
- std::shared_ptr<Decryptor> GetColumnDecryptor(const std::string& column_path,
|
||||
- const std::string& column_key_metadata,
|
||||
- const std::string& aad,
|
||||
- bool metadata = false);
|
||||
-
|
||||
- encryption::AesDecryptor* GetMetaAesDecryptor(size_t key_size);
|
||||
- encryption::AesDecryptor* GetDataAesDecryptor(size_t key_size);
|
||||
-
|
||||
- int MapKeyLenToDecryptorArrayIndex(int key_len);
|
||||
-};
|
||||
-
|
||||
-} // namespace parquet
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
+#include "internal_file_decryptor_19.h"
|
||||
+#else
|
||||
+#include "internal_file_decryptor_20.h"
|
||||
+#endif
|
||||
--- ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/s3select_parquet_intrf.h.orig 2024-10-06 07:18:41.000000000 -0400
|
||||
+++ ceph-20.0.0-2362-ga9d20fc0/src/s3select/include/s3select_parquet_intrf.h 2025-07-08 07:40:29.816727417 -0400
|
||||
@@ -1002,6 +1002,7 @@
|
||||
throw ParquetException("Encrypted files cannot contain more than 32767 row groups");
|
||||
}
|
||||
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
// The column is encrypted
|
||||
std::shared_ptr<::parquet::Decryptor> meta_decryptor;
|
||||
std::shared_ptr<Decryptor> data_decryptor;
|
||||
@@ -1035,6 +1036,25 @@
|
||||
false,
|
||||
#endif
|
||||
properties_.memory_pool(), &ctx);
|
||||
+#else
|
||||
+ // Arrow 20+ version uses factory functions instead of shared_ptr for decryptors
|
||||
+ std::function<std::unique_ptr<Decryptor>()> meta_decryptor_factory =
|
||||
+ InternalFileDecryptor::GetColumnMetaDecryptorFactory(file_decryptor_.get(), crypto_metadata.get());
|
||||
+ std::function<std::unique_ptr<Decryptor>()> data_decryptor_factory =
|
||||
+ InternalFileDecryptor::GetColumnDataDecryptorFactory(file_decryptor_.get(), crypto_metadata.get());
|
||||
+
|
||||
+ const CryptoContext ctx {
|
||||
+ col->has_dictionary_page(),
|
||||
+ row_group_ordinal_,
|
||||
+ static_cast<int16_t>(i),
|
||||
+ meta_decryptor_factory,
|
||||
+ data_decryptor_factory,
|
||||
+ };
|
||||
+
|
||||
+ return PageReader::Open(stream, col->num_values(), col->compression(),
|
||||
+ false,
|
||||
+ properties_.memory_pool(), &ctx);
|
||||
+#endif
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -1071,7 +1091,9 @@
|
||||
}
|
||||
|
||||
void Close() override {
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
if (file_decryptor_) file_decryptor_->WipeOutDecryptionKeys();
|
||||
+#endif
|
||||
}
|
||||
|
||||
std::shared_ptr<RowGroupReader> GetRowGroup(int i) override {
|
||||
@@ -1249,9 +1271,17 @@
|
||||
// Handle AAD prefix
|
||||
EncryptionAlgorithm algo = file_crypto_metadata->encryption_algorithm();
|
||||
std::string file_aad = HandleAadPrefix(file_decryption_properties, algo);
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
file_decryption_properties, file_aad, algo.algorithm,
|
||||
file_crypto_metadata->key_metadata(), properties_.memory_pool());
|
||||
+#else
|
||||
+ // Arrow 20+ takes a shared_ptr to FileDecryptionProperties
|
||||
+ file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
+ std::shared_ptr<FileDecryptionProperties>(file_decryption_properties),
|
||||
+ file_aad, algo.algorithm,
|
||||
+ file_crypto_metadata->key_metadata(), properties_.memory_pool());
|
||||
+#endif
|
||||
|
||||
int64_t metadata_offset = source_size_ - kFooterSize - footer_len + crypto_metadata_len;
|
||||
uint32_t metadata_len = footer_len - crypto_metadata_len;
|
||||
@@ -1282,9 +1312,18 @@
|
||||
EncryptionAlgorithm algo = file_metadata_->encryption_algorithm();
|
||||
// Handle AAD prefix
|
||||
std::string file_aad = HandleAadPrefix(file_decryption_properties, algo);
|
||||
+#if ARROW_VERSION_MAJOR < 20
|
||||
file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
file_decryption_properties, file_aad, algo.algorithm,
|
||||
file_metadata_->footer_signing_key_metadata(), properties_.memory_pool());
|
||||
+#else
|
||||
+ // Arrow 20+ takes a shared_ptr to FileDecryptionProperties
|
||||
+ file_decryptor_ = std::make_shared<::parquet::InternalFileDecryptor>(
|
||||
+ std::shared_ptr<FileDecryptionProperties>(file_decryption_properties),
|
||||
+ file_aad, algo.algorithm,
|
||||
+ file_metadata_->footer_signing_key_metadata(), properties_.memory_pool());
|
||||
+ // In Arrow 20+, no need to set file_decryptor in metadata
|
||||
+#endif
|
||||
// set the InternalFileDecryptor in the metadata as well, as it's used
|
||||
// for signature verification and for ColumnChunkMetaData creation.
|
||||
#if GAL_set_file_decryptor_declare_private
|
||||
@@ -0,0 +1,10 @@
|
||||
--- ceph-20.0.0-2099-gc62cbb7d/src/json_spirit/json_spirit_reader_template.h.orig 2025-06-09 11:56:21.534808695 -0400
|
||||
+++ ceph-20.0.0-2099-gc62cbb7d/src/json_spirit/json_spirit_reader_template.h 2025-06-09 12:01:56.358334353 -0400
|
||||
@@ -136,6 +136,7 @@
|
||||
{
|
||||
typedef typename String_type::const_iterator Iter_type;
|
||||
|
||||
+ if( end - begin < 1 ) return String_type();
|
||||
if( end - begin < 2 ) return String_type( begin, end );
|
||||
|
||||
String_type result;
|
||||
@@ -0,0 +1,13 @@
|
||||
--- ceph-20.2.0/src/CMakeLists.txt.orig 2026-01-20 14:31:56.764231793 -0500
|
||||
+++ ceph-20.2.0/src/CMakeLists.txt 2026-01-20 14:35:21.258787691 -0500
|
||||
@@ -1051,8 +1051,8 @@
|
||||
if(WITH_RADOSGW)
|
||||
if(WITH_RADOSGW_SELECT_PARQUET OR WITH_RADOSGW_ARROW_FLIGHT)
|
||||
if(WITH_SYSTEM_ARROW)
|
||||
- find_package(Arrow 4 REQUIRED QUIET)
|
||||
- find_package(Parquet 4 REQUIRED QUIET)
|
||||
+ find_package(Arrow REQUIRED QUIET)
|
||||
+ find_package(Parquet REQUIRED QUIET)
|
||||
else()
|
||||
# find arrow's dependencies
|
||||
if (WITH_SYSTEM_UTF8PROC)
|
||||
@@ -0,0 +1,22 @@
|
||||
--- ceph-20.0.0-2787-g838ba95e/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/base/options.h.orig 2025-07-31 10:18:56.636528168 -0400
|
||||
+++ ceph-20.0.0-2787-g838ba95e/src/jaegertracing/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/base/options.h 2025-07-31 10:19:12.923329646 -0400
|
||||
@@ -70,7 +70,7 @@
|
||||
// Include a standard library header to allow configuration based on the
|
||||
// standard library in use.
|
||||
#ifdef __cplusplus
|
||||
-#include <ciso646>
|
||||
+#include <iso646.h>
|
||||
#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
--- ceph-20.2.0/src/boost/boost/redis/adapter/detail/adapters.hpp.orig 2026-02-06 09:54:39.748078321 -0500
|
||||
+++ ceph-20.2.0/src/boost/boost/redis/adapter/detail/adapters.hpp 2026-02-06 09:55:02.427664048 -0500
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <charconv>
|
||||
|
||||
// See https://stackoverflow.com/a/31658120/1077832
|
||||
-#include<ciso646>
|
||||
+#include<iso646.h>
|
||||
#ifdef _LIBCPP_VERSION
|
||||
#else
|
||||
#include <cstdlib>
|
||||
@@ -0,0 +1,10 @@
|
||||
--- ceph-20.2.0/src/crimson/common/smp_helpers.h.orig 2025-12-04 10:38:34.906915674 -0500
|
||||
+++ ceph-20.2.0/src/crimson/common/smp_helpers.h 2025-12-04 10:38:45.200845804 -0500
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <optional>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
+#include <coroutine>
|
||||
|
||||
#include <seastar/core/shared_future.hh>
|
||||
#include <seastar/core/smp.hh>
|
||||
@@ -0,0 +1,70 @@
|
||||
--- ceph-20.2.0/src/common/Formatter.h.orig 2026-01-06 17:47:18.437014517 -0500
|
||||
+++ ceph-20.2.0/src/common/Formatter.h 2026-01-06 17:47:53.015404074 -0500
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <stdarg.h>
|
||||
+#include <cstdint>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
--- ceph-20.2.0/src/mds/Locker.cc.orig 2026-01-07 10:34:12.731210930 -0500
|
||||
+++ ceph-20.2.0/src/mds/Locker.cc 2026-01-07 10:34:35.627823155 -0500
|
||||
@@ -4489,7 +4489,7 @@
|
||||
dout(7) << "handle_client_lease client." << client << " renew on " << *dn
|
||||
<< (!dn->lock.can_lease(client)?", revoking lease":"") << dendl;
|
||||
if (dn->lock.can_lease(client)) {
|
||||
- auto reply = make_message<MClientLease>(*m);
|
||||
+ auto reply = ceph::make_message<MClientLease>(*m);
|
||||
int pool = 1; // fixme.. do something smart!
|
||||
reply->h.duration_ms = (int)(1000 * mdcache->client_lease_durations[pool]);
|
||||
reply->h.seq = ++l->seq;
|
||||
--- ceph-20.2.0/src/mds/Server.cc.orig 2026-01-07 11:27:13.532097596 -0500
|
||||
+++ ceph-20.2.0/src/mds/Server.cc 2026-01-07 11:28:42.411581266 -0500
|
||||
@@ -150,7 +150,7 @@
|
||||
}
|
||||
}
|
||||
batch_reqs.clear();
|
||||
- server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
|
||||
+ server->reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
|
||||
}
|
||||
void print(std::ostream& o) const override {
|
||||
o << "[batch front=" << *mdr << "]";
|
||||
@@ -2142,7 +2142,7 @@
|
||||
dout(20) << __func__ << ": batch head " << *mdr << dendl;
|
||||
mdr->release_batch_op()->respond(r);
|
||||
} else {
|
||||
- reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
|
||||
+ reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
|
||||
}
|
||||
} else if (mdr->internal_op > -1) {
|
||||
dout(10) << __func__ << ": completing with result " << cpp_strerror(r) << " on internal " << *mdr << dendl;
|
||||
@@ -2290,7 +2290,7 @@
|
||||
}
|
||||
|
||||
|
||||
- auto reply = make_message<MClientReply>(*req, 0);
|
||||
+ auto reply = ceph::make_message<MClientReply>(*req, 0);
|
||||
reply->set_unsafe();
|
||||
|
||||
// mark xlocks "done", indicating that we are exposing uncommitted changes.
|
||||
@@ -2632,7 +2632,7 @@
|
||||
req->get_op() != CEPH_MDS_OP_OPEN &&
|
||||
req->get_op() != CEPH_MDS_OP_CREATE)) {
|
||||
dout(5) << "already completed " << req->get_reqid() << dendl;
|
||||
- auto reply = make_message<MClientReply>(*req, 0);
|
||||
+ auto reply = ceph::make_message<MClientReply>(*req, 0);
|
||||
if (created != inodeno_t()) {
|
||||
bufferlist extra;
|
||||
set_reply_extra_bl(req, created, extra);
|
||||
--- ceph-20.2.0/src/mds/MDCache.cc.orig 2026-01-07 11:28:48.882470871 -0500
|
||||
+++ ceph-20.2.0/src/mds/MDCache.cc 2026-01-07 11:29:12.405069562 -0500
|
||||
@@ -10535,7 +10535,7 @@
|
||||
|
||||
|
||||
CInode *cur = 0;
|
||||
- auto reply = make_message<MDiscoverReply>(*dis);
|
||||
+ auto reply = ceph::make_message<MDiscoverReply>(*dis);
|
||||
|
||||
snapid_t snapid = dis->get_snapid();
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-20.2.0/src/rgw/driver/dbstore/CMakeLists.txt.orig 2026-01-27 19:53:53.780108462 -0500
|
||||
+++ ceph-20.2.0/src/rgw/driver/dbstore/CMakeLists.txt 2026-01-28 07:30:04.861741687 -0500
|
||||
@@ -34,7 +34,7 @@
|
||||
list(APPEND link_targets jaeger_base)
|
||||
endif()
|
||||
list(APPEND link_targets rgw_common)
|
||||
-target_link_libraries(dbstore_lib PUBLIC ${link_targets})
|
||||
+target_link_libraries(dbstore_lib PUBLIC ${link_targets} PRIVATE rgw_a)
|
||||
|
||||
set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} dbstore_lib)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
--- ceph-20.2.0/src/jaegertracing/opentelemetry-cpp/CMakeLists.txt.orig 2026-02-17 08:17:06.372917033 -0500
|
||||
+++ ceph-20.2.0/src/jaegertracing/opentelemetry-cpp/CMakeLists.txt 2026-02-17 08:17:44.026323618 -0500
|
||||
@@ -1,4 +1,4 @@
|
||||
-cmake_minimum_required(VERSION 3.1)
|
||||
+cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# See https://cmake.org/cmake/help/v3.3/policy/CMP0057.html required by certain
|
||||
# versions of gtest
|
||||
@@ -0,0 +1,14 @@
|
||||
--- ceph-20.2.0/src/rgw/rgw_lua_utils.cc.orig 2026-02-17 11:46:05.677894827 -0500
|
||||
+++ ceph-20.2.0/src/rgw/rgw_lua_utils.cc 2026-02-17 11:50:06.106569226 -0500
|
||||
@@ -115,7 +115,11 @@
|
||||
|
||||
// create new lua state together with reference to the guard
|
||||
lua_State* newstate(lua_state_guard* guard) {
|
||||
+#if (LUA_VERSION_NUM < 505)
|
||||
lua_State* L = lua_newstate(allocator, guard);
|
||||
+#else
|
||||
+ lua_State* L = lua_newstate(allocator, guard, 314159);
|
||||
+#endif
|
||||
if (L) {
|
||||
lua_atpanic(L, [](lua_State* L) -> int {
|
||||
const char* msg = lua_tostring(L, -1);
|
||||
@@ -1,58 +0,0 @@
|
||||
commit f9aea9105b6c1a8d7bff0ec0675f84f2ffb1db6f
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Wed Dec 20 14:16:19 2023 +0100
|
||||
|
||||
tracing: Fix C type errors in librados tracing
|
||||
|
||||
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@redhat.com>
|
||||
|
||||
diff --git a/src/tracing/librados.tp b/src/tracing/librados.tp
|
||||
index 8b5e78ef15..8e116124b8 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 3e07f9de8e..03449ab588 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*
|
||||
@@ -1,178 +0,0 @@
|
||||
commit a49d154f4a8e493baf2296a15c7b5c56cd25e993
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Wed Dec 20 14:59:19 2023 +0100
|
||||
|
||||
pybind: Fix C type errors in Cython-generated Python bindings
|
||||
|
||||
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@redhat.com>
|
||||
|
||||
diff --git a/src/pybind/rbd/c_rbd.pxd b/src/pybind/rbd/c_rbd.pxd
|
||||
index 885f7bd46a..bda23bbc47 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 11872bd814..364f965fba 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 fcb2fb3470..f59ba23f0f 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 ca893a5bb8..806d4df75d 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 9bbcdfff58..d210a70bbb 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,
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake
|
||||
index 2e92132366..3cb1e3d958 100644
|
||||
--- a/cmake/modules/BuildBoost.cmake
|
||||
+++ b/cmake/modules/BuildBoost.cmake
|
||||
@@ -62,7 +62,7 @@ function(do_build_boost version)
|
||||
else()
|
||||
list(APPEND boost_features "address-model=32")
|
||||
endif()
|
||||
- set(BOOST_CXXFLAGS "-fPIC -w") # check on arm, etc <---XXX
|
||||
+ set(BOOST_CXXFLAGS "-fPIC -w -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -ftemplate-depth-1024 -fno-new-ttp-matching -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") # check on arm, etc <---XXX
|
||||
list(APPEND boost_features "cxxflags=${BOOST_CXXFLAGS}")
|
||||
|
||||
set(boost_with_libs)
|
||||
@@ -1 +1 @@
|
||||
SHA512 (ceph-18.2.3.tar.gz) = 224349dcf531570ba0bde63b952f67d34128d76a24f59c6dade487257fbcee1f31dbf45e14e1716da051a6c016080cfa162a86803e08c23e7da1c52605428903
|
||||
SHA512 (ceph-20.2.0.tar.gz) = 5678586fe663ddc3d8ca4ded7a2b811025784abc5f493164d2f1e590608a72176a722d5984d83400c501deeb526e0a108c2e7e3d969dea7bf6ce0d0b42190ea5
|
||||
|
||||
Reference in New Issue
Block a user