From e5280cfbb525a85c8d8c62bc670f5fe8e8f25225 Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Thu, 26 Jan 2023 14:55:54 -0800 Subject: [PATCH 1/7] Adding configurator server and client side --- src/k2/CMakeLists.txt | 1 + src/k2/appbase/Appbase.h | 2 + src/k2/appbase/CMakeLists.txt | 2 +- src/k2/cmd/controlPlaneOracle/CMakeLists.txt | 2 +- src/k2/cmd/demo/CMakeLists.txt | 10 +- src/k2/cmd/demo/configurator_client.cpp | 94 ++++++++++++++ src/k2/cmd/httpproxy/CMakeLists.txt | 2 +- src/k2/cmd/nodepool/CMakeLists.txt | 2 +- src/k2/cmd/persistence/CMakeLists.txt | 2 +- src/k2/cmd/plog/CMakeLists.txt | 2 +- src/k2/cmd/tpcc/CMakeLists.txt | 2 +- src/k2/cmd/tso/CMakeLists.txt | 2 +- src/k2/cmd/txbench/CMakeLists.txt | 12 +- src/k2/cmd/ycsb/CMakeLists.txt | 2 +- src/k2/configurator/CMakeLists.txt | 12 ++ src/k2/configurator/Configurator.cpp | 122 +++++++++++++++++++ src/k2/configurator/Configurator.h | 46 +++++++ src/k2/configurator/ConfiguratorDTO.h | 71 +++++++++++ src/k2/transport/RPCTypes.h | 3 + test/cpo/CMakeLists.txt | 4 +- test/dto/CMakeLists.txt | 2 +- test/k23si/CMakeLists.txt | 10 +- test/plog/CMakeLists.txt | 4 +- 23 files changed, 382 insertions(+), 29 deletions(-) create mode 100644 src/k2/cmd/demo/configurator_client.cpp create mode 100644 src/k2/configurator/CMakeLists.txt create mode 100644 src/k2/configurator/Configurator.cpp create mode 100644 src/k2/configurator/Configurator.h create mode 100644 src/k2/configurator/ConfiguratorDTO.h diff --git a/src/k2/CMakeLists.txt b/src/k2/CMakeLists.txt index 8b4f1f9f..30693b67 100644 --- a/src/k2/CMakeLists.txt +++ b/src/k2/CMakeLists.txt @@ -11,4 +11,5 @@ add_subdirectory (infrastructure) add_subdirectory (module) add_subdirectory (persistence) add_subdirectory (transport) +add_subdirectory (configurator) add_subdirectory (tso) diff --git a/src/k2/appbase/Appbase.h b/src/k2/appbase/Appbase.h index b8135153..0d28e11d 100644 --- a/src/k2/appbase/Appbase.h +++ b/src/k2/appbase/Appbase.h @@ -37,6 +37,7 @@ Copyright(c) 2020 Futurewei Cloud // k2 transport #include #include +#include #include #include #include @@ -92,6 +93,7 @@ class App { } // add the discovery applet o all apps addApplet(); + addApplet(); } // helper class for positional option adding diff --git a/src/k2/appbase/CMakeLists.txt b/src/k2/appbase/CMakeLists.txt index 443f1a0d..600f28a1 100644 --- a/src/k2/appbase/CMakeLists.txt +++ b/src/k2/appbase/CMakeLists.txt @@ -8,7 +8,7 @@ set_target_properties(appbase PROPERTIES SOVERSION 1 ) -target_link_libraries (appbase PRIVATE config common transport Seastar::seastar ) +target_link_libraries (appbase PRIVATE config common transport configurator Seastar::seastar ) # export the library in the common k2Targets install(TARGETS appbase EXPORT k2Targets DESTINATION lib/k2) diff --git a/src/k2/cmd/controlPlaneOracle/CMakeLists.txt b/src/k2/cmd/controlPlaneOracle/CMakeLists.txt index 29d2d528..4a4d451f 100644 --- a/src/k2/cmd/controlPlaneOracle/CMakeLists.txt +++ b/src/k2/cmd/controlPlaneOracle/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (cpo_main cpo_main.cpp) -target_link_libraries (cpo_main PRIVATE appbase common transport Seastar::seastar cpo_service infrastructure dto) +target_link_libraries (cpo_main PRIVATE appbase common configurator transport Seastar::seastar cpo_service infrastructure dto) install (TARGETS cpo_main DESTINATION bin) diff --git a/src/k2/cmd/demo/CMakeLists.txt b/src/k2/cmd/demo/CMakeLists.txt index 823f6e87..4ada99b6 100644 --- a/src/k2/cmd/demo/CMakeLists.txt +++ b/src/k2/cmd/demo/CMakeLists.txt @@ -2,10 +2,12 @@ add_executable (k2_demo_service service.cpp) add_executable (k2_demo_rpc_echo rpc_echo.cpp) add_executable (k2_demo_rpc_service rpc_service.cpp) add_executable (k2_demo_tso tso_sample_app.cpp) +add_executable (configurator_client configurator_client.cpp) -target_link_libraries (k2_demo_service PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (k2_demo_rpc_echo PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (k2_demo_rpc_service PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (k2_demo_tso PRIVATE tso_service tso_client appbase transport common Seastar::seastar) +target_link_libraries (configurator_client PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (k2_demo_service PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (k2_demo_rpc_echo PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (k2_demo_rpc_service PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (k2_demo_tso PRIVATE tso_service tso_client appbase configurator transport common Seastar::seastar) #install (TARGETS k2_demo_service k2_demo_rpc_echo k2_demo_rpc_service k2_demo_tso DESTINATION bin) diff --git a/src/k2/cmd/demo/configurator_client.cpp b/src/k2/cmd/demo/configurator_client.cpp new file mode 100644 index 00000000..705aaf8e --- /dev/null +++ b/src/k2/cmd/demo/configurator_client.cpp @@ -0,0 +1,94 @@ +#include +#include +#include +#include +#include + +#include "k2/configurator/ConfiguratorDTO.h" + +namespace k2 { +namespace log { +inline thread_local k2::logging::Logger configuratorclient("k2::configurator_client"); +} + +class ConfiguratorClient { + public: + seastar::future<> start() { + + K2LOG_I(log::configuratorclient, "Registering message handlers"); + + _singleTimer.setCallback([this] { + return seastar::make_ready_future() + .then([this]() { + auto ep = RPC().getServerEndpoint(TCPRPCProtocol::proto); + K2LOG_I(log::configuratorclient, "endpoint: {}", ep->url); + if (_op() == "GET") { + GET_ConfiguratorRequest request{.key=_key()}; + return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratorclient, "got response : {} {}", status, response ); + }); + } else if (_op() == "PUT") { + K2LOG_I(log::configuratorclient, "putting record"); + SET_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; + return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratorclient, "put response : {} {}", status, response ); + }); + } else if (_op() == "DELETE") { + K2LOG_I(log::configuratorclient, "deleting record"); + DELETE_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; + return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratorclient, "put response : {} {}", status, response ); + }); + } + else { + K2LOG_E(log::configuratorclient, "Not supported operation {}", _op()); + return seastar::make_ready_future(); + } + }) + .then([] { + AppBase().stop(0); + }); + }); + + _singleTimer.arm(0s); + return seastar::make_ready_future(); + } + + seastar::future<> gracefulStop() { + K2LOG_I(log::configuratorclient, "stop"); + return _singleTimer.stop(); + } + + private : + SingleTimer _singleTimer; + ConfigVar _key{"key"}; + ConfigVar _value{"value"}; + ConfigVar _op{"op"}; + ConfigVar _applyToAll{"applyToAll"}; +}; +} + +int main(int argc, char** argv) { + k2::App app("ConfiguratorClient"); + + app.addOptions() + ("key", bpo::value(), "e.g. '--key abc"); + + app.addOptions() + ("value", bpo::value(), "e.g. '--value 100"); + + app.addOptions() + ("op", bpo::value(), "e.g. '--op GET, or --op SET"); + + app.addOptions() + ("applyToAll", bpo::value(), "e.g. '--applyToAll true, or --applyToAll false"); + + app.addApplet(); + return app.start(argc, argv); +} diff --git a/src/k2/cmd/httpproxy/CMakeLists.txt b/src/k2/cmd/httpproxy/CMakeLists.txt index d50d6e2f..af19f599 100644 --- a/src/k2/cmd/httpproxy/CMakeLists.txt +++ b/src/k2/cmd/httpproxy/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (http_proxy http_proxy_main.cpp) -target_link_libraries (http_proxy PRIVATE appbase k23si_client cpo_client tso_client httpproxy infrastructure dto transport Seastar::seastar) +target_link_libraries (http_proxy PRIVATE appbase k23si_client cpo_client tso_client httpproxy infrastructure dto configurator transport Seastar::seastar) install (TARGETS http_proxy DESTINATION bin) diff --git a/src/k2/cmd/nodepool/CMakeLists.txt b/src/k2/cmd/nodepool/CMakeLists.txt index 6ba6e463..941662f3 100644 --- a/src/k2/cmd/nodepool/CMakeLists.txt +++ b/src/k2/cmd/nodepool/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (nodepool nodepool_main.cpp) -target_link_libraries (nodepool PRIVATE appbase k23si cpo_client common transport Seastar::seastar assignment_manager tso_client infrastructure dto) +target_link_libraries (nodepool PRIVATE appbase k23si cpo_client common configurator transport Seastar::seastar assignment_manager tso_client infrastructure dto) install (TARGETS nodepool DESTINATION bin) diff --git a/src/k2/cmd/persistence/CMakeLists.txt b/src/k2/cmd/persistence/CMakeLists.txt index db4df890..d33cf429 100644 --- a/src/k2/cmd/persistence/CMakeLists.txt +++ b/src/k2/cmd/persistence/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (persistence persistence_main.cpp) -target_link_libraries (persistence PRIVATE cpo_client appbase common transport Seastar::seastar persistence_service) +target_link_libraries (persistence PRIVATE cpo_client appbase common configurator transport Seastar::seastar persistence_service) install (TARGETS persistence DESTINATION bin) diff --git a/src/k2/cmd/plog/CMakeLists.txt b/src/k2/cmd/plog/CMakeLists.txt index a3442f89..61a74a94 100644 --- a/src/k2/cmd/plog/CMakeLists.txt +++ b/src/k2/cmd/plog/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (plog_main plog_main.cpp) -target_link_libraries (plog_main PRIVATE appbase common transport Seastar::seastar plog_service) +target_link_libraries (plog_main PRIVATE appbase common configurator transport Seastar::seastar plog_service) install (TARGETS plog_main DESTINATION bin) diff --git a/src/k2/cmd/tpcc/CMakeLists.txt b/src/k2/cmd/tpcc/CMakeLists.txt index 0bb27ad6..6ba29de7 100644 --- a/src/k2/cmd/tpcc/CMakeLists.txt +++ b/src/k2/cmd/tpcc/CMakeLists.txt @@ -3,6 +3,6 @@ file(GLOB SOURCES "*.cpp") add_executable (tpcc_client ${HEADERS} ${SOURCES}) -target_link_libraries (tpcc_client PRIVATE tso_client appbase transport common cpo_client k23si_client dto Seastar::seastar) +target_link_libraries (tpcc_client PRIVATE tso_client appbase configurator transport common cpo_client k23si_client dto Seastar::seastar) install (TARGETS tpcc_client DESTINATION bin) diff --git a/src/k2/cmd/tso/CMakeLists.txt b/src/k2/cmd/tso/CMakeLists.txt index 78bff038..f53ad919 100644 --- a/src/k2/cmd/tso/CMakeLists.txt +++ b/src/k2/cmd/tso/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (tso tso_main.cpp) -target_link_libraries (tso PRIVATE tso_service cpo_client appbase common transport Seastar::seastar) +target_link_libraries (tso PRIVATE tso_service cpo_client appbase common configurator transport Seastar::seastar) install (TARGETS tso DESTINATION bin) diff --git a/src/k2/cmd/txbench/CMakeLists.txt b/src/k2/cmd/txbench/CMakeLists.txt index 6b634df2..7b0283bf 100644 --- a/src/k2/cmd/txbench/CMakeLists.txt +++ b/src/k2/cmd/txbench/CMakeLists.txt @@ -7,13 +7,13 @@ add_executable (rpcbench_server rpcbench_server.cpp rpcbench_common.h) add_executable (k23sibench_client k23sibench_client.cpp) -target_link_libraries (txbench_client PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (txbench_server PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (txbench_combine PRIVATE appbase transport common Seastar::seastar) +target_link_libraries (txbench_client PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (txbench_server PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (txbench_combine PRIVATE appbase configurator transport common Seastar::seastar) -target_link_libraries (rpcbench_client PRIVATE appbase transport common Seastar::seastar) -target_link_libraries (rpcbench_server PRIVATE appbase transport common Seastar::seastar) +target_link_libraries (rpcbench_client PRIVATE appbase configurator transport common Seastar::seastar) +target_link_libraries (rpcbench_server PRIVATE appbase configurator transport common Seastar::seastar) -target_link_libraries (k23sibench_client PRIVATE appbase tso_client cpo_client k23si_client dto transport Seastar::seastar) +target_link_libraries (k23sibench_client PRIVATE appbase tso_client cpo_client k23si_client dto configurator transport Seastar::seastar) #install (TARGETS txbench_client txbench_server txbench_combine rpcbench_client rpcbench_server k23sibench_client DESTINATION bin) diff --git a/src/k2/cmd/ycsb/CMakeLists.txt b/src/k2/cmd/ycsb/CMakeLists.txt index 1606ae9c..d74b8732 100644 --- a/src/k2/cmd/ycsb/CMakeLists.txt +++ b/src/k2/cmd/ycsb/CMakeLists.txt @@ -3,6 +3,6 @@ file(GLOB SOURCES "*.cpp") add_executable (ycsb_client ${HEADERS} ${SOURCES}) -target_link_libraries (ycsb_client PRIVATE tso_client appbase common cpo_client k23si_client dto transport Seastar::seastar) +target_link_libraries (ycsb_client PRIVATE tso_client appbase common cpo_client k23si_client dto configurator transport Seastar::seastar) install (TARGETS ycsb_client DESTINATION bin) diff --git a/src/k2/configurator/CMakeLists.txt b/src/k2/configurator/CMakeLists.txt new file mode 100644 index 00000000..25b14f3c --- /dev/null +++ b/src/k2/configurator/CMakeLists.txt @@ -0,0 +1,12 @@ +file(GLOB HEADERS "*.h") +file(GLOB SOURCES "*.cpp") + +add_library(configurator OBJECT ${HEADERS} ${SOURCES}) + +target_link_libraries (configurator PRIVATE common config Seastar::seastar crc32c skvhttp::common skvhttp::mpack) + +# export the library in the common k2Targets +install(TARGETS configurator EXPORT k2Targets DESTINATION lib/k2) +install(FILES ${HEADERS} DESTINATION include/k2/configurator) +# export the cmake config in the build tree for any users who want to use this project from source +export(TARGETS configurator NAMESPACE k2:: FILE configurator-config.cmake) diff --git a/src/k2/configurator/Configurator.cpp b/src/k2/configurator/Configurator.cpp new file mode 100644 index 00000000..7f74cdb1 --- /dev/null +++ b/src/k2/configurator/Configurator.cpp @@ -0,0 +1,122 @@ +/* +MIT License + +Copyright(c) 2020 Futurewei Cloud + + Permission is hereby granted, + free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : + + The above copyright notice and this permission notice shall be included in all copies + or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", + WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER + LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#include "Configurator.h" +#include "ConfiguratorDTO.h" + + +#include +#include +#include +#include +#include +#include +#include + +namespace k2 { + +namespace log { +inline thread_local k2::logging::Logger configurator("k2::configurator_server"); +} + +Configurator::Configurator() { + K2LOG_I(log::configurator, "ctor"); +} + +Configurator::~Configurator() { + K2LOG_I(log::configurator, "dtor"); +} + +seastar::future<> Configurator::start() { + K2LOG_I(log::configurator, "Registering message handlers"); + + RPC().registerRPCObserver(InternalVerbs::CONFGURATOR_SET, [this](SET_ConfiguratorRequest&& request) { + K2LOG_I(log::configurator, "Received set for key: {}", request.key); + auto key = request.key; + auto value = request.value; + + if (request.applyToAll) { + return ConfigDist().invoke_on_all([key, value](auto& config) { + config.emplace(key, boost::program_options::variable_value(value, "")); + boost::program_options::notify(config); + }).then([key] { + SET_ConfiguratorResponse response{.key=std::move(key)}; + return RPCResponse(Statuses::S201_Created("Configurator set accepted"), std::move(response)); + }); + } else { + auto& conf = const_cast(Config()); + conf.emplace(key, boost::program_options::variable_value(value, "")); + boost::program_options::notify(conf); + SET_ConfiguratorResponse response{.key=std::move(request.key)}; + return RPCResponse(Statuses::S201_Created("Configurator set accepted"), std::move(response)); + } + }); + + RPC().registerRPCObserver(InternalVerbs::CONFGURATOR_GET, [this](GET_ConfiguratorRequest&& request) { + K2LOG_I(log::configurator, "Received get for key: {}", request.key); + auto key = request.key; + + GET_ConfiguratorResponse response; + response.key=request.key; + auto iter = Config().find(key); + if (iter != Config().end()) { + response.value = (iter->second).as(); + } else { + return RPCResponse(Statuses::S404_Not_Found("key not found"), std::move(response)); + } + return RPCResponse(Statuses::S200_OK("get accepted"), std::move(response)); + }); + + RPC().registerRPCObserver(InternalVerbs::CONFGURATOR_DELETE, [this](DELETE_ConfiguratorRequest&& request) { + K2LOG_I(log::configurator, "Received delete for key: {}", request.key); + auto& key = request.key; + + if (request.applyToAll) { + return ConfigDist().invoke_on_all([key](auto& config) { + if (config.count(key)) { + config.erase(key); + } + }).then([key] { + DELETE_ConfiguratorResponse response{.key=std::move(key)}; + return RPCResponse(Statuses::S201_Created("Configurator set accepted"), std::move(response)); + }); + } else { + auto& config = const_cast(Config()); + if (config.count(key)) { + config.erase(key); + } + DELETE_ConfiguratorResponse response{.key=std::move(request.key)}; + return RPCResponse(Statuses::S201_Created("Configurator erase accepted"), std::move(response)); + } + }); + + return seastar::make_ready_future(); +} + +seastar::future<> Configurator::gracefulStop() { + K2LOG_I(log::configurator, "stop"); + return seastar::make_ready_future<>(); +} + + +} // namespace k2 diff --git a/src/k2/configurator/Configurator.h b/src/k2/configurator/Configurator.h new file mode 100644 index 00000000..a05a916e --- /dev/null +++ b/src/k2/configurator/Configurator.h @@ -0,0 +1,46 @@ +/* +MIT License + +Copyright(c) 2020 Futurewei Cloud + + Permission is hereby granted, + free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : + + The above copyright notice and this permission notice shall be included in all copies + or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", + WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER + LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#pragma once + +#include +#include + +namespace k2 { +class Configurator { +public : + Configurator(); + ~Configurator(); + + seastar::future<> gracefulStop(); + seastar::future<> start(); + + +private : + ConfigVar _key{"key"}; + ConfigVar _value{"value"}; + ConfigVar _op{"op"}; + ConfigVar _applyToAll{"applyToAll"}; +}; // class Configurator + +} // namespace k2 diff --git a/src/k2/configurator/ConfiguratorDTO.h b/src/k2/configurator/ConfiguratorDTO.h new file mode 100644 index 00000000..47405bca --- /dev/null +++ b/src/k2/configurator/ConfiguratorDTO.h @@ -0,0 +1,71 @@ +/* +MIT License + +Copyright(c) 2020 Futurewei Cloud + + Permission is hereby granted, + free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : + + The above copyright notice and this permission notice shall be included in all copies + or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", + WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER + LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#pragma once +#include +#include + +namespace k2 { + +struct DELETE_ConfiguratorRequest { + String key; + String value; + bool applyToAll; + K2_PAYLOAD_FIELDS(key, value, applyToAll); + K2_DEF_FMT(DELETE_ConfiguratorRequest, key, value, applyToAll); +}; + +struct DELETE_ConfiguratorResponse { + String key; + K2_PAYLOAD_FIELDS(key); + K2_DEF_FMT(DELETE_ConfiguratorResponse, key); +}; + +struct SET_ConfiguratorRequest { + String key; + String value; + bool applyToAll; + K2_PAYLOAD_FIELDS(key, value, applyToAll); + K2_DEF_FMT(SET_ConfiguratorRequest, key, value, applyToAll); +}; + +struct SET_ConfiguratorResponse { + String key; + K2_PAYLOAD_FIELDS(key); + K2_DEF_FMT(SET_ConfiguratorResponse, key); +}; + +struct GET_ConfiguratorRequest { + String key; + K2_PAYLOAD_FIELDS(key); + K2_DEF_FMT(GET_ConfiguratorRequest, key); +}; + +struct GET_ConfiguratorResponse { + String key; + String value; + K2_PAYLOAD_FIELDS(key, value); + K2_DEF_FMT(GET_ConfiguratorResponse, key, value); +}; + +} // ns k2 diff --git a/src/k2/transport/RPCTypes.h b/src/k2/transport/RPCTypes.h index 2e6a9cf1..0f314226 100644 --- a/src/k2/transport/RPCTypes.h +++ b/src/k2/transport/RPCTypes.h @@ -38,6 +38,9 @@ typedef uint8_t Verb; // Verbs used by K2 internally enum InternalVerbs : k2::Verb { LIST_ENDPOINTS = 249, // used to discover the endpoints of a node + CONFGURATOR_GET = 250, // used to configure get. + CONFGURATOR_SET = 251, // used to configure set. + CONFGURATOR_DELETE = 252, // used to configure clear messages. MAX_VERB = 250, // something we can use to prevent override of internal verbs. NIL // used for messages where the verb doesn't matter }; diff --git a/test/cpo/CMakeLists.txt b/test/cpo/CMakeLists.txt index e1c684bc..85ee2f94 100644 --- a/test/cpo/CMakeLists.txt +++ b/test/cpo/CMakeLists.txt @@ -4,5 +4,5 @@ file(GLOB SOURCES "*.cpp") add_executable (cpo_test ${HEADERS} CPOTest.cpp Main.cpp) add_executable(cpo_client_test CPOClientTest.cpp) -target_link_libraries (cpo_test PRIVATE appbase Seastar::seastar dto tso_client transport) -target_link_libraries (cpo_client_test PRIVATE appbase Seastar::seastar dto tso_client cpo_client transport common) +target_link_libraries (cpo_test PRIVATE appbase Seastar::seastar dto tso_client configurator transport) +target_link_libraries (cpo_client_test PRIVATE appbase Seastar::seastar dto tso_client cpo_client configurator transport common) diff --git a/test/dto/CMakeLists.txt b/test/dto/CMakeLists.txt index 54bdee9a..8c1e8158 100644 --- a/test/dto/CMakeLists.txt +++ b/test/dto/CMakeLists.txt @@ -3,4 +3,4 @@ file(GLOB SOURCES "*.cpp") add_executable (partition_test ${HEADERS} PartitionTest.cpp) -target_link_libraries (partition_test PRIVATE Seastar::seastar dto transport cpo_client tso_client k23si_client appbase) +target_link_libraries (partition_test PRIVATE Seastar::seastar dto transport configurator cpo_client tso_client k23si_client appbase) diff --git a/test/k23si/CMakeLists.txt b/test/k23si/CMakeLists.txt index db269e93..2202dbe5 100644 --- a/test/k23si/CMakeLists.txt +++ b/test/k23si/CMakeLists.txt @@ -12,15 +12,15 @@ add_executable (skv_client_test ${HEADERS} SKVClientTest.cpp) add_executable (query_test ${HEADERS} QueryTest.cpp) add_executable (expression_test ${HEADERS} ExpressionTest.cpp) -target_link_libraries (k23si_test PRIVATE appbase Seastar::seastar tso_client k23si cpo_client infrastructure dto transport) +target_link_libraries (k23si_test PRIVATE appbase Seastar::seastar tso_client k23si cpo_client infrastructure dto configurator transport) target_link_libraries (indexer_test PRIVATE k23si tso_client cpo_client infrastructure dto transport appbase Seastar::seastar) target_link_libraries (skv_record_test PRIVATE dto transport) target_link_libraries (key_encoding_test PRIVATE dto transport) -target_link_libraries (schema_creation_test PRIVATE appbase Seastar::seastar dto transport) +target_link_libraries (schema_creation_test PRIVATE appbase Seastar::seastar dto configurator transport) target_link_libraries (skv_ser_test PRIVATE dto transport) -target_link_libraries (3si_txn_test PRIVATE appbase dto transport tso_client Seastar::seastar) -target_link_libraries (skv_client_test PRIVATE tso_client k23si_client cpo_client appbase dto transport Seastar::seastar) -target_link_libraries (query_test PRIVATE tso_client k23si_client cpo_client appbase dto transport Seastar::seastar) +target_link_libraries (3si_txn_test PRIVATE appbase dto configurator transport tso_client Seastar::seastar) +target_link_libraries (skv_client_test PRIVATE tso_client k23si_client cpo_client appbase dto configurator transport Seastar::seastar) +target_link_libraries (query_test PRIVATE tso_client k23si_client cpo_client appbase dto configurator transport Seastar::seastar) target_link_libraries (expression_test PRIVATE dto transport Seastar::seastar) add_test(NAME indexer COMMAND indexer_test) diff --git a/test/plog/CMakeLists.txt b/test/plog/CMakeLists.txt index 3ad04c9c..79821e8e 100644 --- a/test/plog/CMakeLists.txt +++ b/test/plog/CMakeLists.txt @@ -4,5 +4,5 @@ file(GLOB SOURCES "*.cpp") add_executable (plog_test ${HEADERS} PlogClientTest.cpp) add_executable (logstream_test ${HEADERS} LogStreamTest.cpp) -target_link_libraries (plog_test PRIVATE appbase cpo_client transport common plog_client Seastar::seastar dto) -target_link_libraries (logstream_test PRIVATE appbase cpo_client plog_client transport common log_stream Seastar::seastar dto) +target_link_libraries (plog_test PRIVATE appbase cpo_client transport configurator common plog_client Seastar::seastar dto) +target_link_libraries (logstream_test PRIVATE appbase cpo_client plog_client transport configurator common log_stream Seastar::seastar dto) From 97e0f3373c3fa763f8538a00e7bd955af55442b8 Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 13:38:49 -0800 Subject: [PATCH 2/7] added integration test --- test/CMakeLists.txt | 1 + test/configurator/CMakeLists.txt | 6 ++ test/configurator/ConfiguratorTest.cpp | 80 ++++++++++++++++++++++++++ test/integration/test_configurator.sh | 51 ++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 test/configurator/CMakeLists.txt create mode 100644 test/configurator/ConfiguratorTest.cpp create mode 100644 test/integration/test_configurator.sh diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 53f32934..1886a971 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,7 @@ enable_testing() include_directories(include) add_subdirectory (cpo) +add_subdirectory (configurator) add_subdirectory (transport) add_subdirectory (k23si) add_subdirectory (plog) diff --git a/test/configurator/CMakeLists.txt b/test/configurator/CMakeLists.txt new file mode 100644 index 00000000..b9175b10 --- /dev/null +++ b/test/configurator/CMakeLists.txt @@ -0,0 +1,6 @@ +file(GLOB HEADERS "*.h") +file(GLOB SOURCES "*.cpp") + +add_executable (configurator_test ${HEADERS} ConfiguratorTest.cpp) + +target_link_libraries (configurator_test PRIVATE appbase dto configurator transport tso_client Seastar::seastar) diff --git a/test/configurator/ConfiguratorTest.cpp b/test/configurator/ConfiguratorTest.cpp new file mode 100644 index 00000000..38756292 --- /dev/null +++ b/test/configurator/ConfiguratorTest.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include + +#include "k2/configurator/ConfiguratorDTO.h" + +namespace k2 { +namespace log { +inline thread_local k2::logging::Logger configuratortest("k2::configuratortest"); +} + +class ConfiguratorTest { + public: + seastar::future<> start() { + + K2LOG_I(log::configuratortest, "Registering message handlers"); + auto ep = RPC().getServerEndpoint(TCPRPCProtocol::proto); + + _singleTimer.setCallback([ep, this] { + return seastar::make_ready_future() + .then([ep, this]() { + K2LOG_I(log::configuratortest, "endpoint: {}", ep->url); + K2LOG_I(log::configuratortest, "putting record"); + SET_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; + return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); + }); + }).then([ep, this] { + GET_ConfiguratorRequest request{.key=_key()}; + return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratortest, "got response : {} {}", status, response ); + }); + }).then([ep, this] { + K2LOG_I(log::configuratortest, "deleting record"); + DELETE_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; + return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); + }); + }) + .then([] { + AppBase().stop(0); + }); + }); + + _singleTimer.arm(0s); + return seastar::make_ready_future(); + } + + seastar::future<> gracefulStop() { + K2LOG_I(log::configuratortest, "stop"); + return _singleTimer.stop(); + } + + private : + SingleTimer _singleTimer; + ConfigVar _key{"key"}; + k2::ConfigVar _value{"value"}; + k2::ConfigVar _applyToAll{"applyToAll"}; + }; +} + +int main(int argc, char** argv) { + k2::App app("ConfiguratorTest"); + app.addOptions() + ("key", bpo::value(), "e.g. '--key abc"); + app.addOptions() + ("value", bpo::value(), "e.g. '--value 100"); + app.addOptions() + ("applyToAll", bpo::value()->default_value(false), "e.g. '--applyToAll true, or --applyToAll false"); + app.addApplet(); + return app.start(argc, argv); +} \ No newline at end of file diff --git a/test/integration/test_configurator.sh b/test/integration/test_configurator.sh new file mode 100644 index 00000000..5dd067f0 --- /dev/null +++ b/test/integration/test_configurator.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -e +topname=$(dirname "$0") +source ${topname}/common_defs.sh +cd ${topname}/../.. + +# start nodepool +./build/src/k2/cmd/nodepool/nodepool ${COMMON_ARGS} --log_level Info k2::skv_server=Info -c${#EPS[@]} --tcp_endpoints ${EPS[@]} --k23si_persistence_endpoint ${PERSISTENCE} --prometheus_port 63001 --partition_request_timeout=30s & +nodepool_child_pid=$! + +# start persistence +./build/src/k2/cmd/persistence/persistence ${COMMON_ARGS} -c1 --tcp_endpoints ${PERSISTENCE} --prometheus_port 63002 & +persistence_child_pid=$! + +# start tso +./build/src/k2/cmd/tso/tso ${COMMON_ARGS} -c1 --tcp_endpoints ${TSO} --prometheus_port 63003 --tso.clock_poller_cpu=${TSO_POLLER_CORE} & +tso_child_pid=$! + +# start CPO +./build/src/k2/cmd/controlPlaneOracle/cpo_main ${COMMON_ARGS} -c1 --tcp_endpoints ${CPO} --data_dir ${CPODIR} --txn_heartbeat_deadline=10s --prometheus_port 63000 --assignment_timeout=1s --nodepool_endpoints ${EPS[@]} --tso_endpoints ${TSO} --tso_error_bound=100us --persistence_endpoints ${PERSISTENCE} & +cpo_child_pid=$! + + +function finish { + rv=$? + # cleanup code + rm -rf ${CPODIR} + + kill ${cpo_child_pid} + echo "Waiting for cpo child pid: ${cpo_child_pid}" + wait ${cpo_child_pid} + + kill ${nodepool_child_pid} + echo "Waiting for nodepool child pid: ${nodepool_child_pid}" + wait ${nodepool_child_pid} + + kill ${persistence_child_pid} + echo "Waiting for persistence child pid: ${persistence_child_pid}" + wait ${persistence_child_pid} + + kill ${tso_child_pid} + echo "Waiting for tso child pid: ${tso_child_pid}" + wait ${tso_child_pid} + echo ">>>> Test ${0} finished with code ${rv}" +} +trap finish EXIT + +sleep 1 + +./build/test/k23si/configurator_test ${COMMON_ARGS} --key "log_level" --value "Error" --prometheus_port 63100 +./build/test/k23si/configurator_test ${COMMON_ARGS} --key "test_var" --value "test_value" --applyToAll "true" --prometheus_port 63100 \ No newline at end of file From 081ceebf95f920b4ff50ecebd90a9fa05421f3b6 Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 14:04:34 -0800 Subject: [PATCH 3/7] removed configurator_client.cp from cmd/demo --- src/k2/cmd/demo/CMakeLists.txt | 2 - src/k2/cmd/demo/configurator_client.cpp | 94 ------------------------- 2 files changed, 96 deletions(-) delete mode 100644 src/k2/cmd/demo/configurator_client.cpp diff --git a/src/k2/cmd/demo/CMakeLists.txt b/src/k2/cmd/demo/CMakeLists.txt index 4ada99b6..dfe2fbd3 100644 --- a/src/k2/cmd/demo/CMakeLists.txt +++ b/src/k2/cmd/demo/CMakeLists.txt @@ -2,9 +2,7 @@ add_executable (k2_demo_service service.cpp) add_executable (k2_demo_rpc_echo rpc_echo.cpp) add_executable (k2_demo_rpc_service rpc_service.cpp) add_executable (k2_demo_tso tso_sample_app.cpp) -add_executable (configurator_client configurator_client.cpp) -target_link_libraries (configurator_client PRIVATE appbase configurator transport common Seastar::seastar) target_link_libraries (k2_demo_service PRIVATE appbase configurator transport common Seastar::seastar) target_link_libraries (k2_demo_rpc_echo PRIVATE appbase configurator transport common Seastar::seastar) target_link_libraries (k2_demo_rpc_service PRIVATE appbase configurator transport common Seastar::seastar) diff --git a/src/k2/cmd/demo/configurator_client.cpp b/src/k2/cmd/demo/configurator_client.cpp deleted file mode 100644 index 705aaf8e..00000000 --- a/src/k2/cmd/demo/configurator_client.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include -#include -#include - -#include "k2/configurator/ConfiguratorDTO.h" - -namespace k2 { -namespace log { -inline thread_local k2::logging::Logger configuratorclient("k2::configurator_client"); -} - -class ConfiguratorClient { - public: - seastar::future<> start() { - - K2LOG_I(log::configuratorclient, "Registering message handlers"); - - _singleTimer.setCallback([this] { - return seastar::make_ready_future() - .then([this]() { - auto ep = RPC().getServerEndpoint(TCPRPCProtocol::proto); - K2LOG_I(log::configuratorclient, "endpoint: {}", ep->url); - if (_op() == "GET") { - GET_ConfiguratorRequest request{.key=_key()}; - return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) - .then([](auto&& result) { - auto& [status, response] = result; - K2LOG_I(log::configuratorclient, "got response : {} {}", status, response ); - }); - } else if (_op() == "PUT") { - K2LOG_I(log::configuratorclient, "putting record"); - SET_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; - return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) - .then([](auto&& result) { - auto& [status, response] = result; - K2LOG_I(log::configuratorclient, "put response : {} {}", status, response ); - }); - } else if (_op() == "DELETE") { - K2LOG_I(log::configuratorclient, "deleting record"); - DELETE_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; - return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) - .then([](auto&& result) { - auto& [status, response] = result; - K2LOG_I(log::configuratorclient, "put response : {} {}", status, response ); - }); - } - else { - K2LOG_E(log::configuratorclient, "Not supported operation {}", _op()); - return seastar::make_ready_future(); - } - }) - .then([] { - AppBase().stop(0); - }); - }); - - _singleTimer.arm(0s); - return seastar::make_ready_future(); - } - - seastar::future<> gracefulStop() { - K2LOG_I(log::configuratorclient, "stop"); - return _singleTimer.stop(); - } - - private : - SingleTimer _singleTimer; - ConfigVar _key{"key"}; - ConfigVar _value{"value"}; - ConfigVar _op{"op"}; - ConfigVar _applyToAll{"applyToAll"}; -}; -} - -int main(int argc, char** argv) { - k2::App app("ConfiguratorClient"); - - app.addOptions() - ("key", bpo::value(), "e.g. '--key abc"); - - app.addOptions() - ("value", bpo::value(), "e.g. '--value 100"); - - app.addOptions() - ("op", bpo::value(), "e.g. '--op GET, or --op SET"); - - app.addOptions() - ("applyToAll", bpo::value(), "e.g. '--applyToAll true, or --applyToAll false"); - - app.addApplet(); - return app.start(argc, argv); -} From 38a5f2867d24d1364f40e76cfe3f7902c9014d4e Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 16:31:15 -0800 Subject: [PATCH 4/7] increased MAX_VERB to 253 --- src/k2/transport/RPCTypes.h | 2 +- test/configurator/ConfiguratorTest.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/k2/transport/RPCTypes.h b/src/k2/transport/RPCTypes.h index 0f314226..48749aeb 100644 --- a/src/k2/transport/RPCTypes.h +++ b/src/k2/transport/RPCTypes.h @@ -41,7 +41,7 @@ enum InternalVerbs : k2::Verb { CONFGURATOR_GET = 250, // used to configure get. CONFGURATOR_SET = 251, // used to configure set. CONFGURATOR_DELETE = 252, // used to configure clear messages. - MAX_VERB = 250, // something we can use to prevent override of internal verbs. + MAX_VERB = 253, // something we can use to prevent override of internal verbs. NIL // used for messages where the verb doesn't matter }; diff --git a/test/configurator/ConfiguratorTest.cpp b/test/configurator/ConfiguratorTest.cpp index 38756292..eaa8cf70 100644 --- a/test/configurator/ConfiguratorTest.cpp +++ b/test/configurator/ConfiguratorTest.cpp @@ -28,13 +28,15 @@ class ConfiguratorTest { .then([](auto&& result) { auto& [status, response] = result; K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); + K2EXPECT(log::configuratortest, response.key, _key()); }); }).then([ep, this] { GET_ConfiguratorRequest request{.key=_key()}; return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) .then([](auto&& result) { auto& [status, response] = result; - K2LOG_I(log::configuratortest, "got response : {} {}", status, response ); + K2LOG_I(log::configuratortest, "got response : {} {}", status, response); + K2EXPECT(log::configuratortest, response.value, _value()); }); }).then([ep, this] { K2LOG_I(log::configuratortest, "deleting record"); @@ -43,7 +45,16 @@ class ConfiguratorTest { .then([](auto&& result) { auto& [status, response] = result; K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); + K2EXPECT(log::configuratortest, response.key, _key()); }); + }).then([ep, this] { + GET_ConfiguratorRequest request{.key=_key()}; + return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) + .then([](auto&& result) { + auto& [status, response] = result; + K2LOG_I(log::configuratortest, "got response : {} {}", status, response); + K2EXPECT(log::configuratortest, status, Statuses::S404_Not_Found); + }); }) .then([] { AppBase().stop(0); From 5fe378dae9004129e8ac3a814d5d378a31eb0d0e Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 17:54:28 -0800 Subject: [PATCH 5/7] fixes build errors --- test/configurator/ConfiguratorTest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/configurator/ConfiguratorTest.cpp b/test/configurator/ConfiguratorTest.cpp index eaa8cf70..6fa5ce2a 100644 --- a/test/configurator/ConfiguratorTest.cpp +++ b/test/configurator/ConfiguratorTest.cpp @@ -25,7 +25,7 @@ class ConfiguratorTest { K2LOG_I(log::configuratortest, "putting record"); SET_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) - .then([](auto&& result) { + .then([this](auto&& result) { auto& [status, response] = result; K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); K2EXPECT(log::configuratortest, response.key, _key()); @@ -33,7 +33,7 @@ class ConfiguratorTest { }).then([ep, this] { GET_ConfiguratorRequest request{.key=_key()}; return RPC().callRPC(CONFGURATOR_GET, request, *ep, 1s) - .then([](auto&& result) { + .then([this](auto&& result) { auto& [status, response] = result; K2LOG_I(log::configuratortest, "got response : {} {}", status, response); K2EXPECT(log::configuratortest, response.value, _value()); @@ -42,7 +42,7 @@ class ConfiguratorTest { K2LOG_I(log::configuratortest, "deleting record"); DELETE_ConfiguratorRequest request{.key=_key(), .value=_value(), .applyToAll=_applyToAll()}; return RPC().callRPC(CONFGURATOR_SET, request, *ep, 1s) - .then([](auto&& result) { + .then([this](auto&& result) { auto& [status, response] = result; K2LOG_I(log::configuratortest, "put response : {} {}", status, response ); K2EXPECT(log::configuratortest, response.key, _key()); From 2fa712f1c572979148f5eb64bd7fee8da09a001a Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 18:08:24 -0800 Subject: [PATCH 6/7] changed permission on test_configurator.sh to 755 --- test/integration/test_configurator.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 test/integration/test_configurator.sh diff --git a/test/integration/test_configurator.sh b/test/integration/test_configurator.sh old mode 100644 new mode 100755 From 6042f86085890308f75b52c7f8b91d6fff2e4d73 Mon Sep 17 00:00:00 2001 From: Manoj Kandlikar Date: Fri, 27 Jan 2023 18:13:20 -0800 Subject: [PATCH 7/7] corrected path in shell script for configurator --- test/integration/test_configurator.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/test_configurator.sh b/test/integration/test_configurator.sh index 5dd067f0..b7bba001 100755 --- a/test/integration/test_configurator.sh +++ b/test/integration/test_configurator.sh @@ -47,5 +47,5 @@ trap finish EXIT sleep 1 -./build/test/k23si/configurator_test ${COMMON_ARGS} --key "log_level" --value "Error" --prometheus_port 63100 -./build/test/k23si/configurator_test ${COMMON_ARGS} --key "test_var" --value "test_value" --applyToAll "true" --prometheus_port 63100 \ No newline at end of file +./build/test/configurator/configurator_test ${COMMON_ARGS} --key "log_level" --value "Error" --prometheus_port 63100 +./build/test/configurator/configurator_test ${COMMON_ARGS} --key "test_var" --value "test_value" --applyToAll "true" --prometheus_port 63100 \ No newline at end of file