Skip to content

Commit 2878fa2

Browse files
committed
MINIFICPP-2769 Move Kafka Extension to stable C API
1 parent 6177d0c commit 2878fa2

28 files changed

Lines changed: 405 additions & 418 deletions

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ set(EXTENSIONS_ENABLED_BY_DEFAULT (
748748
minifi-grafana-loki
749749
minifi-archive-extensions
750750
minifi-mqtt-extensions
751-
minifi-rdkafka-extensions
751+
minifi-kafka
752752
minifi-pdh
753753
minifi-prometheus
754754
minifi-rocksdb-repos

core-framework/common/include/core/PropertyDefinitionBuilder.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,21 @@ namespace org::apache::nifi::minifi::core {
2727
namespace detail {
2828
template<typename... Types>
2929
inline constexpr auto TypeNames = std::array<std::string_view, sizeof...(Types)>{core::className<Types>()...};
30-
}
30+
31+
template <size_t N>
32+
struct StringLiteral {
33+
char value[N];
34+
constexpr StringLiteral(const char (&str)[N]) { // NOLINT(runtime/explicit)
35+
for (size_t i = 0; i < N; ++i) {
36+
value[i] = str[i];
37+
}
38+
}
39+
};
40+
41+
// A variable template that creates permanent static memory for the span to point to
42+
template <StringLiteral str>
43+
inline constexpr auto StaticAllowedType = std::array<std::string_view, 1>{std::string_view{str.value, sizeof(str.value) - 1}};
44+
} // namespace detail
3145

3246
template<size_t NumAllowedValues = 0>
3347
struct PropertyDefinitionBuilder {
@@ -81,6 +95,12 @@ struct PropertyDefinitionBuilder {
8195
return *this;
8296
}
8397

98+
template <detail::StringLiteral TypeName>
99+
constexpr PropertyDefinitionBuilder<NumAllowedValues> withAllowedType() {
100+
property.allowed_types = detail::StaticAllowedType<TypeName>;
101+
return *this;
102+
}
103+
84104
constexpr PropertyDefinitionBuilder<NumAllowedValues> withValidator(const PropertyValidator& property_validator) {
85105
property.validator = gsl::make_not_null(&property_validator);
86106
return *this;

extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ProcessContext {
4444
[[nodiscard]] virtual bool hasNonEmptyProperty(std::string_view name) const = 0;
4545
[[nodiscard]] virtual std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file) const = 0;
4646

47-
[[nodiscard]] virtual std::expected<utils::net::SslData, std::error_code> getSslData(std::string_view name) const = 0;
47+
[[nodiscard]] virtual std::expected<utils::net::SslData, std::error_code> getSslData(const minifi::core::PropertyReference& prop) const = 0;
4848
};
4949

5050
class CffiProcessContext : public ProcessContext {
@@ -58,7 +58,7 @@ class CffiProcessContext : public ProcessContext {
5858
[[nodiscard]] std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file) const override;
5959
[[nodiscard]] bool hasNonEmptyProperty(std::string_view name) const override;
6060

61-
[[nodiscard]] std::expected<utils::net::SslData, std::error_code> getSslData(std::string_view name) const override;
61+
[[nodiscard]] std::expected<utils::net::SslData, std::error_code> getSslData(const minifi::core::PropertyReference& prop) const override;
6262

6363
private:
6464
[[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file) const;

extension-framework/cpp-extension-lib/mocklib/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919

2020
file(GLOB SRC_FILES CONFIGURE_DEPENDS "src/*.cpp")
2121

22-
add_library(libmock-minifi STATIC ${SRC_FILES})
23-
target_link_libraries(libmock-minifi PUBLIC minifi-cpp-extension-lib minifi-core-framework-common minifi-c-api)
24-
target_include_directories(libmock-minifi PUBLIC include)
22+
add_library(mock-minifi STATIC ${SRC_FILES})
23+
target_link_libraries(mock-minifi PUBLIC minifi-cpp-extension-lib minifi-core-framework-common minifi-c-api)
24+
target_include_directories(mock-minifi PUBLIC include)

extension-framework/cpp-extension-lib/mocklib/include/MockProcessContext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class MockProcessContext : public api::core::ProcessContext {
3434
[[nodiscard]] std::map<std::string, std::string> getDynamicProperties(const api::core::FlowFile* flow_file) const override;
3535
[[nodiscard]] bool hasNonEmptyProperty(std::string_view name) const override;
3636

37-
[[nodiscard]] std::expected<api::utils::net::SslData, std::error_code> getSslData(std::string_view name) const override;
37+
[[nodiscard]] std::expected<api::utils::net::SslData, std::error_code> getSslData(const minifi::core::PropertyReference& prop) const override;
3838

3939
std::map<std::string, std::string, std::less<>> properties_;
4040

extension-framework/cpp-extension-lib/mocklib/src/MockProcessContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ bool MockProcessContext::hasNonEmptyProperty(const std::string_view name) const
4444
return properties_.contains(name);
4545
}
4646

47-
std::expected<api::utils::net::SslData, std::error_code> MockProcessContext::getSslData(std::string_view) const {
47+
std::expected<api::utils::net::SslData, std::error_code> MockProcessContext::getSslData(const minifi::core::PropertyReference&) const {
4848
return api::utils::net::SslData{};
4949
}
5050
} // namespace org::apache::nifi::minifi::mock

extension-framework/cpp-extension-lib/mocklib/src/mock-minifi-c.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include "minifi-c.h"
2121

22+
extern "C" {
2223
MinifiExtension* MINIFI_REGISTER_EXTENSION_FN(MinifiExtensionContext*, const MinifiExtensionDefinition*) {
2324
throw std::runtime_error("Not implemented");
2425
}
@@ -51,7 +52,7 @@ void MinifiProcessContextGetDynamicProperties(MinifiProcessContext*, MinifiFlowF
5152
throw std::runtime_error("Not implemented");
5253
}
5354

54-
MinifiStatus MinifiProcessContextGetSslData(MinifiProcessContext*, MinifiStringView,
55+
MinifiStatus MinifiProcessContextGetSslDataFromProperty(MinifiProcessContext*, MinifiStringView,
5556
void (*)(void* user_ctx, const MinifiSslData* ssl_data), void*) {
5657
throw std::runtime_error("Not implemented");
5758
}
@@ -133,3 +134,4 @@ MinifiStatus MinifiControllerServiceContextGetProperty(MinifiControllerServiceCo
133134
void (*)(void* user_ctx, MinifiStringView property_value), void*) {
134135
throw std::runtime_error("Not implemented");
135136
}
137+
} // extern "C"

extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ std::map<std::string, std::string> CffiProcessContext::getDynamicProperties(cons
6969
return result;
7070
}
7171

72-
std::expected<utils::net::SslData, std::error_code> CffiProcessContext::getSslData(const std::string_view name) const {
72+
std::expected<utils::net::SslData, std::error_code> CffiProcessContext::getSslData(const minifi::core::PropertyReference& prop) const {
7373
auto ssl_data = utils::net::SslData{};
7474

75-
if (const auto status = MinifiProcessContextGetSslData(impl_, utils::minifiStringView(name), [](void* data, const MinifiSslData* minifi_ssl_data) {
75+
if (const auto status = MinifiProcessContextGetSslDataFromProperty(impl_, utils::minifiStringView(prop.name), [](void* data, const MinifiSslData* minifi_ssl_data) {
7676
auto* my_ssl_data = static_cast<utils::net::SslData*>(data);
7777
my_ssl_data->ca_loc = utils::toString(minifi_ssl_data->ca_certificate_file);
7878
my_ssl_data->cert_loc = utils::toString(minifi_ssl_data->certificate_file);

extensions/kafka/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
2727

2828
file(GLOB SOURCES "*.cpp")
2929

30-
add_minifi_library(minifi-rdkafka-extensions SHARED ${SOURCES})
30+
add_minifi_library(minifi-kafka SHARED ${SOURCES})
3131

32-
target_link_libraries(minifi-rdkafka-extensions ${LIBMINIFI} Threads::Threads)
32+
target_link_libraries(minifi-kafka minifi-cpp-extension-lib Threads::Threads)
3333

3434
get_target_property(RDKAFKA_INCLUDE_DIRS rdkafka INCLUDE_DIRECTORIES)
35-
target_include_directories(minifi-rdkafka-extensions SYSTEM PUBLIC ${RDKAFKA_INCLUDE_DIRS})
36-
target_link_libraries(minifi-rdkafka-extensions rdkafka)
35+
target_include_directories(minifi-kafka SYSTEM PUBLIC ${RDKAFKA_INCLUDE_DIRS})
36+
target_link_libraries(minifi-kafka rdkafka)
3737

38-
register_extension(minifi-rdkafka-extensions "RDKAFKA EXTENSIONS" RDKAFKA-EXTENSIONS "This Enables librdkafka functionality including PublishKafka" "extensions/kafka/tests")
38+
register_c_api_extension(minifi-kafka "RDKAFKA EXTENSIONS" RDKAFKA-EXTENSIONS "This Enables librdkafka functionality including PublishKafka" "extensions/kafka/tests")
3939

0 commit comments

Comments
 (0)