Compare commits
164 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| de756033dc | |||
| d5e008dea3 | |||
| f4f1584c5a | |||
| 181ccbff04 | |||
| 89cb92cf8f | |||
| 8d5516c09d | |||
| 08bc305406 | |||
| 44d9423cef | |||
| 8d1e59bf45 | |||
| 8c750b960c | |||
| abdbef9e0e | |||
| 43b4197d44 | |||
| a1b7bb3569 | |||
| b0c18eeafc | |||
| 9c55220808 | |||
| 8a6545912f | |||
| e7a5495ba4 | |||
| 7c50250c92 | |||
| 1217c82a28 | |||
| 8d6f5530e7 | |||
| fe9cf79756 | |||
| 0d4b487537 | |||
| 13c95af02e | |||
| c8153cb68b | |||
| a82adb1178 | |||
| 0da31a640b | |||
| c5116a4d3d | |||
| f6c80111f0 | |||
| 65809728d6 | |||
| d7454e4e0a | |||
| 804031cde8 | |||
| f126724be1 | |||
| 9e94fbdfaf | |||
| b070296ace | |||
| 98f7173b37 | |||
| 4bd118debc | |||
| 78e076b5af | |||
| 976474060f | |||
| d60970c7cd | |||
| 4a2e67ce27 | |||
| 5cee54462c | |||
| 5e9e44ba9d | |||
| 03686a5492 | |||
| c4b36fdbe9 | |||
| ba585a6512 | |||
| 3aa610e268 | |||
| af4b4952f8 | |||
| cbed2814c2 | |||
| 92605c05f0 | |||
| fc46f52db9 | |||
| 7ccae1fdf3 | |||
| 1fdc7e124d | |||
| be247e2321 | |||
| 7d89214d12 | |||
| 189f095ebc | |||
| a7b4842132 | |||
| 07c18dd027 | |||
| 415b03ce74 | |||
| 3d9c93f7ab | |||
| 59dc7d2595 | |||
| bf4b7aed66 | |||
| 501243427a | |||
| 9e63d61879 | |||
| 19975cf06e | |||
| 7b01ed79a0 | |||
| f871a2726e | |||
| f52ea67e29 | |||
| df3db8be0e | |||
| da3f27e563 | |||
| d5be4a1cc6 | |||
| 950231a5bb | |||
| b774776eb5 | |||
| be7e755323 | |||
| 95e779c6c1 | |||
| 73dfbc7ffd | |||
| be70cfd29d | |||
| 2e1f76369c | |||
| 6daabd97d4 | |||
| fbd3e48156 | |||
| 6fc0065262 | |||
| df740a5e36 | |||
| cb586a7643 | |||
| 447d02458a | |||
| f0623329e5 | |||
| 624de89cce | |||
| 0e58e2f39c | |||
| 66d0b21911 | |||
| abcc0b7100 | |||
| cc4e5c3669 | |||
| 5c46ad7f7e | |||
| 5904d137cf | |||
| 21ae44b9d8 | |||
| ab7f0da7e2 | |||
| db4f36a951 | |||
| 0654a1fdc4 | |||
| 1e83c5c029 | |||
| e4cc93f966 | |||
| 26fd4ffbc6 | |||
| d463ff311e | |||
| ef8dc618c7 | |||
| fcc245cca3 | |||
| acfede696d | |||
| d6834c5aab | |||
| a09febb7ef | |||
| 9cdcdd7459 | |||
| 6c126d30be | |||
| 3913155591 | |||
| 648550e64f | |||
| 4deb491174 | |||
| d8a9bdfabe | |||
| 0d98dedd32 | |||
| 16a5d9d365 | |||
| b7bbd8375e | |||
| 7816ec5783 | |||
| e7d942d1e6 | |||
| e559532d4b | |||
| 2abb0a0f7c | |||
| ce8aeac3f1 | |||
| c5f02885fe | |||
| 0bbc5f85a7 | |||
| b0cac5e936 | |||
| a384bd1238 | |||
| c7349cff7f | |||
| f706627b65 | |||
| 0f1e9aab49 | |||
| 0c11deb6e7 | |||
| f2665f8f56 | |||
| d472f02868 | |||
| 9ccdbdeb2a | |||
| f8c0702a5e | |||
| 51d56299ba | |||
| f92c59c650 | |||
| 89637a46f7 | |||
| c3ded1ba4d | |||
| 229de7b3ab | |||
| d7375fe89d | |||
| 8ceca65767 | |||
| 295d99c80e | |||
| 8b70fc0981 | |||
| 23a12c000d | |||
| fd9573057c | |||
| 13fa69ddf9 | |||
| 315d3a8c86 | |||
| fa25767214 | |||
| 2eee2bbcbd | |||
| 5846ea0721 | |||
| 6ad252c21d | |||
| 621cf4d6f7 | |||
| a9b0fc4948 | |||
| fcfe376de3 | |||
| 5ca819502b | |||
| 34869f41a8 | |||
| aa192ecb91 | |||
| 07ddec03dc | |||
| 82de3b23ac | |||
| e14ca57795 | |||
| 840cecd85d | |||
| 2b3fa8bef4 | |||
| 4c70f88757 | |||
| 201099b1e3 | |||
| 97da17461c | |||
| 8bb9133870 | |||
| d73f4ea8b1 | |||
| 96e17e7360 |
@@ -1,11 +0,0 @@
|
||||
--- ceph-13.1.0/src/spdk/lib/blob/blobstore.c.orig 2018-05-08 16:04:30.329933925 -0400
|
||||
+++ ceph-13.1.0/src/spdk/lib/blob/blobstore.c 2018-05-08 16:04:55.240933925 -0400
|
||||
@@ -2947,7 +2947,7 @@
|
||||
|
||||
/* START spdk_blob_resize */
|
||||
int
|
||||
-spdk_blob_resize(struct spdk_blob *_blob, uint64_t sz)
|
||||
+spdk_blob_resize(struct spdk_blob *_blob, size_t sz)
|
||||
{
|
||||
struct spdk_blob_data *blob = __blob_to_data(_blob);
|
||||
int rc;
|
||||
@@ -0,0 +1,55 @@
|
||||
--- ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s.orig 2020-05-26 08:34:32.226201974 -0400
|
||||
+++ ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s 2020-05-26 17:19:32.497201974 -0400
|
||||
@@ -1,5 +1,5 @@
|
||||
;
|
||||
-; Copyright 2012-2013 Intel Corporation All Rights Reserved.
|
||||
+; Copyright 2012-2015 Intel Corporation All Rights Reserved.
|
||||
; All rights reserved.
|
||||
;
|
||||
; http://opensource.org/licenses/BSD-3-Clause
|
||||
@@ -59,6 +59,19 @@
|
||||
xor rbx, rbx ;; rbx = crc1 = 0;
|
||||
xor r10, r10 ;; r10 = crc2 = 0;
|
||||
|
||||
+ cmp len, %%bSize*3*2
|
||||
+ jbe %%non_prefetch
|
||||
+
|
||||
+ %assign i 0
|
||||
+ %rep %%bSize/8 - 1
|
||||
+ crc32 rax, bufptmp ;; update crc0
|
||||
+ crc32 rbx, bufptmp ;; update crc1
|
||||
+ crc32 r10, bufptmp ;; update crc2
|
||||
+ %assign i (i+8)
|
||||
+ %endrep
|
||||
+ jmp %%next %+ %1
|
||||
+
|
||||
+%%non_prefetch:
|
||||
%assign i 0
|
||||
%rep %%bSize/8 - 1
|
||||
crc32 rax, bufptmp ;; update crc0
|
||||
@@ -66,6 +79,8 @@
|
||||
crc32 r10, bufptmp ;; update crc2
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
+
|
||||
+%%next %+ %1:
|
||||
crc32 rax, bufptmp ;; update crc0
|
||||
crc32 rbx, bufptmp ;; update crc1
|
||||
; SKIP ;crc32 r10, bufptmp ;; update crc2
|
||||
@@ -180,12 +195,15 @@
|
||||
%define crc_init_dw r8d
|
||||
%endif
|
||||
|
||||
-
|
||||
+ endbranch
|
||||
push rdi
|
||||
push rbx
|
||||
|
||||
mov rax, crc_init ;; rax = crc_init;
|
||||
|
||||
+ cmp len, 8
|
||||
+ jb less_than_8
|
||||
+
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--- ceph-12.1.1.orig/src/rocksdb/util/murmurhash.cc 2017-04-27 01:13:46.000000000 +0100
|
||||
+++ ceph-12.1.1.orig/src/rocksdb/util/murmurhash.cc 2017-07-25 11:37:28.910266684 +0100
|
||||
@@ -113,8 +113,8 @@ unsigned int MurmurHash2 ( const void *
|
||||
|
||||
switch(len)
|
||||
{
|
||||
- case 3: h ^= data[2] << 16;
|
||||
- case 2: h ^= data[1] << 8;
|
||||
+ case 3: h ^= data[2] << 16; // fallthrough
|
||||
+ case 2: h ^= data[1] << 8; // fallthrough
|
||||
case 1: h ^= data[0];
|
||||
h *= m;
|
||||
};
|
||||
@@ -1,127 +0,0 @@
|
||||
From 2f0a7153460acc3f21462236f470ec3471fa2ee1 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Ranto <branto@redhat.com>
|
||||
Date: Mon, 31 Jul 2017 19:50:23 +0200
|
||||
Subject: [PATCH] cmake: Support ppc64
|
||||
|
||||
The ppc64 support requires a couple of changes:
|
||||
- adding the ppc64 support to cmake
|
||||
- changing optimized crc32 code to compile on ppc64le only
|
||||
- moving ifdef condition before crc32_align to avoid defined but not
|
||||
used warning
|
||||
|
||||
Signed-off-by: Boris Ranto <branto@redhat.com>
|
||||
---
|
||||
cmake/modules/SIMDExt.cmake | 15 ++++++++++++++-
|
||||
src/CMakeLists.txt | 4 +++-
|
||||
src/arch/ppc.c | 8 ++++----
|
||||
src/common/crc32c_ppc.c | 6 +++---
|
||||
4 files changed, 24 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/cmake/modules/SIMDExt.cmake b/cmake/modules/SIMDExt.cmake
|
||||
index 5330835..c47667d 100644
|
||||
--- a/cmake/modules/SIMDExt.cmake
|
||||
+++ b/cmake/modules/SIMDExt.cmake
|
||||
@@ -109,7 +109,20 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64")
|
||||
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le")
|
||||
set(HAVE_PPC64LE 1)
|
||||
- message(STATUS " we are ppc64le")
|
||||
+ message(STATUS " we are ppc64")
|
||||
+ CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC)
|
||||
+ if(HAS_ALTIVEC)
|
||||
+ message(STATUS " HAS_ALTIVEC yes")
|
||||
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec")
|
||||
+ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -maltivec")
|
||||
+ endif()
|
||||
+ CHECK_C_COMPILER_FLAG("-mcpu=power8" HAVE_POWER8)
|
||||
+ if(HAVE_POWER8)
|
||||
+ message(STATUS " HAVE_POWER8 yes")
|
||||
+ endif()
|
||||
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(power|ppc)64")
|
||||
+ set(HAVE_PPC64 1)
|
||||
+ message(STATUS " we are ppc64")
|
||||
CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC)
|
||||
if(HAS_ALTIVEC)
|
||||
message(STATUS " HAS_ALTIVEC yes")
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 66f0c14..38d1913 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -568,7 +568,9 @@ if(HAVE_INTEL)
|
||||
endif(HAVE_GOOD_YASM_ELF64)
|
||||
elseif(HAVE_POWER8)
|
||||
list(APPEND libcommon_files
|
||||
- common/crc32c_ppc.c
|
||||
+ common/crc32c_ppc.c)
|
||||
+elseif(HAVE_PPC64LE)
|
||||
+ list(APPEND libcommon_files
|
||||
common/crc32c_ppc_asm.S
|
||||
common/crc32c_ppc_fast_zero_asm.S)
|
||||
endif(HAVE_INTEL)
|
||||
diff --git a/src/arch/ppc.c b/src/arch/ppc.c
|
||||
index f21e2fe..11d3a49 100644
|
||||
--- a/src/arch/ppc.c
|
||||
+++ b/src/arch/ppc.c
|
||||
@@ -14,10 +14,10 @@ int ceph_arch_ppc_crc32 = 0;
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
-#if __linux__ && __powerpc64__
|
||||
+#ifdef HAVE_PPC64LE
|
||||
#include <sys/auxv.h>
|
||||
#include <asm/cputable.h>
|
||||
-#endif /* __linux__ && __powerpc64__ */
|
||||
+#endif /* HAVE_PPC64LE */
|
||||
|
||||
#ifndef PPC_FEATURE2_VEC_CRYPTO
|
||||
#define PPC_FEATURE2_VEC_CRYPTO 0x02000000
|
||||
@@ -31,9 +31,9 @@ int ceph_arch_ppc_probe(void)
|
||||
{
|
||||
ceph_arch_ppc_crc32 = 0;
|
||||
|
||||
-#if __linux__ && __powerpc64__
|
||||
+#ifdef HAVE_PPC64LE
|
||||
if (getauxval(AT_HWCAP2) & PPC_FEATURE2_VEC_CRYPTO) ceph_arch_ppc_crc32 = 1;
|
||||
-#endif /* __linux__ && __powerpc64__ */
|
||||
+#endif /* HAVE_PPC64LE */
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/common/crc32c_ppc.c b/src/common/crc32c_ppc.c
|
||||
index 43756e2..52fd1c4 100644
|
||||
--- a/src/common/crc32c_ppc.c
|
||||
+++ b/src/common/crc32c_ppc.c
|
||||
@@ -20,6 +20,7 @@
|
||||
#define VMX_ALIGN 16
|
||||
#define VMX_ALIGN_MASK (VMX_ALIGN-1)
|
||||
|
||||
+#ifdef HAVE_PPC64LE
|
||||
#ifdef REFLECT
|
||||
static unsigned int crc32_align(unsigned int crc, unsigned char const *p,
|
||||
unsigned long len)
|
||||
@@ -38,7 +39,6 @@ static unsigned int crc32_align(unsigned int crc, unsigned char const *p,
|
||||
}
|
||||
#endif
|
||||
|
||||
-#ifdef HAVE_POWER8
|
||||
static inline unsigned long polynomial_multiply(unsigned int a, unsigned int b) {
|
||||
vector unsigned int va = {a, 0, 0, 0};
|
||||
vector unsigned int vb = {b, 0, 0, 0};
|
||||
@@ -134,7 +134,7 @@ uint32_t ceph_crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len)
|
||||
return crc;
|
||||
}
|
||||
|
||||
-#else /* HAVE_POWER8 */
|
||||
+#else /* HAVE_PPC64LE */
|
||||
|
||||
/* This symbol has to exist on non-ppc architectures (and on legacy
|
||||
* ppc systems using power7 or below) in order to compile properly
|
||||
@@ -145,4 +145,4 @@ uint32_t ceph_crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#endif /* HAVE_POWER8 */
|
||||
+#endif /* HAVE_PPC64LE */
|
||||
--
|
||||
2.9.4
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
|
||||
index 65ba10b0f1..eeedc29c37 100644
|
||||
--- a/src/common/CMakeLists.txt
|
||||
+++ b/src/common/CMakeLists.txt
|
||||
@@ -165,7 +165,7 @@ elseif(HAVE_ARMV8_CRC)
|
||||
crc32c_aarch64.c)
|
||||
endif(HAVE_INTEL)
|
||||
|
||||
-add_library(crc32 ${crc32_srcs})
|
||||
+add_library(crc32 STATIC ${crc32_srcs})
|
||||
if(HAVE_ARMV8_CRC)
|
||||
set_target_properties(crc32 PROPERTIES
|
||||
COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}")
|
||||
@@ -1,31 +0,0 @@
|
||||
From 74a754690736f6608b0d4d9c807df0bd777a129d Mon Sep 17 00:00:00 2001
|
||||
From: Boris Ranto <branto@redhat.com>
|
||||
Date: Fri, 8 Dec 2017 00:21:38 +0100
|
||||
Subject: [PATCH] librbd: Conditionally import TrimRequest.cc
|
||||
|
||||
We include TrimRequest.cc in librbd tests at two places:
|
||||
- operation/test_mock_TrimRequest.cc
|
||||
- operation/test_mock_ResizeRequest.cc
|
||||
|
||||
That causes linking errors when doing the builds because some of the
|
||||
structures are defined twice.
|
||||
|
||||
Signed-off-by: Boris Ranto <branto@redhat.com>
|
||||
---
|
||||
src/librbd/operation/TrimRequest.cc | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/librbd/operation/TrimRequest.cc b/src/librbd/operation/TrimRequest.cc
|
||||
index 28f2deb..929ca51 100644
|
||||
--- a/src/librbd/operation/TrimRequest.cc
|
||||
+++ b/src/librbd/operation/TrimRequest.cc
|
||||
@@ -362,4 +362,6 @@ void TrimRequest<I>::send_finish(int r) {
|
||||
} // namespace operation
|
||||
} // namespace librbd
|
||||
|
||||
+#ifndef TEST_F
|
||||
template class librbd::operation::TrimRequest<librbd::ImageCtx>;
|
||||
+#endif
|
||||
--
|
||||
2.9.5
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
--- ceph-15.1.0/src/common/bit_str.h.orig 2020-02-03 09:47:20.047149798 -0500
|
||||
+++ ceph-15.1.0/src/common/bit_str.h 2020-02-03 09:47:50.213149798 -0500
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <cstdint>
|
||||
#include <iosfwd>
|
||||
#include <functional>
|
||||
+#include <ostream>
|
||||
|
||||
namespace ceph {
|
||||
class Formatter;
|
||||
--- ceph-15.2.4/src/global/signal_handler.h.orig 2020-07-17 12:57:54.763628429 -0400
|
||||
+++ ceph-15.2.4/src/global/signal_handler.h 2020-07-17 12:58:10.610628429 -0400
|
||||
@@ -16,6 +16,8 @@
|
||||
#define CEPH_GLOBAL_SIGNAL_HANDLER_H
|
||||
|
||||
#include <signal.h>
|
||||
+#include <string>
|
||||
+
|
||||
#include "acconfig.h"
|
||||
|
||||
typedef void (*signal_handler_t)(int);
|
||||
@@ -1,155 +0,0 @@
|
||||
--- ceph-12.2.3/src/rocksdb/table/block.h.orig 2018-02-22 07:49:38.044899631 -0500
|
||||
+++ ceph-12.2.3/src/rocksdb/table/block.h 2018-02-22 07:58:55.855899631 -0500
|
||||
@@ -65,7 +65,8 @@
|
||||
|
||||
// Create bitmap and set all the bits to 0
|
||||
bitmap_ = new std::atomic<uint32_t>[bitmap_size];
|
||||
- memset(bitmap_, 0, bitmap_size * kBytesPersEntry);
|
||||
+ // memset(bitmap_, 0, bitmap_size * kBytesPersEntry);
|
||||
+ { unsigned i = 0; for (; i < bitmap_size;) bitmap_[i++] = 0; }
|
||||
|
||||
RecordTick(GetStatistics(), READ_AMP_TOTAL_READ_BYTES,
|
||||
num_bits_needed << bytes_per_bit_pow_);
|
||||
--- ceph-12.2.3/src/rocksdb/db/c.cc.orig 2018-02-22 08:14:56.033899631 -0500
|
||||
+++ ceph-12.2.3/src/rocksdb/db/c.cc 2018-02-22 10:06:39.759899631 -0500
|
||||
@@ -1322,11 +1322,6 @@
|
||||
b->rep.PutLogData(Slice(blob, len));
|
||||
}
|
||||
|
||||
-void rocksdb_writebatch_iterate(
|
||||
- rocksdb_writebatch_t* b,
|
||||
- void* state,
|
||||
- void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
|
||||
- void (*deleted)(void*, const char* k, size_t klen)) {
|
||||
class H : public WriteBatch::Handler {
|
||||
public:
|
||||
void* state_;
|
||||
@@ -1339,6 +1334,12 @@
|
||||
(*deleted_)(state_, key.data(), key.size());
|
||||
}
|
||||
};
|
||||
+
|
||||
+void rocksdb_writebatch_iterate(
|
||||
+ rocksdb_writebatch_t* b,
|
||||
+ void* state,
|
||||
+ void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
|
||||
+ void (*deleted)(void*, const char* k, size_t klen)) {
|
||||
H handler;
|
||||
handler.state_ = state;
|
||||
handler.put_ = put;
|
||||
@@ -1579,18 +1580,6 @@
|
||||
void* state,
|
||||
void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen),
|
||||
void (*deleted)(void*, const char* k, size_t klen)) {
|
||||
- class H : public WriteBatch::Handler {
|
||||
- public:
|
||||
- void* state_;
|
||||
- void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen);
|
||||
- void (*deleted_)(void*, const char* k, size_t klen);
|
||||
- virtual void Put(const Slice& key, const Slice& value) override {
|
||||
- (*put_)(state_, key.data(), key.size(), value.data(), value.size());
|
||||
- }
|
||||
- virtual void Delete(const Slice& key) override {
|
||||
- (*deleted_)(state_, key.data(), key.size());
|
||||
- }
|
||||
- };
|
||||
H handler;
|
||||
handler.state_ = state;
|
||||
handler.put_ = put;
|
||||
@@ -2532,13 +2521,9 @@
|
||||
delete filter;
|
||||
}
|
||||
|
||||
-rocksdb_filterpolicy_t* rocksdb_filterpolicy_create_bloom_format(int bits_per_key, bool original_format) {
|
||||
- // Make a rocksdb_filterpolicy_t, but override all of its methods so
|
||||
- // they delegate to a NewBloomFilterPolicy() instead of user
|
||||
- // supplied C functions.
|
||||
- struct Wrapper : public rocksdb_filterpolicy_t {
|
||||
+ struct WrapperFP : public rocksdb_filterpolicy_t {
|
||||
const FilterPolicy* rep_;
|
||||
- ~Wrapper() { delete rep_; }
|
||||
+ ~WrapperFP() { delete rep_; }
|
||||
const char* Name() const override { return rep_->Name(); }
|
||||
void CreateFilter(const Slice* keys, int n,
|
||||
std::string* dst) const override {
|
||||
@@ -2549,11 +2534,16 @@
|
||||
}
|
||||
static void DoNothing(void*) { }
|
||||
};
|
||||
- Wrapper* wrapper = new Wrapper;
|
||||
+
|
||||
+rocksdb_filterpolicy_t* rocksdb_filterpolicy_create_bloom_format(int bits_per_key, bool original_format) {
|
||||
+ // Make a rocksdb_filterpolicy_t, but override all of its methods so
|
||||
+ // they delegate to a NewBloomFilterPolicy() instead of user
|
||||
+ // supplied C functions.
|
||||
+ WrapperFP* wrapper = new WrapperFP;
|
||||
wrapper->rep_ = NewBloomFilterPolicy(bits_per_key, original_format);
|
||||
wrapper->state_ = nullptr;
|
||||
wrapper->delete_filter_ = nullptr;
|
||||
- wrapper->destructor_ = &Wrapper::DoNothing;
|
||||
+ wrapper->destructor_ = &WrapperFP::DoNothing;
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@@ -2889,10 +2879,9 @@
|
||||
delete st;
|
||||
}
|
||||
|
||||
-rocksdb_slicetransform_t* rocksdb_slicetransform_create_fixed_prefix(size_t prefixLen) {
|
||||
- struct Wrapper : public rocksdb_slicetransform_t {
|
||||
+ struct WrapperST : public rocksdb_slicetransform_t {
|
||||
const SliceTransform* rep_;
|
||||
- ~Wrapper() { delete rep_; }
|
||||
+ ~WrapperST() { delete rep_; }
|
||||
const char* Name() const override { return rep_->Name(); }
|
||||
Slice Transform(const Slice& src) const override {
|
||||
return rep_->Transform(src);
|
||||
@@ -2903,31 +2892,20 @@
|
||||
bool InRange(const Slice& src) const override { return rep_->InRange(src); }
|
||||
static void DoNothing(void*) { }
|
||||
};
|
||||
- Wrapper* wrapper = new Wrapper;
|
||||
+
|
||||
+rocksdb_slicetransform_t* rocksdb_slicetransform_create_fixed_prefix(size_t prefixLen) {
|
||||
+ WrapperST* wrapper = new WrapperST;
|
||||
wrapper->rep_ = rocksdb::NewFixedPrefixTransform(prefixLen);
|
||||
wrapper->state_ = nullptr;
|
||||
- wrapper->destructor_ = &Wrapper::DoNothing;
|
||||
+ wrapper->destructor_ = &WrapperST::DoNothing;
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
rocksdb_slicetransform_t* rocksdb_slicetransform_create_noop() {
|
||||
- struct Wrapper : public rocksdb_slicetransform_t {
|
||||
- const SliceTransform* rep_;
|
||||
- ~Wrapper() { delete rep_; }
|
||||
- const char* Name() const override { return rep_->Name(); }
|
||||
- Slice Transform(const Slice& src) const override {
|
||||
- return rep_->Transform(src);
|
||||
- }
|
||||
- bool InDomain(const Slice& src) const override {
|
||||
- return rep_->InDomain(src);
|
||||
- }
|
||||
- bool InRange(const Slice& src) const override { return rep_->InRange(src); }
|
||||
- static void DoNothing(void*) { }
|
||||
- };
|
||||
- Wrapper* wrapper = new Wrapper;
|
||||
+ WrapperST* wrapper = new WrapperST;
|
||||
wrapper->rep_ = rocksdb::NewNoopTransform();
|
||||
wrapper->state_ = nullptr;
|
||||
- wrapper->destructor_ = &Wrapper::DoNothing;
|
||||
+ wrapper->destructor_ = &WrapperST::DoNothing;
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
--- ceph-12.2.3/src/rocksdb/memtable/inlineskiplist.h.orig 2018-02-22 10:34:06.918899631 -0500
|
||||
+++ ceph-12.2.3/src/rocksdb/memtable/inlineskiplist.h 2018-02-22 10:34:44.145899631 -0500
|
||||
@@ -279,7 +279,7 @@
|
||||
// next_[0]. This is used for passing data from AllocateKey to Insert.
|
||||
void StashHeight(const int height) {
|
||||
assert(sizeof(int) <= sizeof(next_[0]));
|
||||
- memcpy(&next_[0], &height, sizeof(int));
|
||||
+ memcpy(static_cast<void*>(&next_[0]), &height, sizeof(int));
|
||||
}
|
||||
|
||||
// Retrieves the value passed to StashHeight. Undefined after a call
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-16.1.0-43-g6b74fb5c/src/blk/CMakeLists.txt.orig 2021-02-01 08:16:26.719517641 -0500
|
||||
+++ ceph-16.1.0-43-g6b74fb5c/src/blk/CMakeLists.txt 2021-02-01 08:16:47.810092341 -0500
|
||||
@@ -25,7 +25,7 @@
|
||||
zoned/HMSMRDevice.cc)
|
||||
endif()
|
||||
|
||||
-add_library(blk ${libblk_srcs})
|
||||
+add_library(blk STATIC ${libblk_srcs})
|
||||
target_include_directories(blk PRIVATE "./")
|
||||
|
||||
if(HAVE_LIBAIO)
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-16.1.0-43-g6b74fb5c/src/test/neorados/CMakeLists.txt.orig 2021-02-01 08:25:18.006965821 -0500
|
||||
+++ ceph-16.1.0-43-g6b74fb5c/src/test/neorados/CMakeLists.txt 2021-02-01 08:25:34.244407147 -0500
|
||||
@@ -19,7 +19,7 @@
|
||||
target_link_libraries(ceph_test_neorados_op_speed
|
||||
libneorados fmt::fmt ${unittest_libs})
|
||||
|
||||
-add_library(neoradostest-support common_tests.cc)
|
||||
+add_library(neoradostest-support STATIC common_tests.cc)
|
||||
target_link_libraries(neoradostest-support
|
||||
libneorados fmt::fmt)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
--- 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)
|
||||
@@ -0,0 +1,63 @@
|
||||
From 178f6bdac97b57300bbe0956633cf686a7e3ccee Mon Sep 17 00:00:00 2001
|
||||
From: Yuval Lifshitz <ylifshit@redhat.com>
|
||||
Date: Fri, 12 Mar 2021 08:56:45 +0200
|
||||
Subject: [PATCH] librgw/notifications: initialize kafka and amqp
|
||||
|
||||
Fixes: https://tracker.ceph.com/issues/49738
|
||||
|
||||
Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
|
||||
---
|
||||
src/rgw/librgw.cc | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/src/rgw/librgw.cc b/src/rgw/librgw.cc
|
||||
index 012cc54c3b..a5351dbe7c 100644
|
||||
--- a/src/rgw/librgw.cc
|
||||
+++ b/src/rgw/librgw.cc
|
||||
@@ -53,6 +53,12 @@
|
||||
#include "rgw_http_client.h"
|
||||
#include "rgw_http_client_curl.h"
|
||||
#include "rgw_perf_counters.h"
|
||||
+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
|
||||
+#include "rgw_amqp.h"
|
||||
+#endif
|
||||
+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
|
||||
+#include "rgw_kafka.h"
|
||||
+#endif
|
||||
|
||||
#include "services/svc_zone.h"
|
||||
|
||||
@@ -617,6 +623,17 @@ namespace rgw {
|
||||
/* ignore error */
|
||||
}
|
||||
|
||||
+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
|
||||
+ if (!rgw::amqp::init(cct.get())) {
|
||||
+ derr << "ERROR: failed to initialize AMQP manager" << dendl;
|
||||
+ }
|
||||
+#endif
|
||||
+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
|
||||
+ if (!rgw::kafka::init(cct.get())) {
|
||||
+ derr << "ERROR: failed to initialize Kafka manager" << dendl;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
return 0;
|
||||
} /* RGWLib::init() */
|
||||
|
||||
@@ -645,6 +662,12 @@ namespace rgw {
|
||||
rgw_shutdown_resolver();
|
||||
rgw_http_client_cleanup();
|
||||
rgw::curl::cleanup_curl();
|
||||
+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
|
||||
+ rgw::amqp::shutdown();
|
||||
+#endif
|
||||
+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
|
||||
+ rgw::kafka::shutdown();
|
||||
+#endif
|
||||
|
||||
rgw_perf_stop(g_ceph_context);
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
--- a/src/test/rgw/amqp_mock.cc
|
||||
+++ b/src/test/rgw/amqp_mock.cc
|
||||
@@ -291,7 +291,11 @@ amqp_confirm_select_ok_t* amqp_confirm_select(amqp_connection_state_t state, amq
|
||||
return state->confirm;
|
||||
}
|
||||
|
||||
-int amqp_simple_wait_frame_noblock(amqp_connection_state_t state, amqp_frame_t *decoded_frame, struct timeval* tv) {
|
||||
+extern "C" {
|
||||
+
|
||||
+int amqp_simple_wait_frame_noblock(amqp_connection_state_t state,
|
||||
+ amqp_frame_t *decoded_frame,
|
||||
+ const struct timeval* tv) {
|
||||
if (state->socket && state->socket->open_called &&
|
||||
state->login_called && state->channel1 && state->channel2 && state->exchange &&
|
||||
state->queue && state->consume && state->confirm && !FAIL_NEXT_READ) {
|
||||
@@ -345,6 +349,7 @@ int amqp_simple_wait_frame_noblock(amqp_connection_state_t state, amqp_frame_t *
|
||||
}
|
||||
return AMQP_STATUS_CONNECTION_CLOSED;
|
||||
}
|
||||
+} // extern "C"
|
||||
|
||||
amqp_basic_consume_ok_t* amqp_basic_consume(
|
||||
amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ceph-16.2.4/src/compressor/snappy/SnappyCompressor.h.orig 2021-05-26 08:30:26.205447315 -0400
|
||||
+++ ceph-16.2.4/src/compressor/snappy/SnappyCompressor.h 2021-05-26 08:31:22.570443033 -0400
|
||||
@@ -97,7 +97,7 @@
|
||||
if (qat_enabled)
|
||||
return qat_accel.decompress(p, compressed_len, dst, compressor_message);
|
||||
#endif
|
||||
- snappy::uint32 res_len = 0;
|
||||
+ std::uint32_t res_len = 0;
|
||||
BufferlistSource source_1(p, compressed_len);
|
||||
if (!snappy::GetUncompressedLength(&source_1, &res_len)) {
|
||||
return -1;
|
||||
@@ -0,0 +1,10 @@
|
||||
--- ceph-16.2.4/src/common/Formatter.cc.orig 2021-07-07 09:32:25.513818420 -0400
|
||||
+++ ceph-16.2.4/src/common/Formatter.cc 2021-07-07 09:44:42.007373294 -0400
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <fmt/format.h>
|
||||
#include <set>
|
||||
#include <limits>
|
||||
+#include <algorithm>
|
||||
|
||||
// -----------------------
|
||||
namespace ceph {
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/src/rgw/rgw_string.h b/src/rgw/rgw_string.h
|
||||
index 257daa9c1fe..90e64f98a25 100644
|
||||
--- a/src/rgw/rgw_string.h
|
||||
+++ b/src/rgw/rgw_string.h
|
||||
@@ -8,6 +8,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
#include <string_view>
|
||||
+#include <string>
|
||||
+#include <stdexcept>
|
||||
|
||||
#include <boost/container/small_vector.hpp>
|
||||
|
||||
@@ -0,0 +1,296 @@
|
||||
diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.cc b/src/kv/rocksdb_cache/BinnedLRUCache.cc
|
||||
index 0d657883e92de..47c56e2ddd769 100644
|
||||
--- a/src/kv/rocksdb_cache/BinnedLRUCache.cc
|
||||
+++ b/src/kv/rocksdb_cache/BinnedLRUCache.cc
|
||||
@@ -151,13 +151,20 @@ void BinnedLRUCacheShard::EraseUnRefEntries() {
|
||||
}
|
||||
}
|
||||
|
||||
-void BinnedLRUCacheShard::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
- bool thread_safe) {
|
||||
+void BinnedLRUCacheShard::ApplyToAllCacheEntries(
|
||||
+ const std::function<void(const rocksdb::Slice& key,
|
||||
+ void* value,
|
||||
+ size_t charge,
|
||||
+ DeleterFn)>& callback,
|
||||
+ bool thread_safe)
|
||||
+{
|
||||
if (thread_safe) {
|
||||
mutex_.lock();
|
||||
}
|
||||
table_.ApplyToAllCacheEntries(
|
||||
- [callback](BinnedLRUHandle* h) { callback(h->value, h->charge); });
|
||||
+ [callback](BinnedLRUHandle* h) {
|
||||
+ callback(h->key(), h->value, h->charge, h->deleter);
|
||||
+ });
|
||||
if (thread_safe) {
|
||||
mutex_.unlock();
|
||||
}
|
||||
@@ -345,7 +352,7 @@ bool BinnedLRUCacheShard::Release(rocksdb::Cache::Handle* handle, bool force_era
|
||||
|
||||
rocksdb::Status BinnedLRUCacheShard::Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
|
||||
size_t charge,
|
||||
- void (*deleter)(const rocksdb::Slice& key, void* value),
|
||||
+ DeleterFn deleter,
|
||||
rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) {
|
||||
auto e = new BinnedLRUHandle();
|
||||
rocksdb::Status s;
|
||||
@@ -464,6 +471,12 @@ std::string BinnedLRUCacheShard::GetPrintableOptions() const {
|
||||
return std::string(buffer);
|
||||
}
|
||||
|
||||
+DeleterFn BinnedLRUCacheShard::GetDeleter(rocksdb::Cache::Handle* h) const
|
||||
+{
|
||||
+ auto* handle = reinterpret_cast<BinnedLRUHandle*>(h);
|
||||
+ return handle->deleter;
|
||||
+}
|
||||
+
|
||||
BinnedLRUCache::BinnedLRUCache(CephContext *c,
|
||||
size_t capacity,
|
||||
int num_shard_bits,
|
||||
@@ -519,6 +532,13 @@ void BinnedLRUCache::DisownData() {
|
||||
#endif // !__SANITIZE_ADDRESS__
|
||||
}
|
||||
|
||||
+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
|
||||
+DeleterFn BinnedLRUCache::GetDeleter(Handle* handle) const
|
||||
+{
|
||||
+ return reinterpret_cast<const BinnedLRUHandle*>(handle)->deleter;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
size_t BinnedLRUCache::TEST_GetLRUSize() {
|
||||
size_t lru_size_of_all_shards = 0;
|
||||
for (int i = 0; i < num_shards_; i++) {
|
||||
diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.h b/src/kv/rocksdb_cache/BinnedLRUCache.h
|
||||
index 85608be0e5734..88bf4502e8927 100644
|
||||
--- a/src/kv/rocksdb_cache/BinnedLRUCache.h
|
||||
+++ b/src/kv/rocksdb_cache/BinnedLRUCache.h
|
||||
@@ -56,7 +56,7 @@ std::shared_ptr<rocksdb::Cache> NewBinnedLRUCache(
|
||||
|
||||
struct BinnedLRUHandle {
|
||||
void* value;
|
||||
- void (*deleter)(const rocksdb::Slice&, void* value);
|
||||
+ DeleterFn deleter;
|
||||
BinnedLRUHandle* next_hash;
|
||||
BinnedLRUHandle* next;
|
||||
BinnedLRUHandle* prev;
|
||||
@@ -189,7 +189,7 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
|
||||
// Like Cache methods, but with an extra "hash" parameter.
|
||||
virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
|
||||
size_t charge,
|
||||
- void (*deleter)(const rocksdb::Slice& key, void* value),
|
||||
+ DeleterFn deleter,
|
||||
rocksdb::Cache::Handle** handle,
|
||||
rocksdb::Cache::Priority priority) override;
|
||||
virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) override;
|
||||
@@ -205,13 +205,19 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
|
||||
virtual size_t GetUsage() const override;
|
||||
virtual size_t GetPinnedUsage() const override;
|
||||
|
||||
- virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
- bool thread_safe) override;
|
||||
+ virtual void ApplyToAllCacheEntries(
|
||||
+ const std::function<void(const rocksdb::Slice& key,
|
||||
+ void* value,
|
||||
+ size_t charge,
|
||||
+ DeleterFn)>& callback,
|
||||
+ bool thread_safe) override;
|
||||
|
||||
virtual void EraseUnRefEntries() override;
|
||||
|
||||
virtual std::string GetPrintableOptions() const override;
|
||||
|
||||
+ virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const override;
|
||||
+
|
||||
void TEST_GetLRUList(BinnedLRUHandle** lru, BinnedLRUHandle** lru_low_pri);
|
||||
|
||||
// Retrieves number of elements in LRU, for unit test purpose only
|
||||
@@ -304,7 +310,9 @@ class BinnedLRUCache : public ShardedCache {
|
||||
virtual size_t GetCharge(Handle* handle) const override;
|
||||
virtual uint32_t GetHash(Handle* handle) const override;
|
||||
virtual void DisownData() override;
|
||||
-
|
||||
+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
|
||||
+ virtual DeleterFn GetDeleter(Handle* handle) const override;
|
||||
+#endif
|
||||
// Retrieves number of elements in LRU, for unit test purpose only
|
||||
size_t TEST_GetLRUSize();
|
||||
// Sets the high pri pool ratio
|
||||
diff --git a/src/kv/rocksdb_cache/ShardedCache.cc b/src/kv/rocksdb_cache/ShardedCache.cc
|
||||
index 367140a94d8be..6cbd89ad6472c 100644
|
||||
--- a/src/kv/rocksdb_cache/ShardedCache.cc
|
||||
+++ b/src/kv/rocksdb_cache/ShardedCache.cc
|
||||
@@ -44,7 +44,7 @@ void ShardedCache::SetStrictCapacityLimit(bool strict_capacity_limit) {
|
||||
}
|
||||
|
||||
rocksdb::Status ShardedCache::Insert(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
- void (*deleter)(const rocksdb::Slice& key, void* value),
|
||||
+ DeleterFn deleter,
|
||||
rocksdb::Cache::Handle** handle, Priority priority) {
|
||||
uint32_t hash = HashSlice(key);
|
||||
return GetShard(Shard(hash))
|
||||
@@ -109,13 +109,36 @@ size_t ShardedCache::GetPinnedUsage() const {
|
||||
return usage;
|
||||
}
|
||||
|
||||
+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
|
||||
+DeleterFn ShardedCache::GetDeleter(Handle* handle) const
|
||||
+{
|
||||
+ uint32_t hash = GetHash(handle);
|
||||
+ return GetShard(Shard(hash))->GetDeleter(handle);
|
||||
+}
|
||||
+
|
||||
+void ShardedCache::ApplyToAllEntries(
|
||||
+ const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
+ DeleterFn deleter)>& callback,
|
||||
+ const ApplyToAllEntriesOptions& opts)
|
||||
+{
|
||||
+ int num_shards = 1 << num_shard_bits_;
|
||||
+ for (int s = 0; s < num_shards; s++) {
|
||||
+ GetShard(s)->ApplyToAllCacheEntries(callback, true /* thread_safe */);
|
||||
+ }
|
||||
+}
|
||||
+#else
|
||||
void ShardedCache::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
bool thread_safe) {
|
||||
int num_shards = 1 << num_shard_bits_;
|
||||
for (int s = 0; s < num_shards; s++) {
|
||||
- GetShard(s)->ApplyToAllCacheEntries(callback, thread_safe);
|
||||
+ GetShard(s)->ApplyToAllCacheEntries(
|
||||
+ [callback](const rocksdb::Slice&, void* value, size_t charge, DeleterFn) {
|
||||
+ callback(value, charge);
|
||||
+ },
|
||||
+ thread_safe);
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
|
||||
void ShardedCache::EraseUnRefEntries() {
|
||||
int num_shards = 1 << num_shard_bits_;
|
||||
@@ -131,7 +154,7 @@ std::string ShardedCache::GetPrintableOptions() const {
|
||||
char buffer[kBufferSize];
|
||||
{
|
||||
std::lock_guard<std::mutex> l(capacity_mutex_);
|
||||
- snprintf(buffer, kBufferSize, " capacity : %" ROCKSDB_PRIszt "\n",
|
||||
+ snprintf(buffer, kBufferSize, " capacity : %zu\n",
|
||||
capacity_);
|
||||
ret.append(buffer);
|
||||
snprintf(buffer, kBufferSize, " num_shard_bits : %d\n", num_shard_bits_);
|
||||
diff --git a/src/kv/rocksdb_cache/ShardedCache.h b/src/kv/rocksdb_cache/ShardedCache.h
|
||||
index 4d64893ab1c7b..f98421a09a33a 100644
|
||||
--- a/src/kv/rocksdb_cache/ShardedCache.h
|
||||
+++ b/src/kv/rocksdb_cache/ShardedCache.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <string>
|
||||
#include <mutex>
|
||||
|
||||
+#include "rocksdb/version.h"
|
||||
#include "rocksdb/cache.h"
|
||||
#include "include/ceph_hash.h"
|
||||
#include "common/PriorityCache.h"
|
||||
@@ -22,10 +23,11 @@
|
||||
#ifndef CACHE_LINE_SIZE
|
||||
#define CACHE_LINE_SIZE 64 // XXX arch-specific define
|
||||
#endif
|
||||
-#define ROCKSDB_PRIszt "zu"
|
||||
|
||||
namespace rocksdb_cache {
|
||||
|
||||
+using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
|
||||
+
|
||||
// Single cache shard interface.
|
||||
class CacheShard {
|
||||
public:
|
||||
@@ -34,7 +36,7 @@ class CacheShard {
|
||||
|
||||
virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
|
||||
size_t charge,
|
||||
- void (*deleter)(const rocksdb::Slice& key, void* value),
|
||||
+ 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 bool Ref(rocksdb::Cache::Handle* handle) = 0;
|
||||
@@ -44,10 +46,15 @@ class CacheShard {
|
||||
virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0;
|
||||
virtual size_t GetUsage() const = 0;
|
||||
virtual size_t GetPinnedUsage() const = 0;
|
||||
- virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
- bool thread_safe) = 0;
|
||||
+ virtual void ApplyToAllCacheEntries(
|
||||
+ const std::function<void(const rocksdb::Slice& key,
|
||||
+ void* value,
|
||||
+ size_t charge,
|
||||
+ DeleterFn)>& callback,
|
||||
+ bool thread_safe) = 0;
|
||||
virtual void EraseUnRefEntries() = 0;
|
||||
virtual std::string GetPrintableOptions() const { return ""; }
|
||||
+ virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const = 0;
|
||||
};
|
||||
|
||||
// Generic cache interface which shards cache by hash of keys. 2^num_shard_bits
|
||||
@@ -57,34 +64,43 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
|
||||
public:
|
||||
ShardedCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit);
|
||||
virtual ~ShardedCache() = default;
|
||||
+ // rocksdb::Cache
|
||||
virtual const char* Name() const override = 0;
|
||||
- virtual CacheShard* GetShard(int shard) = 0;
|
||||
- virtual const CacheShard* GetShard(int shard) const = 0;
|
||||
- virtual void* Value(Handle* handle) override = 0;
|
||||
- virtual size_t GetCharge(Handle* handle) const = 0;
|
||||
- virtual uint32_t GetHash(Handle* handle) const = 0;
|
||||
- virtual void DisownData() override = 0;
|
||||
-
|
||||
- virtual void SetCapacity(size_t capacity) override;
|
||||
- virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
|
||||
-
|
||||
virtual rocksdb::Status Insert(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
- void (*deleter)(const rocksdb::Slice& key, void* value),
|
||||
+ DeleterFn,
|
||||
rocksdb::Cache::Handle** handle, Priority priority) override;
|
||||
virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats) override;
|
||||
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;
|
||||
virtual void Erase(const rocksdb::Slice& key) override;
|
||||
virtual uint64_t NewId() override;
|
||||
- virtual size_t GetCapacity() const override;
|
||||
+ virtual void SetCapacity(size_t capacity) override;
|
||||
+ virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
|
||||
virtual bool HasStrictCapacityLimit() const override;
|
||||
+ virtual size_t GetCapacity() const override;
|
||||
virtual size_t GetUsage() const override;
|
||||
virtual size_t GetUsage(rocksdb::Cache::Handle* handle) const override;
|
||||
virtual size_t GetPinnedUsage() const override;
|
||||
+ virtual size_t GetCharge(Handle* handle) const = 0;
|
||||
+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
|
||||
+ virtual DeleterFn GetDeleter(Handle* handle) const override;
|
||||
+#endif
|
||||
+ virtual void DisownData() override = 0;
|
||||
+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
|
||||
+ virtual void ApplyToAllEntries(
|
||||
+ const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
|
||||
+ DeleterFn deleter)>& callback,
|
||||
+ const ApplyToAllEntriesOptions& opts) override;
|
||||
+#else
|
||||
virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
|
||||
bool thread_safe) override;
|
||||
+#endif
|
||||
virtual void EraseUnRefEntries() override;
|
||||
virtual std::string GetPrintableOptions() const override;
|
||||
+ virtual CacheShard* GetShard(int shard) = 0;
|
||||
+ virtual const CacheShard* GetShard(int shard) const = 0;
|
||||
+ virtual uint32_t GetHash(Handle* handle) const = 0;
|
||||
|
||||
int GetNumShardBits() const { return num_shard_bits_; }
|
||||
|
||||
@@ -120,7 +136,7 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
|
||||
// return Hash(s.data(), s.size(), 0);
|
||||
}
|
||||
|
||||
- uint32_t Shard(uint32_t hash) {
|
||||
+ uint32_t Shard(uint32_t hash) const {
|
||||
// Note, hash >> 32 yields hash in gcc, not the zero we expect!
|
||||
return (num_shard_bits_ > 0) ? (hash >> (32 - num_shard_bits_)) : 0;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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-12.2.8.tar.gz) = 91c5c11aaeef701b3e31c9f8a1192b6b79fd34f3b96c61595c65173c98bfce0009c5b7c9b29764f5e4d4b1f5ac2ca7109fed5ae598c176aba717a34a132fabac
|
||||
SHA512 (ceph-16.2.10.tar.gz) = ae164c24462c3e08763d202acc3e2fe86ffc09f312b5059bae07863e804fc47bd158fc130aa2923246ffcfe26ae6d6d9317326aec96373226e6f9030d7123c8b
|
||||
|
||||
Reference in New Issue
Block a user