Skip to content

Commit 75bcafa

Browse files
trondnmohammadzaeem
authored andcommitted
MB-67283: Add utilities/fusion_support.h to reduce code complexity
The memcached core gets compiled with (EE) and without (CE) magma available, and fusion is only supported on a subset of EE platforms. To avoid cluttering the code with ifdef's making the code harder to read we hide the difference in a single file and provide a stub for the magma functions so that we don't need a preprocessor macro. Change-Id: Ia101355befcd8c5428ed1a489598380af413b967 Reviewed-on: https://review.couchbase.org/c/kv_engine/+/229523 Tested-by: Build Bot <[email protected]> Reviewed-by: Faizan Alam <[email protected]>
1 parent 41ea6ff commit 75bcafa

17 files changed

+203
-103
lines changed

daemon/CMakeLists.txt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,6 @@ if (NUMA_FOUND)
117117
target_link_libraries(memcached_daemon PRIVATE ${NUMA_LIBRARIES})
118118
endif()
119119

120-
if (TARGET fusionfs)
121-
target_compile_definitions(memcached_daemon
122-
PRIVATE -DUSE_FUSION=1)
123-
target_include_directories(memcached_daemon
124-
SYSTEM PRIVATE ${MAGMA_INCLUDE_DIR})
125-
target_link_libraries(memcached_daemon
126-
PRIVATE magma)
127-
endif()
128-
129120
target_include_directories(memcached_daemon PRIVATE ${Memcached_BINARY_DIR})
130121
cb_enable_unity_build(memcached_daemon)
131122

@@ -149,6 +140,7 @@ target_link_libraries(memcached_daemon
149140
ep
150141
ewouldblock_engine
151142
folly_io_callbacks
143+
fusion_support
152144
mcd_dek
153145
mcd_executor
154146
mcd_tracing

daemon/mcbp_executors.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
#include <nlohmann/json.hpp>
7171
#include <serverless/config.h>
7272
#include <utilities/engine_errc_2_mcbp.h>
73+
#include <utilities/fusion_support.h>
7374
#include <utilities/throttle_utilities.h>
7475

7576
/**
@@ -705,11 +706,20 @@ static void set_chronicle_auth_token_executor(Cookie& cookie) {
705706
}
706707

707708
static void delete_fusion_namespace_executor(Cookie& cookie) {
708-
cookie.obtainContext<DeleteFusionNamespaceCommandContext>(cookie).drive();
709+
if (isFusionSupportEnabled()) {
710+
cookie.obtainContext<DeleteFusionNamespaceCommandContext>(cookie)
711+
.drive();
712+
} else {
713+
cookie.sendResponse(cb::mcbp::Status::NotSupported);
714+
}
709715
}
710716

711717
static void get_fusion_namespaces_executor(Cookie& cookie) {
712-
cookie.obtainContext<GetFusionNamespacesCommandContext>(cookie).drive();
718+
if (isFusionSupportEnabled()) {
719+
cookie.obtainContext<GetFusionNamespacesCommandContext>(cookie).drive();
720+
} else {
721+
cookie.sendResponse(cb::mcbp::Status::NotSupported);
722+
}
713723
}
714724

715725
static void process_bin_noop_response(Cookie&) {

daemon/memcached.cc

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@
4343
#include <folly/io/async/EventBase.h>
4444
#include <folly/portability/Unistd.h>
4545
#include <gsl/gsl-lite.hpp>
46-
#ifdef USE_FUSION
47-
#include <libmagma/magma.h>
48-
#endif
4946
#include <mcbp/mcbp.h>
5047
#include <memcached/rbac.h>
5148
#include <nlohmann/json.hpp>
@@ -62,6 +59,7 @@
6259
#include <serverless/config.h>
6360
#include <statistics/prometheus.h>
6461
#include <utilities/breakpad.h>
62+
#include <utilities/fusion_support.h>
6563
#include <chrono>
6664
#include <csignal>
6765
#include <cstdlib>
@@ -492,7 +490,6 @@ static void settings_init() {
492490
s.getMaxConcurrentAuthentications());
493491
});
494492

495-
#ifdef USE_FUSION
496493
settings.addChangeListener("fusion_migration_rate_limit",
497494
[](const auto&, auto& s) {
498495
magma::Magma::SetFusionMigrationRateLimit(
@@ -503,7 +500,6 @@ static void settings_init() {
503500
magma::Magma::SetFusionSyncRateLimit(
504501
s.getFusionSyncRateLimit());
505502
});
506-
#endif
507503
}
508504

509505
/**

daemon/protocol/mcbp/CMakeLists.txt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ target_link_libraries(memcached_daemon_mcbp
135135
PRIVATE
136136
memcached_daemon_protocol_utils
137137
Folly::folly
138+
fusion_support
138139
hdrhistogram
139140
memcached_logger
140141
nlohmann_json::nlohmann_json
@@ -143,12 +144,3 @@ target_link_libraries(memcached_daemon_mcbp
143144
sigar_cpp
144145
statistics
145146
subjson)
146-
147-
if (TARGET fusionfs)
148-
target_compile_definitions(memcached_daemon_mcbp
149-
PRIVATE -DUSE_FUSION=1)
150-
target_include_directories(memcached_daemon_mcbp
151-
SYSTEM PRIVATE ${MAGMA_INCLUDE_DIR})
152-
target_link_libraries(memcached_daemon_mcbp
153-
PRIVATE magma)
154-
endif()

daemon/protocol/mcbp/delete_fusion_namespace_command_context.cc

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@
99
*/
1010

1111
#include "delete_fusion_namespace_command_context.h"
12-
1312
#include <daemon/concurrency_semaphores.h>
1413
#include <daemon/cookie.h>
1514
#include <executor/globaltask.h>
16-
#ifdef USE_FUSION
17-
#include <libmagma/magma.h>
18-
#endif
1915
#include <logger/logger.h>
16+
#include <utilities/fusion_support.h>
2017

2118
DeleteFusionNamespaceCommandContext::DeleteFusionNamespaceCommandContext(
2219
Cookie& cookie)
@@ -29,7 +26,6 @@ DeleteFusionNamespaceCommandContext::DeleteFusionNamespaceCommandContext(
2926
}
3027

3128
cb::engine_errc DeleteFusionNamespaceCommandContext::execute() {
32-
#ifdef USE_FUSION
3329
const auto& req = cookie.getRequest();
3430
const auto request = nlohmann::json::parse(req.getValueString());
3531
const auto logstore = request["logstore_uri"];
@@ -38,16 +34,13 @@ cb::engine_errc DeleteFusionNamespaceCommandContext::execute() {
3834
const auto ns = request["namespace"];
3935
const auto status = magma::Magma::DeleteFusionNamespace(
4036
logstore, metadatastore, token, ns);
41-
if (status.ErrorCode() != magma::Status::Code::Ok) {
42-
LOG_WARNING_CTX("DeleteFusionNamespace: ",
43-
{"logstore_uri", logstore},
44-
{"metadatastore_uri", metadatastore},
45-
{"namespace", ns},
46-
{"error", status.String()});
47-
return cb::engine_errc::failed;
37+
if (status.IsOK()) {
38+
return cb::engine_errc::success;
4839
}
49-
return cb::engine_errc::success;
50-
#else
51-
return cb::engine_errc::not_supported;
52-
#endif
40+
LOG_WARNING_CTX("DeleteFusionNamespace",
41+
{"logstore_uri", logstore},
42+
{"metadatastore_uri", metadatastore},
43+
{"namespace", ns},
44+
{"error", status.String()});
45+
return cb::engine_errc::failed;
5346
}

daemon/protocol/mcbp/get_fusion_namespaces_command_context.cc

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,11 @@
99
*/
1010

1111
#include "get_fusion_namespaces_command_context.h"
12-
1312
#include <daemon/concurrency_semaphores.h>
1413
#include <daemon/cookie.h>
1514
#include <executor/globaltask.h>
16-
#ifdef USE_FUSION
17-
#include <libmagma/magma.h>
18-
#endif
19-
2015
#include <logger/logger.h>
16+
#include <utilities/fusion_support.h>
2117
#include <utilities/fusion_utilities.h>
2218

2319
GetFusionNamespacesCommandContext::GetFusionNamespacesCommandContext(
@@ -31,7 +27,6 @@ GetFusionNamespacesCommandContext::GetFusionNamespacesCommandContext(
3127
}
3228

3329
cb::engine_errc GetFusionNamespacesCommandContext::execute() {
34-
#ifdef USE_FUSION
3530
const auto& req = cookie.getRequest();
3631
const auto request = nlohmann::json::parse(req.getValueString());
3732
const auto metadatastore = request["metadatastore_uri"];
@@ -44,19 +39,15 @@ cb::engine_errc GetFusionNamespacesCommandContext::execute() {
4439
token,
4540
magma_fusion_namespace_prefix,
4641
namespaceDepth);
47-
if (status.ErrorCode() != magma::Status::Code::Ok) {
48-
LOG_WARNING_CTX("GetFusionNamespaces: ",
49-
{"metadatastore_uri", metadatastore},
50-
{"error", status.String()});
51-
cookie.setErrorContext(
52-
fmt::format("Failed with error: {}", status.String()));
53-
return cb::engine_errc::failed;
42+
if (status.IsOK()) {
43+
response = json.dump();
44+
datatype = cb::mcbp::Datatype::JSON;
45+
return cb::engine_errc::success;
5446
}
55-
response = json.dump();
56-
datatype = cb::mcbp::Datatype::JSON;
57-
58-
return cb::engine_errc::success;
59-
#else
60-
return cb::engine_errc::not_supported;
61-
#endif
62-
}
47+
LOG_WARNING_CTX("GetFusionNamespaces",
48+
{"metadatastore_uri", metadatastore},
49+
{"error", status.String()});
50+
cookie.setErrorContext(
51+
fmt::format("Failed with error: {}", status.String()));
52+
return cb::engine_errc::failed;
53+
}

daemon/protocol/mcbp/stats_context.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include <statistics/cbstat_collector.h>
4040
#include <statistics/labelled_collector.h>
4141
#include <utilities/engine_errc_2_mcbp.h>
42+
#include <utilities/fusion_support.h>
4243
#include <utilities/string_utilities.h>
4344
#include <chrono>
4445
#include <cinttypes>
@@ -690,10 +691,13 @@ static cb::engine_errc stat_scheduler_executor(const std::string& arg,
690691

691692
static cb::engine_errc stat_fusion_executor(const std::string& arg,
692693
Cookie& cookie) {
693-
return bucket_get_stats(cookie,
694-
cookie.getRequest().getKeyString(),
695-
cookie.getRequest().getValueString(),
696-
appendStatsFn);
694+
if (isFusionSupportEnabled()) {
695+
return bucket_get_stats(cookie,
696+
cookie.getRequest().getKeyString(),
697+
cookie.getRequest().getValueString(),
698+
appendStatsFn);
699+
}
700+
return cb::engine_errc::not_supported;
697701
}
698702

699703
/***************************** STAT HANDLERS *****************************/

daemon/settings.cc

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <platform/dirutils.h>
2121
#include <platform/json_log_conversions.h>
2222
#include <platform/timeutils.h>
23+
#include <utilities/fusion_support.h>
2324
#include <utilities/json_utilities.h>
2425
#include <utilities/logtags.h>
2526
#include <algorithm>
@@ -396,9 +397,21 @@ void Settings::reconfigure(const nlohmann::json& json) {
396397
} else if (key == "max_concurrent_commands_per_connection"sv) {
397398
setMaxConcurrentCommandsPerConnection(value.get<size_t>());
398399
} else if (key == "fusion_migration_rate_limit"sv) {
399-
setFusionMigrationRateLimit(value.get<size_t>());
400+
if (isFusionSupportEnabled()) {
401+
setFusionMigrationRateLimit(value.get<size_t>());
402+
} else {
403+
LOG_WARNING_CTX("Ignore fusion_migration_rate_limit",
404+
{"value", value.dump()},
405+
{"reason", "Fusion support is not enabled"});
406+
}
400407
} else if (key == "fusion_sync_rate_limit") {
401-
setFusionSyncRateLimit(value.get<size_t>());
408+
if (isFusionSupportEnabled()) {
409+
setFusionSyncRateLimit(value.get<size_t>());
410+
} else {
411+
LOG_WARNING_CTX("Ignore fusion_sync_rate_limit",
412+
{"value", value.dump()},
413+
{"reason", "Fusion support is not enabled"});
414+
}
402415
} else if (key == "phosphor_config"sv) {
403416
auto config = value.get<std::string>();
404417
// throw an exception if the config is invalid

daemon/stats.cc

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
#include "settings.h"
2121
#include <fmt/chrono.h>
2222
#include <folly/Chrono.h>
23-
#ifdef USE_FUSION
24-
#include <libmagma/magma.h>
25-
#endif
2623
#include <logger/logger.h>
2724
#include <platform/cb_arena_malloc.h>
2825
#include <platform/timeutils.h>
@@ -32,6 +29,7 @@
3229
#include <statistics/labelled_collector.h>
3330
#include <statistics/prometheus.h>
3431
#include <statistics/prometheus_collector.h>
32+
#include <utilities/fusion_support.h>
3533
#include <utilities/string_utilities.h>
3634
#include <string_view>
3735

@@ -67,12 +65,13 @@ static void server_global_stats(const StatCollector& collector) {
6765
collector.addStat(Key::connection_structures, stats.conn_structs);
6866
collector.addStat(Key::curr_connections_closing,
6967
stats.curr_conn_closing);
70-
#ifdef USE_FUSION
71-
collector.addStat(Key::fusion_migration_rate_limit,
72-
magma::Magma::GetFusionMigrationRateLimit());
73-
collector.addStat(Key::fusion_sync_rate_limit,
74-
magma::Magma::GetFusionSyncRateLimit());
75-
#endif
68+
if (isFusionSupportEnabled()) {
69+
collector.addStat(Key::fusion_migration_rate_limit,
70+
magma::Magma::GetFusionMigrationRateLimit());
71+
collector.addStat(Key::fusion_sync_rate_limit,
72+
magma::Magma::GetFusionSyncRateLimit());
73+
}
74+
7675
auto sdks = SdkConnectionManager::instance().getConnectedSdks();
7776
for (const auto& [key, value] : sdks) {
7877
collector.withLabels({{"sdk", key}})

engines/ep/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ target_link_libraries(ep
426426
cbcompress
427427
engine_utilities
428428
ep-engine_collections
429+
fusion_support
429430
mcbp
430431
mc_client_connection
431432
mcd_executor

0 commit comments

Comments
 (0)