This is an automated email from the ASF dual-hosted git repository. szaszm pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit e579692e6f0a60dd073b687def30361552ef9c23 Author: Ferenc Gerlits <[email protected]> AuthorDate: Wed Aug 2 17:54:15 2023 +0200 MINIFICPP-2162 Use className instead of getClassName Closes #1611 Signed-off-by: Marton Szasz <[email protected]> --- extensions/jni/jvm/JVMLoader.h | 12 +++++---- .../rocksdb-repos/DatabaseContentRepository.h | 5 ++-- extensions/rocksdb-repos/FlowFileRepository.h | 9 ++++--- extensions/rocksdb-repos/ProvenanceRepository.h | 5 ++-- extensions/rocksdb-repos/RocksDbRepository.h | 5 ++-- libminifi/include/agent/agent_docs.h | 2 +- libminifi/include/core/Connectable.h | 5 ++-- libminifi/include/core/ContentRepository.h | 3 ++- libminifi/include/core/Core.h | 30 +++------------------- libminifi/include/core/ObjectFactory.h | 8 +++--- libminifi/include/core/Processor.h | 2 +- libminifi/include/core/Repository.h | 5 ++-- libminifi/include/core/SerializableComponent.h | 8 +++--- .../include/core/controller/ControllerService.h | 2 +- .../core/controller/ControllerServiceProvider.h | 12 +++++---- .../include/core/logging/LoggerConfiguration.h | 11 ++++---- libminifi/include/core/logging/LoggerFactory.h | 8 +++--- .../include/core/repository/FileSystemRepository.h | 5 ++-- .../core/repository/VolatileContentRepository.h | 3 ++- .../core/repository/VolatileFlowFileRepository.h | 5 ++-- .../core/repository/VolatileProvenanceRepository.h | 5 ++-- .../include/core/repository/VolatileRepository.h | 5 ++-- libminifi/include/provenance/Provenance.h | 2 +- libminifi/include/utils/ClassUtils.h | 3 ++- libminifi/include/utils/StringUtils.h | 8 +++--- libminifi/src/FlowController.cpp | 2 +- libminifi/src/core/Connectable.cpp | 8 +++--- libminifi/src/core/Core.cpp | 4 +-- libminifi/src/core/FlowConfiguration.cpp | 2 +- libminifi/src/core/logging/LoggerConfiguration.cpp | 13 +++++----- libminifi/src/core/logging/LoggerFactory.cpp | 2 +- .../core/logging/internal/CompressionManager.cpp | 18 +++---------- libminifi/src/provenance/Provenance.cpp | 2 +- libminifi/src/utils/ClassUtils.cpp | 2 +- libminifi/src/utils/StringUtils.cpp | 11 ++++---- libminifi/test/TestBase.cpp | 24 ++++++++--------- libminifi/test/TestBase.h | 11 ++++---- libminifi/test/sql-tests/mocks/MockConnectors.cpp | 8 +++--- libminifi/test/unit/CoreTests.cpp | 7 ----- libminifi/test/unit/StringUtilsTests.cpp | 2 +- 40 files changed, 131 insertions(+), 153 deletions(-) diff --git a/extensions/jni/jvm/JVMLoader.h b/extensions/jni/jvm/JVMLoader.h index 3e2d49c23..628587b16 100644 --- a/extensions/jni/jvm/JVMLoader.h +++ b/extensions/jni/jvm/JVMLoader.h @@ -21,11 +21,13 @@ #include <memory> #include <utility> #include <string> +#include <string_view> #include <map> #include <vector> #include <sstream> #include <iterator> #include <algorithm> + #include "JavaClass.h" #include "JavaServicer.h" #include "../JavaException.h" @@ -250,9 +252,9 @@ class JVMLoader { * stack overflow. It's a common field, so the hope is that we can potentially access any class * in which the native pointer is stored in nativePtr. */ - static jfieldID getPtrField(const std::string &className, JNIEnv *env, jobject obj) { + static jfieldID getPtrField(std::string_view className, JNIEnv *env, jobject obj) { static std::string fn = "nativePtr", args = "J", lookup = "nativePtrJ"; - auto field = getClassMapping().getField(className, lookup); + auto field = getClassMapping().getField(std::string(className), lookup); if (field != nullptr) { return field; } @@ -263,14 +265,14 @@ class JVMLoader { template<typename T> static T *getPtr(JNIEnv *env, jobject obj) { - jlong handle = env->GetLongField(obj, getPtrField(minifi::core::getClassName<T>(), env, obj)); + jlong handle = env->GetLongField(obj, getPtrField(minifi::core::className<T>(), env, obj)); return reinterpret_cast<T *>(handle); } template<typename T> static void setPtr(JNIEnv *env, jobject obj, T *t) { jlong handle = reinterpret_cast<jlong>(t); - env->SetLongField(obj, getPtrField(minifi::core::getClassName<T>(), env, obj), handle); + env->SetLongField(obj, getPtrField(minifi::core::className<T>(), env, obj), handle); } void setBaseServicer(std::shared_ptr<JavaServicer> servicer) { @@ -285,7 +287,7 @@ class JVMLoader { template<typename T> static void putClassMapping(JNIEnv *env, JavaClass &clazz, const std::string &fieldStr, const std::string &arg) { auto classref = clazz.getReference(); - auto name = minifi::core::getClassName<T>(); + auto name = std::string{minifi::core::className<T>()}; auto field = env->GetFieldID(classref, fieldStr.c_str(), arg.c_str()); auto fieldName = fieldStr + arg; getClassMapping().putField(name, fieldName, field); diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.h b/extensions/rocksdb-repos/DatabaseContentRepository.h index c57a2c8ea..ec3c24199 100644 --- a/extensions/rocksdb-repos/DatabaseContentRepository.h +++ b/extensions/rocksdb-repos/DatabaseContentRepository.h @@ -18,6 +18,7 @@ #include <memory> #include <string> +#include <string_view> #include <utility> #include <thread> @@ -44,8 +45,8 @@ class DatabaseContentRepository : public core::ContentRepository { public: static constexpr const char* ENCRYPTION_KEY_NAME = "nifi.database.content.repository.encryption.key"; - explicit DatabaseContentRepository(std::string name = getClassName<DatabaseContentRepository>(), const utils::Identifier& uuid = {}) - : core::ContentRepository(std::move(name), uuid), + explicit DatabaseContentRepository(std::string_view name = className<DatabaseContentRepository>(), const utils::Identifier& uuid = {}) + : core::ContentRepository(name, uuid), is_valid_(false), db_(nullptr), logger_(logging::LoggerFactory<DatabaseContentRepository>::getLogger()) { diff --git a/extensions/rocksdb-repos/FlowFileRepository.h b/extensions/rocksdb-repos/FlowFileRepository.h index 59d0ffa6f..d22ea0de1 100644 --- a/extensions/rocksdb-repos/FlowFileRepository.h +++ b/extensions/rocksdb-repos/FlowFileRepository.h @@ -19,6 +19,7 @@ #include <utility> #include <vector> #include <string> +#include <string_view> #include <memory> #include <list> @@ -68,16 +69,16 @@ class FlowFileRepository : public RocksDbRepository, public SwapManager { public: static constexpr const char* ENCRYPTION_KEY_NAME = "nifi.flowfile.repository.encryption.key"; - FlowFileRepository(std::string name, const utils::Identifier& /*uuid*/) - : FlowFileRepository(std::move(name)) { + FlowFileRepository(std::string_view name, const utils::Identifier& /*uuid*/) + : FlowFileRepository(name) { } - explicit FlowFileRepository(const std::string& repo_name = "", + explicit FlowFileRepository(const std::string_view repo_name = "", std::string directory = FLOWFILE_REPOSITORY_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_FLOWFILE_REPOSITORY_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_FLOWFILE_REPOSITORY_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = FLOWFILE_REPOSITORY_PURGE_PERIOD) - : RocksDbRepository(repo_name.length() > 0 ? std::move(repo_name) : core::getClassName<FlowFileRepository>(), + : RocksDbRepository(repo_name.length() > 0 ? repo_name : core::className<FlowFileRepository>(), std::move(directory), maxPartitionMillis, maxPartitionBytes, purgePeriod, logging::LoggerFactory<FlowFileRepository>::getLogger()) { } diff --git a/extensions/rocksdb-repos/ProvenanceRepository.h b/extensions/rocksdb-repos/ProvenanceRepository.h index 1c6874149..eb2f35fee 100644 --- a/extensions/rocksdb-repos/ProvenanceRepository.h +++ b/extensions/rocksdb-repos/ProvenanceRepository.h @@ -19,6 +19,7 @@ #include <cinttypes> #include <vector> #include <string> +#include <string_view> #include <memory> #include <algorithm> #include <utility> @@ -44,12 +45,12 @@ class ProvenanceRepository : public core::repository::RocksDbRepository { : ProvenanceRepository(std::move(name)) { } - explicit ProvenanceRepository(std::string repo_name = "", + explicit ProvenanceRepository(std::string_view repo_name = "", std::string directory = PROVENANCE_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_PROVENANCE_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_PROVENANCE_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = PROVENANCE_PURGE_PERIOD) - : RocksDbRepository(repo_name.length() > 0 ? std::move(repo_name) : core::getClassName<ProvenanceRepository>(), + : RocksDbRepository(repo_name.length() > 0 ? repo_name : core::className<ProvenanceRepository>(), directory, maxPartitionMillis, maxPartitionBytes, purgePeriod, core::logging::LoggerFactory<ProvenanceRepository>::getLogger()) { } diff --git a/extensions/rocksdb-repos/RocksDbRepository.h b/extensions/rocksdb-repos/RocksDbRepository.h index 88ab000ce..c4e606cfc 100644 --- a/extensions/rocksdb-repos/RocksDbRepository.h +++ b/extensions/rocksdb-repos/RocksDbRepository.h @@ -19,6 +19,7 @@ #include <utility> #include <vector> #include <string> +#include <string_view> #include <memory> #include "database/RocksDatabase.h" @@ -30,13 +31,13 @@ constexpr auto FLOWFILE_REPOSITORY_RETRY_INTERVAL_INCREMENTS = std::chrono::mill class RocksDbRepository : public ThreadedRepository { public: - RocksDbRepository(std::string repo_name, + RocksDbRepository(std::string_view repo_name, std::string directory, std::chrono::milliseconds max_partition_millis, int64_t max_partition_bytes, std::chrono::milliseconds purge_period, std::shared_ptr<logging::Logger> logger) - : ThreadedRepository(std::move(repo_name), std::move(directory), max_partition_millis, max_partition_bytes, purge_period), + : ThreadedRepository(repo_name, std::move(directory), max_partition_millis, max_partition_bytes, purge_period), logger_(std::move(logger)) { } diff --git a/libminifi/include/agent/agent_docs.h b/libminifi/include/agent/agent_docs.h index fac0bdfc9..7f0789fa5 100644 --- a/libminifi/include/agent/agent_docs.h +++ b/libminifi/include/agent/agent_docs.h @@ -73,7 +73,7 @@ inline auto toVector(std::span<const core::RelationshipDefinition> relationships template<typename T> std::string classNameWithDots() { - std::string class_name = core::getClassName<T>(); + std::string class_name{core::className<T>()}; return utils::StringUtils::replaceAll(class_name, "::", "."); } } // namespace detail diff --git a/libminifi/include/core/Connectable.h b/libminifi/include/core/Connectable.h index ef3c12c13..129bf2ef2 100644 --- a/libminifi/include/core/Connectable.h +++ b/libminifi/include/core/Connectable.h @@ -20,6 +20,7 @@ #include <map> #include <memory> #include <string> +#include <string_view> #include <vector> #include <set> #include <unordered_set> @@ -45,9 +46,9 @@ class FlowFile; */ class Connectable : public CoreComponent { public: - explicit Connectable(std::string name); + explicit Connectable(std::string_view name); - explicit Connectable(std::string name, const utils::Identifier &uuid); + explicit Connectable(std::string_view name, const utils::Identifier &uuid); Connectable(const Connectable &other) = delete; Connectable(Connectable &&other) = delete; diff --git a/libminifi/include/core/ContentRepository.h b/libminifi/include/core/ContentRepository.h index 68230d42b..cff166262 100644 --- a/libminifi/include/core/ContentRepository.h +++ b/libminifi/include/core/ContentRepository.h @@ -20,6 +20,7 @@ #include <map> #include <memory> #include <string> +#include <string_view> #include <utility> #include <list> @@ -37,7 +38,7 @@ namespace org::apache::nifi::minifi::core { */ class ContentRepository : public core::CoreComponent, public StreamManager<minifi::ResourceClaim>, public utils::EnableSharedFromThis<ContentRepository>, public core::RepositoryMetricsSource { public: - explicit ContentRepository(std::string name, const utils::Identifier& uuid = {}) : core::CoreComponent(std::move(name), uuid) {} + explicit ContentRepository(std::string_view name, const utils::Identifier& uuid = {}) : core::CoreComponent(name, uuid) {} ~ContentRepository() override = default; virtual bool initialize(const std::shared_ptr<Configure> &configure) = 0; diff --git a/libminifi/include/core/Core.h b/libminifi/include/core/Core.h index edebcd568..3d96ec71a 100644 --- a/libminifi/include/core/Core.h +++ b/libminifi/include/core/Core.h @@ -26,6 +26,7 @@ #include <memory> #include <string> #include <string_view> +#include <type_traits> #ifdef WIN32 #pragma comment(lib, "shlwapi.lib") @@ -75,29 +76,6 @@ */ namespace org::apache::nifi::minifi::core { -template<typename T> -static inline std::string getClassName() { -#ifndef WIN32 - char *b = abi::__cxa_demangle(typeid(T).name(), 0, 0, 0); - if (b == nullptr) - return {}; - std::string name = b; - std::free(b); - return name; -#else - std::string_view name = typeid(T).name(); - const std::string_view class_prefix = "class "; - const std::string_view struct_prefix = "struct "; - - if (utils::StringUtils::startsWith(name, class_prefix)) { - name.remove_prefix(class_prefix.length()); - } else if (utils::StringUtils::startsWith(name, struct_prefix)) { - name.remove_prefix(struct_prefix.length()); - } - return std::string{name}; -#endif -} - constexpr std::string_view removeStructOrClassPrefix(std::string_view input) { using namespace std::literals; for (auto prefix : { "struct "sv, "class "sv }) { @@ -127,8 +105,6 @@ constexpr auto typeNameArray() { # error Unsupported compiler #endif - static_assert(function.find(prefix) != std::string_view::npos && function.rfind(suffix) != std::string_view::npos); - constexpr auto start = function.find(prefix) + prefix.size(); constexpr auto end = function.rfind(suffix); static_assert(start < end); @@ -149,7 +125,7 @@ struct TypeNameHolder { template<typename T> constexpr std::string_view className() { - return utils::array_to_string_view(TypeNameHolder<T>::value); + return utils::array_to_string_view(TypeNameHolder<std::remove_reference_t<T>>::value); } template<typename T> @@ -168,7 +144,7 @@ std::unique_ptr<T> instantiate(const std::string name = {}) { */ class CoreComponent { public: - explicit CoreComponent(std::string name, const utils::Identifier &uuid = {}, const std::shared_ptr<utils::IdGenerator> &idGenerator = utils::IdGenerator::getIdGenerator()); + explicit CoreComponent(std::string_view name, const utils::Identifier &uuid = {}, const std::shared_ptr<utils::IdGenerator> &idGenerator = utils::IdGenerator::getIdGenerator()); CoreComponent(const CoreComponent &other) = default; CoreComponent(CoreComponent &&other) = default; CoreComponent& operator=(const CoreComponent&) = default; diff --git a/libminifi/include/core/ObjectFactory.h b/libminifi/include/core/ObjectFactory.h index 2a777e80b..d729f6bb5 100644 --- a/libminifi/include/core/ObjectFactory.h +++ b/libminifi/include/core/ObjectFactory.h @@ -89,13 +89,13 @@ class ObjectFactory { template<class T> class DefautObjectFactory : public ObjectFactory { public: - DefautObjectFactory() { - className = core::getClassName<T>(); + DefautObjectFactory() + : className(core::className<T>()) { } explicit DefautObjectFactory(std::string group_name) - : ObjectFactory(std::move(group_name)) { - className = core::getClassName<T>(); + : ObjectFactory(std::move(group_name)), + className(core::className<T>()) { } /** diff --git a/libminifi/include/core/Processor.h b/libminifi/include/core/Processor.h index 8e32de05e..f2266ea4b 100644 --- a/libminifi/include/core/Processor.h +++ b/libminifi/include/core/Processor.h @@ -45,7 +45,7 @@ #define ADD_GET_PROCESSOR_NAME \ std::string getProcessorType() const override { \ - auto class_name = org::apache::nifi::minifi::core::getClassName<decltype(*this)>(); \ + auto class_name = org::apache::nifi::minifi::core::className<decltype(*this)>(); \ auto splitted = org::apache::nifi::minifi::utils::StringUtils::split(class_name, "::"); \ return splitted[splitted.size() - 1]; \ } diff --git a/libminifi/include/core/Repository.h b/libminifi/include/core/Repository.h index 0c74732bc..72efd1b40 100644 --- a/libminifi/include/core/Repository.h +++ b/libminifi/include/core/Repository.h @@ -26,6 +26,7 @@ #include <memory> #include <set> #include <string> +#include <string_view> #include <utility> #include <vector> @@ -57,12 +58,12 @@ constexpr auto REPOSITORY_PURGE_PERIOD = std::chrono::milliseconds(2500); class Repository : public core::CoreComponent, public core::RepositoryMetricsSource { public: - explicit Repository(std::string repo_name = "Repository", + explicit Repository(std::string_view repo_name = "Repository", std::string directory = REPOSITORY_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_REPOSITORY_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_REPOSITORY_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = REPOSITORY_PURGE_PERIOD) - : core::CoreComponent(std::move(repo_name)), + : core::CoreComponent(repo_name), max_partition_millis_(maxPartitionMillis), max_partition_bytes_(maxPartitionBytes), purge_period_(purgePeriod), diff --git a/libminifi/include/core/SerializableComponent.h b/libminifi/include/core/SerializableComponent.h index 3d9480ebf..78676f39a 100644 --- a/libminifi/include/core/SerializableComponent.h +++ b/libminifi/include/core/SerializableComponent.h @@ -17,7 +17,7 @@ */ #pragma once -#include <string> +#include <string_view> #include <utility> #include "core/Core.h" @@ -29,11 +29,11 @@ namespace org::apache::nifi::minifi::core { class SerializableComponent : public core::CoreComponent { public: - explicit SerializableComponent(std::string name) - : core::CoreComponent(std::move(name)) { + explicit SerializableComponent(std::string_view name) + : core::CoreComponent(name) { } - virtual ~SerializableComponent() = default; + ~SerializableComponent() override = default; virtual bool serialize(io::OutputStream& output_stream) = 0; virtual bool deserialize(io::InputStream &input_stream) = 0; diff --git a/libminifi/include/core/controller/ControllerService.h b/libminifi/include/core/controller/ControllerService.h index 60823608b..1e21d3091 100644 --- a/libminifi/include/core/controller/ControllerService.h +++ b/libminifi/include/core/controller/ControllerService.h @@ -61,7 +61,7 @@ enum ControllerServiceState { class ControllerService : public ConfigurableComponent, public Connectable { public: ControllerService() - : Connectable(core::getClassName<ControllerService>()), + : Connectable(core::className<ControllerService>()), configuration_(std::make_shared<Configure>()) { current_state_ = DISABLED; } diff --git a/libminifi/include/core/controller/ControllerServiceProvider.h b/libminifi/include/core/controller/ControllerServiceProvider.h index 55f4d0ca2..a9e60ea71 100644 --- a/libminifi/include/core/controller/ControllerServiceProvider.h +++ b/libminifi/include/core/controller/ControllerServiceProvider.h @@ -20,9 +20,11 @@ #include <memory> #include <string> +#include <string_view> #include <utility> #include <future> #include <vector> + #include "core/Core.h" #include "ControllerServiceLookup.h" #include "core/ConfigurableComponent.h" @@ -35,18 +37,18 @@ namespace org::apache::nifi::minifi::core::controller { class ControllerServiceProvider : public CoreComponent, public ConfigurableComponent, public ControllerServiceLookup { public: - explicit ControllerServiceProvider(std::string name) - : CoreComponent(std::move(name)) { + explicit ControllerServiceProvider(std::string_view name) + : CoreComponent(name) { controller_map_ = std::make_shared<ControllerServiceMap>(); } explicit ControllerServiceProvider(std::shared_ptr<ControllerServiceMap> services) - : CoreComponent(core::getClassName<ControllerServiceProvider>()), + : CoreComponent(core::className<ControllerServiceProvider>()), controller_map_(std::move(services)) { } - explicit ControllerServiceProvider(std::string name, std::shared_ptr<ControllerServiceMap> services) - : CoreComponent(std::move(name)), + explicit ControllerServiceProvider(std::string_view name, std::shared_ptr<ControllerServiceMap> services) + : CoreComponent(name), controller_map_(std::move(services)) { } diff --git a/libminifi/include/core/logging/LoggerConfiguration.h b/libminifi/include/core/logging/LoggerConfiguration.h index 42f6d7a45..c12465ae8 100644 --- a/libminifi/include/core/logging/LoggerConfiguration.h +++ b/libminifi/include/core/logging/LoggerConfiguration.h @@ -26,6 +26,7 @@ #include <map> #include <mutex> #include <string> +#include <string_view> #include <unordered_set> #include "spdlog/common.h" @@ -109,17 +110,17 @@ class LoggerConfiguration { /** * Can be used to get arbitrarily named Logger, LoggerFactory should be preferred within a class. */ - std::shared_ptr<Logger> getLogger(const std::string& name, const std::optional<utils::Identifier>& id = {}); + std::shared_ptr<Logger> getLogger(std::string_view name, const std::optional<utils::Identifier>& id = {}); static const char *spdlog_default_pattern; protected: static std::shared_ptr<internal::LoggerNamespace> initialize_namespaces(const std::shared_ptr<LoggerProperties> &logger_properties, const std::shared_ptr<Logger> &logger = {}); - static std::shared_ptr<spdlog::logger> get_logger(const std::shared_ptr<Logger>& logger, const std::shared_ptr<internal::LoggerNamespace> &root_namespace, const std::string &name, + static std::shared_ptr<spdlog::logger> get_logger(const std::shared_ptr<Logger>& logger, const std::shared_ptr<internal::LoggerNamespace> &root_namespace, std::string_view name_view, const std::shared_ptr<spdlog::formatter>& formatter, bool remove_if_present = false); private: - std::shared_ptr<Logger> getLogger(const std::string& name, const std::optional<utils::Identifier>& id, const std::lock_guard<std::mutex>& lock); + std::shared_ptr<Logger> getLogger(std::string_view name, const std::optional<utils::Identifier>& id, const std::lock_guard<std::mutex>& lock); void initializeCompression(const std::lock_guard<std::mutex>& lock, const std::shared_ptr<LoggerProperties>& properties); @@ -132,9 +133,9 @@ class LoggerConfiguration { class LoggerImpl : public Logger { public: - explicit LoggerImpl(std::string name, std::optional<utils::Identifier> id, const std::shared_ptr<LoggerControl> &controller, const std::shared_ptr<spdlog::logger> &delegate) + explicit LoggerImpl(std::string_view name, std::optional<utils::Identifier> id, const std::shared_ptr<LoggerControl> &controller, const std::shared_ptr<spdlog::logger> &delegate) : Logger(delegate, controller), - name(std::move(name)), + name(name), id(internal::formatId(id)) { } diff --git a/libminifi/include/core/logging/LoggerFactory.h b/libminifi/include/core/logging/LoggerFactory.h index 86c9812ec..69a012727 100644 --- a/libminifi/include/core/logging/LoggerFactory.h +++ b/libminifi/include/core/logging/LoggerFactory.h @@ -18,7 +18,7 @@ #pragma once -#include <string> +#include <string_view> #include <memory> #include "core/logging/Logger.h" @@ -28,19 +28,19 @@ namespace org::apache::nifi::minifi::core::logging { class LoggerFactoryBase { public: - static std::shared_ptr<Logger> getAliasedLogger(const std::string& name, const std::optional<utils::Identifier>& id = {}); + static std::shared_ptr<Logger> getAliasedLogger(std::string_view name, const std::optional<utils::Identifier>& id = {}); }; template<typename T> class LoggerFactory : public LoggerFactoryBase { public: static std::shared_ptr<Logger> getLogger() { - static std::shared_ptr<Logger> logger = getAliasedLogger(core::getClassName<T>()); + static std::shared_ptr<Logger> logger = getAliasedLogger(core::className<T>()); return logger; } static std::shared_ptr<Logger> getLogger(const utils::Identifier& uuid) { - return getAliasedLogger(core::getClassName<T>(), uuid); + return getAliasedLogger(core::className<T>(), uuid); } }; diff --git a/libminifi/include/core/repository/FileSystemRepository.h b/libminifi/include/core/repository/FileSystemRepository.h index 99a26b4e3..160714101 100644 --- a/libminifi/include/core/repository/FileSystemRepository.h +++ b/libminifi/include/core/repository/FileSystemRepository.h @@ -20,6 +20,7 @@ #include <memory> #include <string> +#include <string_view> #include <utility> #include <algorithm> @@ -32,8 +33,8 @@ namespace org::apache::nifi::minifi::core::repository { class FileSystemRepository : public core::ContentRepository { public: - explicit FileSystemRepository(std::string name = getClassName<FileSystemRepository>()) - : core::ContentRepository(std::move(name)), + explicit FileSystemRepository(std::string_view name = className<FileSystemRepository>()) + : core::ContentRepository(name), logger_(logging::LoggerFactory<FileSystemRepository>::getLogger()) { } diff --git a/libminifi/include/core/repository/VolatileContentRepository.h b/libminifi/include/core/repository/VolatileContentRepository.h index 0690255f7..04db09c9a 100644 --- a/libminifi/include/core/repository/VolatileContentRepository.h +++ b/libminifi/include/core/repository/VolatileContentRepository.h @@ -20,6 +20,7 @@ #include <map> #include <memory> #include <string> +#include <string_view> #include "AtomicRepoEntries.h" #include "io/AtomicEntryStream.h" @@ -40,7 +41,7 @@ class VolatileContentRepository : public core::ContentRepository { public: static const char *minimal_locking; - explicit VolatileContentRepository(std::string name = getClassName<VolatileContentRepository>()) + explicit VolatileContentRepository(std::string_view name = className<VolatileContentRepository>()) : core::ContentRepository(name), repo_data_(15000, static_cast<size_t>(10_MiB * 0.75)), minimize_locking_(true), diff --git a/libminifi/include/core/repository/VolatileFlowFileRepository.h b/libminifi/include/core/repository/VolatileFlowFileRepository.h index a3b0d9261..c4140af56 100644 --- a/libminifi/include/core/repository/VolatileFlowFileRepository.h +++ b/libminifi/include/core/repository/VolatileFlowFileRepository.h @@ -19,6 +19,7 @@ #include <memory> #include <string> +#include <string_view> #include "VolatileRepository.h" #include "FlowFileRecord.h" @@ -37,12 +38,12 @@ class VolatileFlowFileRepository : public VolatileRepository { friend struct ::VolatileFlowFileRepositoryTestAccessor; public: - explicit VolatileFlowFileRepository(const std::string& repo_name = "", + explicit VolatileFlowFileRepository(std::string_view repo_name = "", const std::string& /*dir*/ = REPOSITORY_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_REPOSITORY_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_REPOSITORY_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = REPOSITORY_PURGE_PERIOD) - : VolatileRepository(repo_name.length() > 0 ? repo_name : core::getClassName<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod) { + : VolatileRepository(repo_name.length() > 0 ? repo_name : core::className<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod) { } ~VolatileFlowFileRepository() override { diff --git a/libminifi/include/core/repository/VolatileProvenanceRepository.h b/libminifi/include/core/repository/VolatileProvenanceRepository.h index ccebf22c9..23bcbb031 100644 --- a/libminifi/include/core/repository/VolatileProvenanceRepository.h +++ b/libminifi/include/core/repository/VolatileProvenanceRepository.h @@ -18,6 +18,7 @@ #pragma once #include <string> +#include <string_view> #include "VolatileRepository.h" #include "core/ThreadedRepository.h" @@ -26,12 +27,12 @@ namespace org::apache::nifi::minifi::core::repository { class VolatileProvenanceRepository : public VolatileRepository { public: - explicit VolatileProvenanceRepository(std::string repo_name = "", + explicit VolatileProvenanceRepository(std::string_view repo_name = "", std::string /*dir*/ = REPOSITORY_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_REPOSITORY_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_REPOSITORY_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = REPOSITORY_PURGE_PERIOD) - : VolatileRepository(repo_name.length() > 0 ? repo_name : core::getClassName<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod) { + : VolatileRepository(repo_name.length() > 0 ? repo_name : core::className<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod) { } ~VolatileProvenanceRepository() override { diff --git a/libminifi/include/core/repository/VolatileRepository.h b/libminifi/include/core/repository/VolatileRepository.h index f22ace0ad..e742b3233 100644 --- a/libminifi/include/core/repository/VolatileRepository.h +++ b/libminifi/include/core/repository/VolatileRepository.h @@ -22,6 +22,7 @@ #include <map> #include <memory> #include <string> +#include <string_view> #include <utility> #include <vector> #include <cinttypes> @@ -38,12 +39,12 @@ namespace org::apache::nifi::minifi::core::repository { class VolatileRepository : public core::ThreadedRepository { public: - explicit VolatileRepository(std::string repo_name = "", + explicit VolatileRepository(std::string_view repo_name = "", std::string /*dir*/ = REPOSITORY_DIRECTORY, std::chrono::milliseconds maxPartitionMillis = MAX_REPOSITORY_ENTRY_LIFE_TIME, int64_t maxPartitionBytes = MAX_REPOSITORY_STORAGE_SIZE, std::chrono::milliseconds purgePeriod = REPOSITORY_PURGE_PERIOD) - : core::ThreadedRepository(repo_name.length() > 0 ? repo_name : core::getClassName<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod), + : core::ThreadedRepository(repo_name.length() > 0 ? repo_name : core::className<VolatileRepository>(), "", maxPartitionMillis, maxPartitionBytes, purgePeriod), repo_data_(10000, static_cast<size_t>(maxPartitionBytes * 0.75)), current_index_(0), logger_(logging::LoggerFactory<VolatileRepository>::getLogger()) { diff --git a/libminifi/include/provenance/Provenance.h b/libminifi/include/provenance/Provenance.h index 275701fcb..2822d57df 100644 --- a/libminifi/include/provenance/Provenance.h +++ b/libminifi/include/provenance/Provenance.h @@ -152,7 +152,7 @@ class ProvenanceEventRecord : public core::SerializableComponent { ProvenanceEventRecord(ProvenanceEventType event, std::string componentId, std::string componentType); ProvenanceEventRecord() - : core::SerializableComponent(core::getClassName<ProvenanceEventRecord>()) { + : core::SerializableComponent(core::className<ProvenanceEventRecord>()) { _eventTime = std::chrono::system_clock::now(); } diff --git a/libminifi/include/utils/ClassUtils.h b/libminifi/include/utils/ClassUtils.h index c24d87757..372665166 100644 --- a/libminifi/include/utils/ClassUtils.h +++ b/libminifi/include/utils/ClassUtils.h @@ -17,6 +17,7 @@ #pragma once #include <string> +#include <string_view> namespace org::apache::nifi::minifi::utils::ClassUtils { @@ -26,6 +27,6 @@ namespace org::apache::nifi::minifi::utils::ClassUtils { * @param out output class name that is shortened. * @return true if out has been updated, false otherwise */ -bool shortenClassName(const std::string &class_name, std::string &out); +bool shortenClassName(std::string_view class_name, std::string &out); } // namespace org::apache::nifi::minifi::utils::ClassUtils diff --git a/libminifi/include/utils/StringUtils.h b/libminifi/include/utils/StringUtils.h index 5078519bf..7319369e5 100644 --- a/libminifi/include/utils/StringUtils.h +++ b/libminifi/include/utils/StringUtils.h @@ -172,10 +172,10 @@ class StringUtils { return std::equal(left.begin(), left.end(), right.begin(), [](unsigned char lc, unsigned char rc) { return std::tolower(lc) == std::tolower(rc); }); } - static std::vector<std::string> split(const std::string &str, const std::string &delimiter); - static std::vector<std::string> splitRemovingEmpty(const std::string& str, const std::string& delimiter); - static std::vector<std::string> splitAndTrim(const std::string &str, const std::string &delimiter); - static std::vector<std::string> splitAndTrimRemovingEmpty(const std::string& str, const std::string& delimiter); + static std::vector<std::string> split(std::string_view str, std::string_view delimiter); + static std::vector<std::string> splitRemovingEmpty(std::string_view str, std::string_view delimiter); + static std::vector<std::string> splitAndTrim(std::string_view str, std::string_view delimiter); + static std::vector<std::string> splitAndTrimRemovingEmpty(std::string_view str, std::string_view delimiter); /** * Converts a string to a float diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp index 082ac92dd..d8f19a6c0 100644 --- a/libminifi/src/FlowController.cpp +++ b/libminifi/src/FlowController.cpp @@ -51,7 +51,7 @@ FlowController::FlowController(std::shared_ptr<core::Repository> provenance_repo std::shared_ptr<Configure> configure, std::shared_ptr<core::FlowConfiguration> flow_configuration, std::shared_ptr<core::ContentRepository> content_repo, std::unique_ptr<state::MetricsPublisherStore> metrics_publisher_store, std::shared_ptr<utils::file::FileSystem> filesystem, std::function<void()> request_restart) - : core::controller::ForwardingControllerServiceProvider(core::getClassName<FlowController>()), + : core::controller::ForwardingControllerServiceProvider(core::className<FlowController>()), running_(false), initialized_(false), thread_pool_(5, false, nullptr, "Flowcontroller threadpool"), diff --git a/libminifi/src/core/Connectable.cpp b/libminifi/src/core/Connectable.cpp index ad02e3c75..b58c53652 100644 --- a/libminifi/src/core/Connectable.cpp +++ b/libminifi/src/core/Connectable.cpp @@ -26,15 +26,15 @@ namespace org::apache::nifi::minifi::core { -Connectable::Connectable(std::string name, const utils::Identifier &uuid) - : CoreComponent(std::move(name), uuid), +Connectable::Connectable(std::string_view name, const utils::Identifier &uuid) + : CoreComponent(name, uuid), max_concurrent_tasks_(1), connectable_version_(nullptr), logger_(logging::LoggerFactory<Connectable>::getLogger(uuid_)) { } -Connectable::Connectable(std::string name) - : CoreComponent(std::move(name)), +Connectable::Connectable(std::string_view name) + : CoreComponent(name), max_concurrent_tasks_(1), connectable_version_(nullptr), logger_(logging::LoggerFactory<Connectable>::getLogger(uuid_)) { diff --git a/libminifi/src/core/Core.cpp b/libminifi/src/core/Core.cpp index b3e2722c0..26752cc78 100644 --- a/libminifi/src/core/Core.cpp +++ b/libminifi/src/core/Core.cpp @@ -22,8 +22,8 @@ namespace org::apache::nifi::minifi::core { -CoreComponent::CoreComponent(std::string name, const utils::Identifier& uuid, const std::shared_ptr<utils::IdGenerator>& idGenerator) - : name_(std::move(name)) { +CoreComponent::CoreComponent(std::string_view name, const utils::Identifier& uuid, const std::shared_ptr<utils::IdGenerator>& idGenerator) + : name_(name) { if (uuid.isNil()) { // Generate the global UUID for the flow record uuid_ = idGenerator->generate(); diff --git a/libminifi/src/core/FlowConfiguration.cpp b/libminifi/src/core/FlowConfiguration.cpp index b53d3fe90..52172e10b 100644 --- a/libminifi/src/core/FlowConfiguration.cpp +++ b/libminifi/src/core/FlowConfiguration.cpp @@ -29,7 +29,7 @@ namespace org::apache::nifi::minifi::core { FlowConfiguration::FlowConfiguration(ConfigurationContext ctx) - : CoreComponent(core::getClassName<FlowConfiguration>()), + : CoreComponent(core::className<FlowConfiguration>()), flow_file_repo_(std::move(ctx.flow_file_repo)), content_repo_(std::move(ctx.content_repo)), stream_factory_(std::move(ctx.stream_factory)), diff --git a/libminifi/src/core/logging/LoggerConfiguration.cpp b/libminifi/src/core/logging/LoggerConfiguration.cpp index 78199b214..e7dcd70b1 100644 --- a/libminifi/src/core/logging/LoggerConfiguration.cpp +++ b/libminifi/src/core/logging/LoggerConfiguration.cpp @@ -94,10 +94,10 @@ LoggerConfiguration::LoggerConfiguration() formatter_(std::make_shared<spdlog::pattern_formatter>(spdlog_default_pattern)) { controller_ = std::make_shared<LoggerControl>(); logger_ = std::make_shared<LoggerImpl>( - core::getClassName<LoggerConfiguration>(), + core::className<LoggerConfiguration>(), std::nullopt, controller_, - get_logger(nullptr, root_namespace_, core::getClassName<LoggerConfiguration>(), formatter_)); + get_logger(nullptr, root_namespace_, core::className<LoggerConfiguration>(), formatter_)); loggers.push_back(logger_); } @@ -148,13 +148,13 @@ void LoggerConfiguration::initialize(const std::shared_ptr<LoggerProperties> &lo logger_->log_debug("Set following pattern on loggers: %s", spdlog_pattern); } -std::shared_ptr<Logger> LoggerConfiguration::getLogger(const std::string& name, const std::optional<utils::Identifier>& id) { +std::shared_ptr<Logger> LoggerConfiguration::getLogger(std::string_view name, const std::optional<utils::Identifier>& id) { std::lock_guard<std::mutex> lock(mutex); return getLogger(name, id, lock); } -std::shared_ptr<Logger> LoggerConfiguration::getLogger(const std::string& name, const std::optional<utils::Identifier>& id, const std::lock_guard<std::mutex>& /*lock*/) { - std::string adjusted_name = name; +std::shared_ptr<Logger> LoggerConfiguration::getLogger(std::string_view name, const std::optional<utils::Identifier>& id, const std::lock_guard<std::mutex>& /*lock*/) { + std::string adjusted_name{name}; const std::string clazz = "class "; auto haz_clazz = name.find(clazz); if (haz_clazz == 0) @@ -252,8 +252,9 @@ std::shared_ptr<internal::LoggerNamespace> LoggerConfiguration::initialize_names return root_namespace; } -std::shared_ptr<spdlog::logger> LoggerConfiguration::get_logger(const std::shared_ptr<Logger>& logger, const std::shared_ptr<internal::LoggerNamespace> &root_namespace, const std::string &name, +std::shared_ptr<spdlog::logger> LoggerConfiguration::get_logger(const std::shared_ptr<Logger>& logger, const std::shared_ptr<internal::LoggerNamespace> &root_namespace, std::string_view name_view, const std::shared_ptr<spdlog::formatter>& formatter, bool remove_if_present) { + std::string name{name_view}; std::shared_ptr<spdlog::logger> spdlogger = spdlog::get(name); if (spdlogger) { if (remove_if_present) { diff --git a/libminifi/src/core/logging/LoggerFactory.cpp b/libminifi/src/core/logging/LoggerFactory.cpp index 99c0aaf26..12ee1e96d 100644 --- a/libminifi/src/core/logging/LoggerFactory.cpp +++ b/libminifi/src/core/logging/LoggerFactory.cpp @@ -21,7 +21,7 @@ namespace org::apache::nifi::minifi::core::logging { -std::shared_ptr<Logger> LoggerFactoryBase::getAliasedLogger(const std::string& name, const std::optional<utils::Identifier>& id) { +std::shared_ptr<Logger> LoggerFactoryBase::getAliasedLogger(std::string_view name, const std::optional<utils::Identifier>& id) { return LoggerConfiguration::getConfiguration().getLogger(name, id); } diff --git a/libminifi/src/core/logging/internal/CompressionManager.cpp b/libminifi/src/core/logging/internal/CompressionManager.cpp index 8733f8dff..3a85100fb 100644 --- a/libminifi/src/core/logging/internal/CompressionManager.cpp +++ b/libminifi/src/core/logging/internal/CompressionManager.cpp @@ -27,13 +27,7 @@ #include "core/TypedValues.h" #include "core/Core.h" -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace core { -namespace logging { -namespace internal { +namespace org::apache::nifi::minifi::core::logging::internal { std::shared_ptr<LogCompressorSink> CompressionManager::initialize( const std::shared_ptr<LoggerProperties>& properties, const std::shared_ptr<Logger>& error_logger, const LoggerFactory& logger_factory) { @@ -61,15 +55,9 @@ std::shared_ptr<LogCompressorSink> CompressionManager::initialize( sink_ = std::make_shared<internal::LogCompressorSink>( LogQueueSize{cached_log_max_size, cache_segment_size}, LogQueueSize{compressed_log_max_size, compressed_segment_size}, - logger_factory(getClassName<LogCompressorSink>())); + logger_factory(std::string(className<LogCompressorSink>()))); } return sink_; } -} // namespace internal -} // namespace logging -} // namespace core -} // namespace minifi -} // namespace nifi -} // namespace apache -} // namespace org +} // namespace org::apache::nifi::minifi::core::logging::internal diff --git a/libminifi/src/provenance/Provenance.cpp b/libminifi/src/provenance/Provenance.cpp index c3b9cfefc..d72818677 100644 --- a/libminifi/src/provenance/Provenance.cpp +++ b/libminifi/src/provenance/Provenance.cpp @@ -41,7 +41,7 @@ const char *ProvenanceEventRecord::ProvenanceEventTypeStr[REPLAY + 1] = { "CREAT "ATTRIBUTES_MODIFIED", "ROUTE", "ADDINFO", "REPLAY" }; ProvenanceEventRecord::ProvenanceEventRecord(ProvenanceEventRecord::ProvenanceEventType event, std::string componentId, std::string componentType) - : core::SerializableComponent(core::getClassName<ProvenanceEventRecord>()), + : core::SerializableComponent(core::className<ProvenanceEventRecord>()), _eventType(event), _componentId(std::move(componentId)), _componentType(std::move(componentType)), diff --git a/libminifi/src/utils/ClassUtils.cpp b/libminifi/src/utils/ClassUtils.cpp index ecd557054..ad58c31d0 100644 --- a/libminifi/src/utils/ClassUtils.cpp +++ b/libminifi/src/utils/ClassUtils.cpp @@ -25,7 +25,7 @@ namespace org::apache::nifi::minifi::utils { -bool ClassUtils::shortenClassName(const std::string &class_name, std::string &out) { +bool ClassUtils::shortenClassName(std::string_view class_name, std::string &out) { std::string class_delim = "::"; auto class_split = utils::StringUtils::split(class_name, class_delim); // support . and :: diff --git a/libminifi/src/utils/StringUtils.cpp b/libminifi/src/utils/StringUtils.cpp index 9daf145de..4c4f736e8 100644 --- a/libminifi/src/utils/StringUtils.cpp +++ b/libminifi/src/utils/StringUtils.cpp @@ -64,7 +64,8 @@ std::string_view StringUtils::trim(const char* str) { } template<typename Fun> -std::vector<std::string> split_transformed(std::string str, const std::string& delimiter, Fun transformation) { +std::vector<std::string> split_transformed(std::string_view str_view, std::string_view delimiter, Fun transformation) { + std::string str{str_view}; std::vector<std::string> result; if (delimiter.empty()) { for (auto c : str) { @@ -87,21 +88,21 @@ std::vector<std::string> split_transformed(std::string str, const std::string& d return result; } -std::vector<std::string> StringUtils::split(const std::string& str, const std::string& delimiter) { +std::vector<std::string> StringUtils::split(std::string_view str, std::string_view delimiter) { return split_transformed(str, delimiter, identity{}); } -std::vector<std::string> StringUtils::splitRemovingEmpty(const std::string& str, const std::string& delimiter) { +std::vector<std::string> StringUtils::splitRemovingEmpty(std::string_view str, std::string_view delimiter) { auto result = split(str, delimiter); result.erase(std::remove_if(result.begin(), result.end(), [](const std::string& str) { return str.empty(); }), result.end()); return result; } -std::vector<std::string> StringUtils::splitAndTrim(const std::string& str, const std::string& delimiter) { +std::vector<std::string> StringUtils::splitAndTrim(std::string_view str, std::string_view delimiter) { return split_transformed(str, delimiter, static_cast<std::string(*)(const std::string&)>(trim)); } -std::vector<std::string> StringUtils::splitAndTrimRemovingEmpty(const std::string& str, const std::string& delimiter) { +std::vector<std::string> StringUtils::splitAndTrimRemovingEmpty(std::string_view str, std::string_view delimiter) { auto result = splitAndTrim(str, delimiter); result.erase(std::remove_if(result.begin(), result.end(), [](const std::string& str) { return str.empty(); }), result.end()); return result; diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp index c264cfa26..1a08f71b4 100644 --- a/libminifi/test/TestBase.cpp +++ b/libminifi/test/TestBase.cpp @@ -58,10 +58,10 @@ std::shared_ptr<LogTestController> LogTestController::getInstance(const std::sha } } -void LogTestController::setLevel(const std::string& name, spdlog::level::level_enum level) { +void LogTestController::setLevel(std::string_view name, spdlog::level::level_enum level) { const auto levelView(spdlog::level::to_string_view(level)); - logger_->log_info("Setting log level for %s to %s", name, std::string(levelView.begin(), levelView.end())); - std::string adjusted_name = name; + logger_->log_info("Setting log level for %s to %s", std::string(name), std::string(levelView.begin(), levelView.end())); + std::string adjusted_name{name}; const std::string clazz = "class "; auto haz_clazz = name.find(clazz); if (haz_clazz == 0) @@ -72,22 +72,22 @@ void LogTestController::setLevel(const std::string& name, spdlog::level::level_e logging::LoggerConfiguration::getSpdlogLogger(adjusted_name)->set_level(level); } -std::shared_ptr<logging::Logger> LogTestController::getLoggerByClassName(const std::string& class_name, const std::optional<utils::Identifier>& id) { +std::shared_ptr<logging::Logger> LogTestController::getLoggerByClassName(std::string_view class_name, const std::optional<utils::Identifier>& id) { return config ? config->getLogger(class_name, id) : logging::LoggerConfiguration::getConfiguration().getLogger(class_name, id); } -void LogTestController::setLevelByClassName(spdlog::level::level_enum level, const std::string& class_name) { +void LogTestController::setLevelByClassName(spdlog::level::level_enum level, std::string_view class_name) { if (config) config->getLogger(class_name); else logging::LoggerConfiguration::getConfiguration().getLogger(class_name); - modified_loggers.push_back(class_name); + modified_loggers.emplace_back(class_name); setLevel(class_name, level); // also support shortened classnames if (config && config->shortenClassNames()) { - std::string adjusted = class_name; + std::string adjusted{class_name}; if (minifi::utils::ClassUtils::shortenClassName(class_name, adjusted)) { - modified_loggers.push_back(class_name); + modified_loggers.emplace_back(class_name); setLevel(class_name, level); } } @@ -179,21 +179,21 @@ LogTestController::LogTestController(const std::shared_ptr<logging::LoggerProper initMain = true; } my_properties_->set("logger.root", "ERROR,ostream"); - my_properties_->set("logger." + minifi::core::getClassName<LogTestController>(), "INFO"); - my_properties_->set("logger." + minifi::core::getClassName<logging::LoggerConfiguration>(), "INFO"); + my_properties_->set("logger." + std::string(minifi::core::className<LogTestController>()), "INFO"); + my_properties_->set("logger." + std::string(minifi::core::className<logging::LoggerConfiguration>()), "INFO"); std::shared_ptr<spdlog::sinks::dist_sink_mt> dist_sink = std::make_shared<spdlog::sinks::dist_sink_mt>(); dist_sink->add_sink(std::make_shared<StringStreamSink>(log_output_ptr_, log_output_mutex_, true)); dist_sink->add_sink(std::make_shared<spdlog::sinks::stderr_sink_mt>()); my_properties_->add_sink("ostream", dist_sink); if (initMain) { logging::LoggerConfiguration::getConfiguration().initialize(my_properties_); - logger_ = logging::LoggerConfiguration::getConfiguration().getLogger(minifi::core::getClassName<LogTestController>()); + logger_ = logging::LoggerConfiguration::getConfiguration().getLogger(minifi::core::className<LogTestController>()); } else { config = logging::LoggerConfiguration::newInstance(); // create for test purposes. most tests use the main logging factory, but this exists to test the logging // framework itself. config->initialize(my_properties_); - logger_ = config->getLogger(minifi::core::getClassName<LogTestController>()); + logger_ = config->getLogger(minifi::core::className<LogTestController>()); } } diff --git a/libminifi/test/TestBase.h b/libminifi/test/TestBase.h index 33acac229..da3a3ec9a 100644 --- a/libminifi/test/TestBase.h +++ b/libminifi/test/TestBase.h @@ -24,6 +24,7 @@ #include <regex> #include <set> #include <string> +#include <string_view> #include <utility> #include <vector> #include <mutex> @@ -119,16 +120,16 @@ class LogTestController { * of changeable test formats */ template<typename T> - std::shared_ptr<logging::Logger> getLogger(const std::optional<utils::Identifier>& id = {}) { return getLoggerByClassName(minifi::core::getClassName<T>(), id); } + std::shared_ptr<logging::Logger> getLogger(const std::optional<utils::Identifier>& id = {}) { return getLoggerByClassName(minifi::core::className<T>(), id); } - std::shared_ptr<logging::Logger> getLoggerByClassName(const std::string& class_name, const std::optional<utils::Identifier>& id = {}); + std::shared_ptr<logging::Logger> getLoggerByClassName(std::string_view class_name, const std::optional<utils::Identifier>& id = {}); template<typename T> void setLevel(spdlog::level::level_enum level) { - setLevelByClassName(level, minifi::core::getClassName<T>()); + setLevelByClassName(level, minifi::core::className<T>()); } - void setLevelByClassName(spdlog::level::level_enum level, const std::string& class_name); + void setLevelByClassName(spdlog::level::level_enum level, std::string_view class_name); bool contains(const std::string &ending, std::chrono::milliseconds timeout = std::chrono::seconds(3), std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200)) const; @@ -163,7 +164,7 @@ class LogTestController { explicit LogTestController(const std::shared_ptr<logging::LoggerProperties> &loggerProps); - void setLevel(const std::string& name, spdlog::level::level_enum level); + void setLevel(std::string_view name, spdlog::level::level_enum level); bool contains(const std::function<std::string()>& log_string_getter, const std::string& ending, std::chrono::milliseconds timeout, std::chrono::milliseconds sleep_interval) const; mutable std::shared_ptr<std::mutex> log_output_mutex_ = std::make_shared<std::mutex>(); diff --git a/libminifi/test/sql-tests/mocks/MockConnectors.cpp b/libminifi/test/sql-tests/mocks/MockConnectors.cpp index 25d5a23f7..5845c80c7 100644 --- a/libminifi/test/sql-tests/mocks/MockConnectors.cpp +++ b/libminifi/test/sql-tests/mocks/MockConnectors.cpp @@ -187,7 +187,7 @@ void MockDB::createTable(const std::string& query) { std::regex expr(R"(create table (\w+)\s*\((.*)\);)", std::regex_constants::icase); std::regex_search(query, match, expr); std::string table_name = match[1]; - auto columns_with_type = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[2], ","); + auto columns_with_type = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[2].str(), ","); std::vector<std::string> col_names; std::vector<DataType> col_types; for (const auto& col_with_type : columns_with_type) { @@ -215,11 +215,11 @@ void MockDB::insertInto(const std::string& query, const std::vector<std::string> if (!tables_.contains(table_name)) { throw sql::StatementError("No such table: '" + table_name + "'"); } - std::vector<std::string> values = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[4], ","); + std::vector<std::string> values = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[4].str(), ","); for (auto& value : values) { value = minifi::utils::StringUtils::removeFramingCharacters(value, '\''); } - auto insert_col_names = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[3], ","); + auto insert_col_names = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[3].str(), ","); if (!insert_col_names.empty()) { auto col_names = tables_.at(table_name).getColumnNames(); std::vector<std::string> row; @@ -251,7 +251,7 @@ std::unique_ptr<Rowset> MockDB::select(const std::string& query, const std::vect std::smatch match; std::regex expr(R"(select\s+(.+)\s+from\s+(\w+)\s*(where ((.+(?= order by))|.+$))*\s*(order by (.+))*)", std::regex_constants::icase); std::regex_search(replaced_query, match, expr); - auto cols = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[1], ","); + auto cols = minifi::utils::StringUtils::splitAndTrimRemovingEmpty(match[1].str(), ","); if (cols[0] == "*") { cols = {}; } diff --git a/libminifi/test/unit/CoreTests.cpp b/libminifi/test/unit/CoreTests.cpp index 43a825179..32764521f 100644 --- a/libminifi/test/unit/CoreTests.cpp +++ b/libminifi/test/unit/CoreTests.cpp @@ -25,13 +25,6 @@ class DummyClass {}; template<typename T> struct DummyStructTemplate {}; template<typename T> class DummyClassTemplate {}; -TEST_CASE("getClassName() works correctly") { - CHECK(core::getClassName<DummyStruct>() == "org::apache::nifi::minifi::test::DummyStruct"); - CHECK(core::getClassName<DummyClass>() == "org::apache::nifi::minifi::test::DummyClass"); - CHECK(core::getClassName<DummyStructTemplate<int>>() == "org::apache::nifi::minifi::test::DummyStructTemplate<int>"); - CHECK(core::getClassName<DummyClassTemplate<int>>() == "org::apache::nifi::minifi::test::DummyClassTemplate<int>"); -} - TEST_CASE("className() works correctly and is constexpr") { static constexpr auto struct_name = core::className<DummyStruct>(); static_assert(struct_name == "org::apache::nifi::minifi::test::DummyStruct"); diff --git a/libminifi/test/unit/StringUtilsTests.cpp b/libminifi/test/unit/StringUtilsTests.cpp index 6e1f3012e..f18719ec0 100644 --- a/libminifi/test/unit/StringUtilsTests.cpp +++ b/libminifi/test/unit/StringUtilsTests.cpp @@ -58,7 +58,7 @@ TEST_CASE("TestStringUtils::split3", "[test split multiple delimiter]") { TEST_CASE("TestStringUtils::split4", "[test split classname]") { std::vector<std::string> expected = { "org", "apache", "nifi", "minifi", "utils", "StringUtils" }; - REQUIRE(expected == StringUtils::split(org::apache::nifi::minifi::core::getClassName<org::apache::nifi::minifi::utils::StringUtils>(), "::")); + REQUIRE(expected == StringUtils::split(org::apache::nifi::minifi::core::className<org::apache::nifi::minifi::utils::StringUtils>(), "::")); } TEST_CASE("TestStringUtils::split5", "[test split with delimiter set to empty string]") {
