This is an automated email from the ASF dual-hosted git repository. martinzink pushed a commit to branch controller_c_api_requirements in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit b240279dc43ee0bca72b419b330270c0b31c2c0a Author: Adam Debreceni <[email protected]> AuthorDate: Thu Feb 12 14:45:15 2026 +0100 MINIFICPP-2715 - Move version information to MinifiCreateExtension --- extensions/ExtensionInitializer.cpp | 2 +- .../llamacpp/processors/ExtensionInitializer.cpp | 2 +- extensions/opencv/OpenCVLoader.cpp | 2 +- .../python/pythonlibloader/PythonLibLoader.cpp | 2 +- extensions/python/pythonloader/PyProcLoader.cpp | 2 +- extensions/sftp/SFTPLoader.cpp | 2 +- libminifi/src/ApiVersions.cpp | 34 ------------- libminifi/src/minifi-c.cpp | 55 +++++++++++++--------- minifi-api/CMakeLists.txt | 2 +- minifi-api/include/minifi-c/minifi-c.h | 20 ++++---- minifi-api/minifi-c-api.def | 3 +- 11 files changed, 52 insertions(+), 74 deletions(-) diff --git a/extensions/ExtensionInitializer.cpp b/extensions/ExtensionInitializer.cpp index 4044e15c2..3caaaeed0 100644 --- a/extensions/ExtensionInitializer.cpp +++ b/extensions/ExtensionInitializer.cpp @@ -31,5 +31,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); } diff --git a/extensions/llamacpp/processors/ExtensionInitializer.cpp b/extensions/llamacpp/processors/ExtensionInitializer.cpp index 18f5ff58e..b90b8b133 100644 --- a/extensions/llamacpp/processors/ExtensionInitializer.cpp +++ b/extensions/llamacpp/processors/ExtensionInitializer.cpp @@ -35,7 +35,7 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 1, .processors_ptr = &description, }; - extension = MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + extension = MinifiCreateExtension(minifi::api::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); }); return extension; } diff --git a/extensions/opencv/OpenCVLoader.cpp b/extensions/opencv/OpenCVLoader.cpp index 83e75bdbd..3f91395c4 100644 --- a/extensions/opencv/OpenCVLoader.cpp +++ b/extensions/opencv/OpenCVLoader.cpp @@ -42,5 +42,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); } diff --git a/extensions/python/pythonlibloader/PythonLibLoader.cpp b/extensions/python/pythonlibloader/PythonLibLoader.cpp index 522c43633..cdf0356b7 100644 --- a/extensions/python/pythonlibloader/PythonLibLoader.cpp +++ b/extensions/python/pythonlibloader/PythonLibLoader.cpp @@ -114,5 +114,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* config) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); } diff --git a/extensions/python/pythonloader/PyProcLoader.cpp b/extensions/python/pythonloader/PyProcLoader.cpp index f283847ff..55ad4ebef 100644 --- a/extensions/python/pythonloader/PyProcLoader.cpp +++ b/extensions/python/pythonloader/PyProcLoader.cpp @@ -49,5 +49,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* config) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); } diff --git a/extensions/sftp/SFTPLoader.cpp b/extensions/sftp/SFTPLoader.cpp index 3cf12aedd..bb23e9998 100644 --- a/extensions/sftp/SFTPLoader.cpp +++ b/extensions/sftp/SFTPLoader.cpp @@ -44,5 +44,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); + return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); } diff --git a/libminifi/src/ApiVersions.cpp b/libminifi/src/ApiVersions.cpp deleted file mode 100644 index 76364c0f0..000000000 --- a/libminifi/src/ApiVersions.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/** -* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "minifi-c/minifi-c.h" -#include "minifi-cpp/utils/Export.h" - -extern "C" { - -const MinifiApiVersion* MINIFI_API_VERSION_FN() { - return reinterpret_cast<const MinifiApiVersion*>(MINIFI_PRIVATE_STRINGIFY(MINIFI_API_VERSION_FN)); -} - -#define REGISTER_C_API_VERSION(major, minor) \ - const MinifiApiVersion* MINIFI_PRIVATE_JOIN(MinifiCApiVersion, MINIFI_PRIVATE_JOIN(major, minor))() { \ - return reinterpret_cast<const MinifiApiVersion*>(MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_PATCH_VERSION)); \ - } - -REGISTER_C_API_VERSION(0, 1) - -} // extern "C" diff --git a/libminifi/src/minifi-c.cpp b/libminifi/src/minifi-c.cpp index 2abff81d0..0e4144c33 100644 --- a/libminifi/src/minifi-c.cpp +++ b/libminifi/src/minifi-c.cpp @@ -146,6 +146,30 @@ class CProcessorFactory : public minifi::core::ProcessorFactory { minifi::utils::CProcessorClassDescription class_description_; }; +MinifiExtension* MinifiCreateExtensionImpl(MinifiStringView /*api_version*/, const MinifiExtensionCreateInfo* extension_create_info) { + gsl_Assert(extension_create_info); + auto extension_name = toString(extension_create_info->name); + minifi::BundleIdentifier bundle{ + .name = extension_name, + .version = toString(extension_create_info->version) + }; + auto& bundle_components = minifi::ClassDescriptionRegistry::getMutableClassDescriptions()[bundle]; + for (size_t proc_idx = 0; proc_idx < extension_create_info->processors_count; ++proc_idx) { + minifi::utils::useCProcessorClassDescription(extension_create_info->processors_ptr[proc_idx], [&] (const auto& description, const auto& c_class_description) { + minifi::core::ClassLoader::getDefaultClassLoader().getClassLoader(extension_name).registerClass( + c_class_description.name, + std::make_unique<CProcessorFactory>(extension_name, toString(extension_create_info->processors_ptr[proc_idx].full_name), c_class_description)); + bundle_components.processors.emplace_back(description); + }); + } + return reinterpret_cast<MinifiExtension*>(new org::apache::nifi::minifi::core::extension::Extension::Info{ + .name = toString(extension_create_info->name), + .version = toString(extension_create_info->version), + .deinit = extension_create_info->deinit, + .user_data = extension_create_info->user_data + }); +} + } // namespace namespace org::apache::nifi::minifi::utils { @@ -225,30 +249,17 @@ void useCProcessorClassDescription(const MinifiProcessorClassDefinition& class_d extern "C" { -MinifiExtension* MinifiCreateExtension(const MinifiApiVersion* /*api_version*/, const MinifiExtensionCreateInfo* extension_create_info) { - gsl_Assert(extension_create_info); - auto extension_name = toString(extension_create_info->name); - minifi::BundleIdentifier bundle{ - .name = extension_name, - .version = toString(extension_create_info->version) - }; - auto& bundle_components = minifi::ClassDescriptionRegistry::getMutableClassDescriptions()[bundle]; - for (size_t proc_idx = 0; proc_idx < extension_create_info->processors_count; ++proc_idx) { - minifi::utils::useCProcessorClassDescription(extension_create_info->processors_ptr[proc_idx], [&] (const auto& description, const auto& c_class_description) { - minifi::core::ClassLoader::getDefaultClassLoader().getClassLoader(extension_name).registerClass( - c_class_description.name, - std::make_unique<CProcessorFactory>(extension_name, toString(extension_create_info->processors_ptr[proc_idx].full_name), c_class_description)); - bundle_components.processors.emplace_back(description); - }); - } - return reinterpret_cast<MinifiExtension*>(new org::apache::nifi::minifi::core::extension::Extension::Info{ - .name = toString(extension_create_info->name), - .version = toString(extension_create_info->version), - .deinit = extension_create_info->deinit, - .user_data = extension_create_info->user_data - }); +MinifiExtension* MINIFI_CREATE_EXTENSION_FN(MinifiStringView api_version, const MinifiExtensionCreateInfo* extension_create_info) { + return MinifiCreateExtensionImpl(api_version, extension_create_info); } +#define REGISTER_C_API_VERSION(major, minor) \ + MinifiExtension* MINIFI_PRIVATE_JOIN(MinifiCreateExtension, MINIFI_PRIVATE_JOIN(major, minor))(MinifiStringView api_version, const MinifiExtensionCreateInfo* extension_create_info) { \ + return MinifiCreateExtensionImpl(api_version, extension_create_info); \ + } + +REGISTER_C_API_VERSION(0, 1) + MinifiStatus MinifiProcessContextGetProperty(MinifiProcessContext* context, MinifiStringView property_name, MinifiFlowFile* flowfile, void (*result_cb)(void* user_ctx, MinifiStringView result), void* user_ctx) { gsl_Assert(context != MINIFI_NULL); diff --git a/minifi-api/CMakeLists.txt b/minifi-api/CMakeLists.txt index dfef95bc7..05f78fc99 100644 --- a/minifi-api/CMakeLists.txt +++ b/minifi-api/CMakeLists.txt @@ -6,7 +6,7 @@ target_compile_definitions(minifi-api-common INTERFACE MINIFI_VERSION_STR="${MIN add_library(minifi-api INTERFACE) target_include_directories(minifi-api INTERFACE include) target_link_libraries(minifi-api INTERFACE minifi-api-common) -target_compile_definitions(minifi-api INTERFACE MINIFI_API_VERSION_FN=MinifiCppApiVersion_${BUILD_IDENTIFIER}) +target_compile_definitions(minifi-api INTERFACE MINIFI_CREATE_EXTENSION_FN=MinifiCreateExtension_${BUILD_IDENTIFIER}) add_library(minifi-c-api INTERFACE) target_include_directories(minifi-c-api INTERFACE include/minifi-c) diff --git a/minifi-api/include/minifi-c/minifi-c.h b/minifi-api/include/minifi-c/minifi-c.h index d1f45ea28..d246b773b 100644 --- a/minifi-api/include/minifi-c/minifi-c.h +++ b/minifi-api/include/minifi-c/minifi-c.h @@ -34,14 +34,14 @@ extern "C" { #define MINIFI_PRIVATE_JOIN_HELPER(X, Y) X ## _ ## Y #define MINIFI_PRIVATE_JOIN(X, Y) MINIFI_PRIVATE_JOIN_HELPER(X, Y) -#define MINIFI_C_API_MAJOR_VERSION 0 -#define MINIFI_C_API_MINOR_VERSION 1 -#define MINIFI_C_API_PATCH_VERSION 0 +#define MINIFI_API_MAJOR_VERSION 0 +#define MINIFI_API_MINOR_VERSION 1 +#define MINIFI_API_PATCH_VERSION 0 +#define MINIFI_API_VERSION MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_PATCH_VERSION) -#ifndef MINIFI_API_VERSION_FN -#define MINIFI_API_VERSION_FN MINIFI_PRIVATE_JOIN(MinifiCApiVersion, MINIFI_PRIVATE_JOIN(MINIFI_C_API_MAJOR_VERSION, MINIFI_C_API_MINOR_VERSION)) +#ifndef MINIFI_CREATE_EXTENSION_FN +#define MINIFI_CREATE_EXTENSION_FN MINIFI_PRIVATE_JOIN(MinifiCreateExtension, MINIFI_PRIVATE_JOIN(MINIFI_API_MAJOR_VERSION, MINIFI_API_MINOR_VERSION)) #endif -#define MINIFI_API_VERSION MINIFI_API_VERSION_FN() #define MINIFI_NULL nullptr #define MINIFI_OWNED @@ -189,12 +189,10 @@ typedef struct MinifiExtensionCreateInfo { const MinifiProcessorClassDefinition* processors_ptr; } MinifiExtensionCreateInfo; -const MinifiApiVersion* MINIFI_API_VERSION_FN(); - // api_version is used to provide backwards compatible changes to the MinifiExtensionCreateInfo structure, // e.g. if MinifiExtensionCreateInfo gets a new field in version 1.2.0, extensions built with api 1.1.0 do not // have to be rebuilt -MinifiExtension* MinifiCreateExtension(const MinifiApiVersion* api_version, const MinifiExtensionCreateInfo*); +MinifiExtension* MINIFI_CREATE_EXTENSION_FN(MinifiStringView api_version, const MinifiExtensionCreateInfo* create_info); MINIFI_OWNED MinifiPublishedMetrics* MinifiPublishedMetricsCreate(size_t count, const MinifiStringView* metric_names, const double* metric_values); @@ -234,4 +232,8 @@ void MinifiFlowFileGetAttributes(MinifiProcessSession* session, MinifiFlowFile* } // extern "C" #endif // __cplusplus +static inline MinifiExtension* MinifiCreateExtension(MinifiStringView api_version, const MinifiExtensionCreateInfo* create_info) { + return MINIFI_CREATE_EXTENSION_FN(api_version, create_info); +} + #endif // MINIFI_API_INCLUDE_MINIFI_C_MINIFI_C_H_ diff --git a/minifi-api/minifi-c-api.def b/minifi-api/minifi-c-api.def index 1e9f66ecd..a664bdd2d 100644 --- a/minifi-api/minifi-c-api.def +++ b/minifi-api/minifi-c-api.def @@ -1,6 +1,6 @@ LIBRARY core-minifi.dll EXPORTS - MinifiCreateExtension + MinifiCreateExtension_0_1 MinifiPublishedMetricsCreate MinifiProcessContextGetProperty MinifiProcessContextHasNonEmptyProperty @@ -22,4 +22,3 @@ EXPORTS MinifiFlowFileSetAttribute MinifiFlowFileGetAttribute MinifiFlowFileGetAttributes - MinifiCApiVersion_0_1
