You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2026/08/04 09:15:22 UTC
(nifi-minifi-cpp) branch api_bump updated (e8e329894 -> 645dac926)
This is an automated email from the ASF dual-hosted git repository.
martinzink pushed a change to branch api_bump
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
discard e8e329894 MINIFICPP-2862 Add StandardValidator::NUMBER_VALIDATOR (#2213)
add 5ea4c3bca MINIFICPP-2740 Rust bindings based on stable C API (#2186)
add 63d0f5f99 MINIFICPP-2805 Move reinterpret casts into functions in minifi-c.cpp (#2211)
add 7b54eb7db MINIFICPP-2787 Do not encrypt empty properties and parameters (#2217)
new 645dac926 MINIFICPP-2862 Add StandardValidator::NUMBER_VALIDATOR (#2213)
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (e8e329894)
\
N -- N -- N refs/heads/api_bump (645dac926)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../ubuntu_22_04_clang_arm_manifest.json | 669 ++++++++++++++++++++-
.github/workflows/ci.yml | 68 ++-
.github/workflows/create-release-artifacts.yml | 10 +
CMakeLists.txt | 2 +
.../src/minifi_behave/steps/flow_building_steps.py | 7 +
cmake/MiNiFiOptions.cmake | 1 +
.../PropertyEncryptionUtils.cpp | 2 +-
docker/rockylinux/Dockerfile | 3 +-
libminifi/include/utils/CControllerService.h | 9 +-
libminifi/include/utils/CProcessor.h | 11 +-
libminifi/include/utils/minifi-api-utils.h | 98 +++
libminifi/src/core/yaml/YamlFlowSerializer.cpp | 8 +-
libminifi/src/minifi-api.cpp | 99 ++-
libminifi/test/libtest/unit/Catch.h | 17 +-
libminifi/test/unit/ExpectedTest.cpp | 9 +
libminifi/test/unit/JsonFlowSerializerTests.cpp | 40 ++
.../test/unit/PropertyEncryptionUtilsTests.cpp | 12 +-
libminifi/test/unit/YamlFlowSerializerTests.cpp | 39 +-
minifi_rust/.cargo/config.toml | 19 +
minifi_rust/.dockerignore | 12 +
minifi_rust/.gitignore | 7 +
.../CMakeLists.txt | 33 +-
minifi_rust/Cargo.toml | 9 +
minifi_rust/LICENSE | 202 +++++++
minifi_rust/README.md | 143 +++++
.../minifi_rs_playground/.cargo/config.toml | 5 +
.../extensions/minifi_rs_playground/.gitignore | 7 +
.../extensions/minifi_rs_playground/Cargo.toml | 21 +
.../minifi_rs_playground/features/basic.feature | 99 +++
.../features/controller_apis.feature | 28 +
.../minifi_rs_playground/features/environment.py | 91 +++
.../features/error-handling.feature | 85 +++
.../features/lazy-logging.feature | 26 +-
.../minifi_rs_playground/features/metrics.feature | 38 ++
.../minifi_rs_playground/features/steps/steps.py | 62 ++
.../features/streaming.feature | 49 ++
.../minifi_rs_playground/minifi_rs_playground.md | 335 +++++++++++
.../controller_services/animal_controller_apis.rs | 29 +
.../controller_services/dog_controller_service.rs | 96 +++
.../controller_services/duck_controller_service.rs | 59 ++
.../dummy_controller_service.rs | 40 ++
.../lorem_ipsum_controller_service.rs | 60 ++
.../src/controller_services/mod.rs | 22 +
.../extensions/minifi_rs_playground/src/lib.rs | 60 ++
.../src/processors/asciify_german.rs | 88 +++
.../asciify_german/processor_definition.rs | 32 +
.../src/processors/asciify_german/relationships.rs | 28 +
.../src/processors/asciify_german/tests.rs | 91 +++
.../src/processors/count_actual_logging.rs | 76 +++
.../src/processors/duplicate_text.rs | 71 +++
.../src/processors/generate_flow_file.rs | 198 ++++++
.../generate_flow_file/processor_definition.rs | 38 ++
.../processors/generate_flow_file/properties.rs | 78 +++
.../processors/generate_flow_file/relationships.rs | 23 +
.../src/processors/generate_flow_file/tests.rs | 155 +++++
.../src/processors/get_file.rs | 329 ++++++++++
.../src/processors/get_file/output_attributes.rs | 30 +
.../processors/get_file/processor_definition.rs | 47 ++
.../src/processors/get_file/properties.rs | 138 +++++
.../src/processors/get_file/relationships.rs | 23 +
.../src/processors/get_file/tests.rs | 189 ++++++
.../src/processors/kamikaze_processor.rs | 118 ++++
.../kamikaze_processor/processor_definition.rs | 34 ++
.../processors/kamikaze_processor/properties.rs | 56 ++
.../processors/kamikaze_processor/relationships.rs | 23 +
.../src/processors/kamikaze_processor/tests.rs | 96 +++
.../src/processors/log_attribute.rs | 178 ++++++
.../log_attribute/processor_definition.rs | 41 ++
.../src/processors/log_attribute/properties.rs | 103 ++++
.../src/processors/log_attribute/relationships.rs | 23 +
.../src/processors/log_attribute/tests.rs | 160 +++++
.../src/processors/lorem_ipsum_cs_user.rs | 93 +++
.../lorem_ipsum_cs_user/processor_definition.rs | 34 ++
.../processors/lorem_ipsum_cs_user/properties.rs | 45 ++
.../lorem_ipsum_cs_user/relationships.rs | 23 +
.../src/processors/lorem_ipsum_cs_user/tests.rs | 36 ++
.../minifi_rs_playground/src/processors/mod.rs | 27 +
.../src/processors/put_file.rs | 259 ++++++++
.../processors/put_file/processor_definition.rs | 54 ++
.../src/processors/put_file/properties.rs | 68 +++
.../src/processors/put_file/relationships.rs | 28 +
.../src/processors/put_file/tests.rs | 162 +++++
.../processors/put_file/unix_only_properties.rs | 42 ++
.../src/processors/zoo_processor.rs | 108 ++++
.../generate_docs/Dockerfile.generate_docs | 25 +-
minifi_rust/generate_docs/generate_docs.sh | 29 +
minifi_rust/minifi_native/.gitignore | 2 +
minifi_rust/minifi_native/Cargo.toml | 15 +
minifi_rust/minifi_native/src/api.rs | 43 ++
minifi_rust/minifi_native/src/api/attribute.rs | 28 +
.../src/api/component_definition_traits.rs | 41 ++
.../minifi_native/src/api/controller_service.rs | 79 +++
minifi_rust/minifi_native/src/api/errors.rs | 160 +++++
minifi_rust/minifi_native/src/api/flow_file.rs | 24 +
minifi_rust/minifi_native/src/api/logger.rs | 112 ++++
.../minifi_native/src/api/process_context.rs | 151 +++++
.../minifi_native/src/api/process_session.rs | 69 +++
minifi_rust/minifi_native/src/api/processor.rs | 77 +++
.../minifi_native/src/api/processor_wrappers.rs | 22 +
.../api/processor_wrappers/complex_processor.rs | 100 +++
.../src/api/processor_wrappers/flow_file_source.rs | 145 +++++
.../flow_file_stream_transform.rs | 187 ++++++
.../api/processor_wrappers/flow_file_transform.rs | 202 +++++++
.../src/api/processor_wrappers/utils.rs | 19 +
.../utils/context_session_flowfile_bundle.rs | 102 ++++
.../processor_wrappers/utils/flow_file_content.rs | 44 ++
minifi_rust/minifi_native/src/api/property.rs | 117 ++++
.../minifi_native/src/api/provided_interface.rs | 50 ++
.../src/api/raw_controller_service.rs | 28 +
minifi_rust/minifi_native/src/api/raw_processor.rs | 87 +++
minifi_rust/minifi_native/src/api/relationship.rs | 22 +
minifi_rust/minifi_native/src/c_ffi.rs | 43 ++
.../src/c_ffi/c_ffi_controller_service_context.rs | 97 +++
.../c_ffi/c_ffi_controller_service_definition.rs | 210 +++++++
.../src/c_ffi/c_ffi_controller_service_list.rs | 78 +++
.../minifi_native/src/c_ffi/c_ffi_flow_file.rs | 39 ++
.../minifi_native/src/c_ffi/c_ffi_logger.rs | 77 +++
.../src/c_ffi/c_ffi_output_attribute.rs | 58 ++
.../minifi_native/src/c_ffi/c_ffi_primitives.rs | 92 +++
.../src/c_ffi/c_ffi_process_context.rs | 218 +++++++
.../src/c_ffi/c_ffi_process_session.rs | 578 ++++++++++++++++++
.../src/c_ffi/c_ffi_processor_definition.rs | 290 +++++++++
.../src/c_ffi/c_ffi_processor_list.rs | 76 +++
.../minifi_native/src/c_ffi/c_ffi_property.rs | 170 ++++++
.../minifi_native/src/c_ffi/c_ffi_relationship.rs | 32 +
.../minifi_native/src/c_ffi/c_ffi_streams.rs | 143 +++++
minifi_rust/minifi_native/src/lib.rs | 135 +++++
minifi_rust/minifi_native/src/mock.rs | 29 +
.../src/mock/mock_controller_service_context.rs | 43 ++
.../minifi_native/src/mock/mock_flow_file.rs | 75 +++
minifi_rust/minifi_native/src/mock/mock_logger.rs | 98 +++
.../minifi_native/src/mock/mock_process_context.rs | 174 ++++++
.../minifi_native/src/mock/mock_process_session.rs | 188 ++++++
minifi_rust/minifi_native_macros/Cargo.toml | 11 +
minifi_rust/minifi_native_macros/src/lib.rs | 54 ++
minifi_rust/minifi_native_sys/.gitignore | 2 +
minifi_rust/minifi_native_sys/Cargo.toml | 18 +
minifi_rust/minifi_native_sys/build.rs | 240 ++++++++
minifi_rust/minifi_native_sys/src/lib.rs | 26 +
minifi_rust/minifi_rs_behave/Cargo.toml | 12 +
minifi_rust/minifi_rs_behave/Dockerfile.alpine | 25 +
minifi_rust/minifi_rs_behave/Dockerfile.debian | 25 +
minifi_rust/minifi_rs_behave/build.rs | 23 +
minifi_rust/minifi_rs_behave/linux_build.sh | 94 +++
minifi_rust/minifi_rs_behave/src/main.rs | 172 ++++++
.../__init__.py => minifi_rust/rustfmt.toml | 0
146 files changed, 11674 insertions(+), 137 deletions(-)
create mode 100644 libminifi/include/utils/minifi-api-utils.h
create mode 100644 minifi_rust/.cargo/config.toml
create mode 100644 minifi_rust/.dockerignore
create mode 100644 minifi_rust/.gitignore
copy {extensions/stable-api-testing => minifi_rust}/CMakeLists.txt (52%)
create mode 100644 minifi_rust/Cargo.toml
create mode 100644 minifi_rust/LICENSE
create mode 100644 minifi_rust/README.md
create mode 100644 minifi_rust/extensions/minifi_rs_playground/.cargo/config.toml
create mode 100644 minifi_rust/extensions/minifi_rs_playground/.gitignore
create mode 100644 minifi_rust/extensions/minifi_rs_playground/Cargo.toml
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/basic.feature
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/controller_apis.feature
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/environment.py
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/error-handling.feature
copy extensions/azure/tests/features/environment.py => minifi_rust/extensions/minifi_rs_playground/features/lazy-logging.feature (53%)
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/metrics.feature
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/steps/steps.py
create mode 100644 minifi_rust/extensions/minifi_rs_playground/features/streaming.feature
create mode 100644 minifi_rust/extensions/minifi_rs_playground/minifi_rs_playground.md
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/animal_controller_apis.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/dog_controller_service.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/duck_controller_service.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/dummy_controller_service.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/lorem_ipsum_controller_service.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/controller_services/mod.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/lib.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/asciify_german.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/asciify_german/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/asciify_german/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/asciify_german/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/count_actual_logging.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/duplicate_text.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/output_attributes.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/mod.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/processor_definition.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/relationships.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/tests.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/unix_only_properties.rs
create mode 100644 minifi_rust/extensions/minifi_rs_playground/src/processors/zoo_processor.rs
copy docker/installed/Dockerfile.rpm => minifi_rust/generate_docs/Dockerfile.generate_docs (64%)
create mode 100755 minifi_rust/generate_docs/generate_docs.sh
create mode 100644 minifi_rust/minifi_native/.gitignore
create mode 100644 minifi_rust/minifi_native/Cargo.toml
create mode 100644 minifi_rust/minifi_native/src/api.rs
create mode 100644 minifi_rust/minifi_native/src/api/attribute.rs
create mode 100644 minifi_rust/minifi_native/src/api/component_definition_traits.rs
create mode 100644 minifi_rust/minifi_native/src/api/controller_service.rs
create mode 100644 minifi_rust/minifi_native/src/api/errors.rs
create mode 100644 minifi_rust/minifi_native/src/api/flow_file.rs
create mode 100644 minifi_rust/minifi_native/src/api/logger.rs
create mode 100644 minifi_rust/minifi_native/src/api/process_context.rs
create mode 100644 minifi_rust/minifi_native/src/api/process_session.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/complex_processor.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_source.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_stream_transform.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/utils.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/utils/context_session_flowfile_bundle.rs
create mode 100644 minifi_rust/minifi_native/src/api/processor_wrappers/utils/flow_file_content.rs
create mode 100644 minifi_rust/minifi_native/src/api/property.rs
create mode 100644 minifi_rust/minifi_native/src/api/provided_interface.rs
create mode 100644 minifi_rust/minifi_native/src/api/raw_controller_service.rs
create mode 100644 minifi_rust/minifi_native/src/api/raw_processor.rs
create mode 100644 minifi_rust/minifi_native/src/api/relationship.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_controller_service_context.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_controller_service_definition.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_controller_service_list.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_flow_file.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_logger.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_output_attribute.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_primitives.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_process_context.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_process_session.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_processor_definition.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_processor_list.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_property.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_relationship.rs
create mode 100644 minifi_rust/minifi_native/src/c_ffi/c_ffi_streams.rs
create mode 100644 minifi_rust/minifi_native/src/lib.rs
create mode 100644 minifi_rust/minifi_native/src/mock.rs
create mode 100644 minifi_rust/minifi_native/src/mock/mock_controller_service_context.rs
create mode 100644 minifi_rust/minifi_native/src/mock/mock_flow_file.rs
create mode 100644 minifi_rust/minifi_native/src/mock/mock_logger.rs
create mode 100644 minifi_rust/minifi_native/src/mock/mock_process_context.rs
create mode 100644 minifi_rust/minifi_native/src/mock/mock_process_session.rs
create mode 100644 minifi_rust/minifi_native_macros/Cargo.toml
create mode 100644 minifi_rust/minifi_native_macros/src/lib.rs
create mode 100644 minifi_rust/minifi_native_sys/.gitignore
create mode 100644 minifi_rust/minifi_native_sys/Cargo.toml
create mode 100644 minifi_rust/minifi_native_sys/build.rs
create mode 100644 minifi_rust/minifi_native_sys/src/lib.rs
create mode 100644 minifi_rust/minifi_rs_behave/Cargo.toml
create mode 100644 minifi_rust/minifi_rs_behave/Dockerfile.alpine
create mode 100644 minifi_rust/minifi_rs_behave/Dockerfile.debian
create mode 100644 minifi_rust/minifi_rs_behave/build.rs
create mode 100755 minifi_rust/minifi_rs_behave/linux_build.sh
create mode 100644 minifi_rust/minifi_rs_behave/src/main.rs
copy behave_framework/src/minifi_behave/containers/__init__.py => minifi_rust/rustfmt.toml (100%)
(nifi-minifi-cpp) 01/01: MINIFICPP-2862 Add StandardValidator::NUMBER_VALIDATOR (#2213)
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
martinzink pushed a commit to branch api_bump
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 645dac926778564b7ecb44dc69fff93691e92c82
Author: Martin Zink <ma...@apache.org>
AuthorDate: Wed Jul 15 17:06:21 2026 +0200
MINIFICPP-2862 Add StandardValidator::NUMBER_VALIDATOR (#2213)
---
.../ubuntu_22_04_clang_arm_manifest.json | 2 +-
core-framework/common/include/utils/ParsingUtils.h | 21 +++++-
core-framework/common/src/utils/ParsingUtils.cpp | 8 ---
.../include/api/utils/ProcessorConfigUtils.h | 2 +-
.../cpp-extension-lib/src/utils/minifi-c-utils.cpp | 3 +
.../include/utils/ProcessorConfigUtils.h | 14 +++-
.../llamacpp/processors/RunLlamaCppInference.h | 1 +
.../llamacpp/tests/RunLlamaCppInferenceTests.cpp | 4 --
extensions/python/ExecutePythonProcessor.cpp | 5 +-
.../python/pythonprocessors/nifiapi/properties.py | 6 ++
libminifi/src/minifi-api.cpp | 1 +
libminifi/test/unit/PropertyValidationTests.cpp | 12 ++++
.../include/minifi-cpp/core/PropertyValidator.h | 80 ++++++++++++----------
minifi-api/include/minifi-api.h | 1 +
14 files changed, 108 insertions(+), 52 deletions(-)
diff --git a/.github/references/ubuntu_22_04_clang_arm_manifest.json b/.github/references/ubuntu_22_04_clang_arm_manifest.json
index 674359121..f2cb171bc 100644
--- a/.github/references/ubuntu_22_04_clang_arm_manifest.json
+++ b/.github/references/ubuntu_22_04_clang_arm_manifest.json
@@ -10796,7 +10796,7 @@
"Min P": {
"name": "Min P",
"description": "Sets a minimum base probability threshold for token selection. 0.0 = disabled.",
- "validator": "VALID",
+ "validator": "NUMBER_VALIDATOR",
"required": "false",
"sensitive": "false",
"expressionLanguageScope": "NONE"
diff --git a/core-framework/common/include/utils/ParsingUtils.h b/core-framework/common/include/utils/ParsingUtils.h
index 33236eda8..85e18bde7 100644
--- a/core-framework/common/include/utils/ParsingUtils.h
+++ b/core-framework/common/include/utils/ParsingUtils.h
@@ -40,7 +40,8 @@ std::expected<uint64_t, std::error_code> parseDataSize(std::string_view input);
std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(std::string_view input);
-std::expected<float, std::error_code> parseFloat(std::string_view input);
+template<std::floating_point T>
+std::expected<T, std::error_code> parseFloatingPoint(std::string_view input);
template<std::integral T>
std::expected<T, std::error_code> parseIntegralMinMax(const std::string_view input, const T minimum, const T maximum) {
@@ -90,4 +91,22 @@ std::expected<T, std::error_code> parseEnum(const std::string_view input) {
return *result;
}
+template<std::floating_point T>
+std::expected<T, std::error_code> parseFloatingPoint(const std::string_view input) {
+ const auto trimmed_input = utils::string::trim(input);
+ T value{};
+
+ const auto [ptr, ec] = std::from_chars(trimmed_input.data(), trimmed_input.data() + trimmed_input.size(), value);
+
+ if (ec != std::errc()) {
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
+ }
+
+ if (ptr != trimmed_input.data() + trimmed_input.size()) {
+ return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
+ }
+
+ return value;
+}
+
} // namespace org::apache::nifi::minifi::parsing
diff --git a/core-framework/common/src/utils/ParsingUtils.cpp b/core-framework/common/src/utils/ParsingUtils.cpp
index 922704b95..75f095ef2 100644
--- a/core-framework/common/src/utils/ParsingUtils.cpp
+++ b/core-framework/common/src/utils/ParsingUtils.cpp
@@ -126,12 +126,4 @@ std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std::st
return result;
}
-std::expected<float, std::error_code> parseFloat(std::string_view input) {
- try {
- return std::stof(std::string{input});
- } catch(const std::exception&) {
- return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
- }
-}
-
} // namespace org::apache::nifi::minifi::parsing
diff --git a/extension-framework/cpp-extension-lib/include/api/utils/ProcessorConfigUtils.h b/extension-framework/cpp-extension-lib/include/api/utils/ProcessorConfigUtils.h
index 2ec9571ed..ea2c17d9e 100644
--- a/extension-framework/cpp-extension-lib/include/api/utils/ProcessorConfigUtils.h
+++ b/extension-framework/cpp-extension-lib/include/api/utils/ProcessorConfigUtils.h
@@ -134,7 +134,7 @@ inline std::optional<float> parseOptionalFloatProperty(const core::ProcessContex
if (property_str->empty()) {
return std::nullopt;
}
- return parsing::parseFloat(*property_str)
+ return parsing::parseFloatingPoint<float>(*property_str)
| minifi::utils::orThrow(fmt::format("Expected parsable float from \"{}\"", property.name));
}
return std::nullopt;
diff --git a/extension-framework/cpp-extension-lib/src/utils/minifi-c-utils.cpp b/extension-framework/cpp-extension-lib/src/utils/minifi-c-utils.cpp
index e11fd8972..cf70d2c71 100644
--- a/extension-framework/cpp-extension-lib/src/utils/minifi-c-utils.cpp
+++ b/extension-framework/cpp-extension-lib/src/utils/minifi-c-utils.cpp
@@ -55,6 +55,9 @@ minifi_validator toStandardPropertyValidator(const minifi::core::PropertyValidat
if (validator->getEquivalentNifiStandardValidatorName() == minifi::core::StandardPropertyValidators::PORT_VALIDATOR.getEquivalentNifiStandardValidatorName()) {
return MINIFI_VALIDATOR_PORT;
}
+ if (validator->getEquivalentNifiStandardValidatorName() == minifi::core::StandardPropertyValidators::NUMBER_VALIDATOR.getEquivalentNifiStandardValidatorName()) {
+ return MINIFI_VALIDATOR_NUMBER;
+ }
gsl_FailFast();
}
diff --git a/extension-framework/include/utils/ProcessorConfigUtils.h b/extension-framework/include/utils/ProcessorConfigUtils.h
index b69ed40d9..b3b5071e5 100644
--- a/extension-framework/include/utils/ProcessorConfigUtils.h
+++ b/extension-framework/include/utils/ProcessorConfigUtils.h
@@ -55,6 +55,18 @@ inline int64_t parseI64Property(const core::ProcessContext& ctx, const core::Pro
| orThrow(fmt::format("Expected parsable int64_t from \"{}\"", property.name));
}
+inline double parseF64Property(const core::ProcessContext& ctx, const core::PropertyReference& property, const core::FlowFile* flow_file = nullptr) {
+ return ctx.getProperty(property.name, flow_file)
+ | andThen(parsing::parseFloatingPoint<double>)
+ | orThrow(fmt::format("Expected parsable double from \"{}\"", property.name));
+}
+
+inline float parseF32Property(const core::ProcessContext& ctx, const core::PropertyReference& property, const core::FlowFile* flow_file = nullptr) {
+ return ctx.getProperty(property.name, flow_file)
+ | andThen(parsing::parseFloatingPoint<float>)
+ | orThrow(fmt::format("Expected parsable float from \"{}\"", property.name));
+}
+
inline std::chrono::milliseconds parseDurationProperty(const core::ProcessContext& ctx, const core::PropertyReference& property, const core::FlowFile* flow_file = nullptr) {
return ctx.getProperty(property.name, flow_file)
| andThen(parsing::parseDuration<std::chrono::milliseconds>)
@@ -133,7 +145,7 @@ inline std::optional<float> parseOptionalFloatProperty(const core::ProcessContex
if (property_str->empty()) {
return std::nullopt;
}
- return parsing::parseFloat(*property_str)
+ return parsing::parseFloatingPoint<float>(*property_str)
| utils::orThrow(fmt::format("Expected parsable float from \"{}\"", property.name));
}
return std::nullopt;
diff --git a/extensions/llamacpp/processors/RunLlamaCppInference.h b/extensions/llamacpp/processors/RunLlamaCppInference.h
index 16cf7a9c6..67cd14a9e 100644
--- a/extensions/llamacpp/processors/RunLlamaCppInference.h
+++ b/extensions/llamacpp/processors/RunLlamaCppInference.h
@@ -83,6 +83,7 @@ class RunLlamaCppInference : public api::core::ProcessorImpl {
.build();
EXTENSIONAPI static constexpr auto MinP = core::PropertyDefinitionBuilder<>::createProperty("Min P")
.withDescription("Sets a minimum base probability threshold for token selection. 0.0 = disabled.")
+ .withValidator(core::StandardPropertyValidators::NUMBER_VALIDATOR)
.build();
EXTENSIONAPI static constexpr auto MinKeep = core::PropertyDefinitionBuilder<>::createProperty("Min Keep")
.withDescription("If greater than 0, force samplers to return N possible tokens at minimum.")
diff --git a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
index 3582c2190..fb2207521 100644
--- a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
+++ b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
@@ -233,10 +233,6 @@ TEST_CASE("Invalid values for optional double type properties throw exception")
REQUIRE(controller.getProcessor()->setProperty(processors::RunLlamaCppInference::TopP.name, "invalid_value"));
property_name = processors::RunLlamaCppInference::TopP.name;
}
- SECTION("Invalid value for Min P property") {
- REQUIRE(controller.getProcessor()->setProperty(processors::RunLlamaCppInference::MinP.name, "invalid_value"));
- property_name = processors::RunLlamaCppInference::MinP.name;
- }
REQUIRE_THROWS(controller.trigger(minifi::test::InputFlowFileData{.content = "42", .attributes = {}}));
CHECK(minifi::test::utils::verifyLogLinePresenceInPollTime(1s,
diff --git a/extensions/python/ExecutePythonProcessor.cpp b/extensions/python/ExecutePythonProcessor.cpp
index 184acad78..7ef4ae73a 100644
--- a/extensions/python/ExecutePythonProcessor.cpp
+++ b/extensions/python/ExecutePythonProcessor.cpp
@@ -138,7 +138,8 @@ enum class PropertyValidatorCode : int64_t {
DATA_SIZE = 3,
TIME_PERIOD = 4,
NON_BLANK = 5,
- PORT = 6
+ PORT = 6,
+ NUMBER = 7
};
const core::PropertyValidator& translateCodeToPropertyValidator(const PropertyValidatorCode& code) {
@@ -156,6 +157,8 @@ const core::PropertyValidator& translateCodeToPropertyValidator(const PropertyVa
return core::StandardPropertyValidators::NON_BLANK_VALIDATOR;
case PropertyValidatorCode::PORT:
return core::StandardPropertyValidators::PORT_VALIDATOR;
+ case PropertyValidatorCode::NUMBER:
+ return core::StandardPropertyValidators::NUMBER_VALIDATOR;
default:
throw std::invalid_argument("Unknown PropertyValidatorCode");
}
diff --git a/extensions/python/pythonprocessors/nifiapi/properties.py b/extensions/python/pythonprocessors/nifiapi/properties.py
index 3cbd4c58c..fe0dab092 100644
--- a/extensions/python/pythonprocessors/nifiapi/properties.py
+++ b/extensions/python/pythonprocessors/nifiapi/properties.py
@@ -53,6 +53,9 @@ class ValidatorGenerator:
def createLongValidator(self, *args) -> int:
return StandardValidators.LONG_VALIDATOR
+ def createNumberValidator(self, *args) -> int:
+ return StandardValidators.NUMBER_VALIDATOR
+
class StandardValidators:
_standard_validators = ValidatorGenerator()
@@ -87,6 +90,7 @@ class MinifiPropertyTypes:
TIME_PERIOD_TYPE = 4
NON_BLANK_TYPE = 5
PORT_TYPE = 6
+ NUMBER_TYPE = 7
def translateStandardValidatorToMiNiFiPropertype(validators: List[int]) -> int:
@@ -108,6 +112,8 @@ def translateStandardValidatorToMiNiFiPropertype(validators: List[int]) -> int:
return MinifiPropertyTypes.NON_BLANK_TYPE
if validator == StandardValidators.PORT_VALIDATOR:
return MinifiPropertyTypes.PORT_TYPE
+ if validator == StandardValidators.NUMBER_VALIDATOR:
+ return MinifiPropertyTypes.NUMBER_TYPE
return None
diff --git a/libminifi/src/minifi-api.cpp b/libminifi/src/minifi-api.cpp
index d0a20528d..66df6d196 100644
--- a/libminifi/src/minifi-api.cpp
+++ b/libminifi/src/minifi-api.cpp
@@ -82,6 +82,7 @@ gsl::not_null<const minifi::core::PropertyValidator*> toPropertyValidator(minifi
case MINIFI_VALIDATOR_UNSIGNED_INTEGER: return gsl::make_not_null(&minifi::core::StandardPropertyValidators::UNSIGNED_INTEGER_VALIDATOR);
case MINIFI_VALIDATOR_DATA_SIZE: return gsl::make_not_null(&minifi::core::StandardPropertyValidators::DATA_SIZE_VALIDATOR);
case MINIFI_VALIDATOR_PORT: return gsl::make_not_null(&minifi::core::StandardPropertyValidators::PORT_VALIDATOR);
+ case MINIFI_VALIDATOR_NUMBER: return gsl::make_not_null(&minifi::core::StandardPropertyValidators::NUMBER_VALIDATOR);
}
gsl_FailFast();
}
diff --git a/libminifi/test/unit/PropertyValidationTests.cpp b/libminifi/test/unit/PropertyValidationTests.cpp
index 62770fa9b..074955191 100644
--- a/libminifi/test/unit/PropertyValidationTests.cpp
+++ b/libminifi/test/unit/PropertyValidationTests.cpp
@@ -224,4 +224,16 @@ TEST_CASE("TimePeriodValue Property") {
CHECK(component.setProperty(property.getName(), "20").error() == core::PropertyErrorCode::ValidationFailed);
}
+TEST_CASE("Number validator") {
+ static constexpr auto property_definition = PropertyDefinitionBuilder<>::createProperty("prop").withValidator(core::StandardPropertyValidators::NUMBER_VALIDATOR).build();
+ const Property property{property_definition};
+ TestConfigurableComponent component;
+ component.setSupportedProperties(std::array<PropertyReference, 1>{property_definition});
+ CHECK(component.setProperty(property.getName(), "20"));
+ CHECK(component.setProperty(property.getName(), "3.14"));
+ CHECK(component.setProperty(property.getName(), "0.0000000001"));
+ CHECK_FALSE(component.setProperty(property.getName(), "10 000"));
+ CHECK_FALSE(component.setProperty(property.getName(), "20 apples"));
+}
+
} // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/common/include/minifi-cpp/core/PropertyValidator.h b/minifi-api/common/include/minifi-cpp/core/PropertyValidator.h
index 2d91905ff..06f66e9c2 100644
--- a/minifi-api/common/include/minifi-cpp/core/PropertyValidator.h
+++ b/minifi-api/common/include/minifi-cpp/core/PropertyValidator.h
@@ -25,27 +25,31 @@ namespace org::apache::nifi::minifi::core {
class PropertyValidator {
public:
virtual constexpr ~PropertyValidator() {} // NOLINT can't use = default because of gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93413
+ PropertyValidator() = default;
+ PropertyValidator(const PropertyValidator&) = delete;
+ PropertyValidator(PropertyValidator&&) = delete;
+ PropertyValidator& operator=(const PropertyValidator& other) = delete;
+ PropertyValidator& operator=(PropertyValidator&& other) = delete;
[[nodiscard]] virtual std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const = 0;
[[nodiscard]] virtual bool validate(std::string_view input) const = 0;
};
-
class AlwaysValidValidator final : public PropertyValidator {
public:
- AlwaysValidValidator() = default;
- constexpr ~AlwaysValidValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "VALID"; }
- [[nodiscard]] bool validate(std::string_view) const override { return true; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "VALID";
+ }
+ [[nodiscard]] bool validate(std::string_view) const override {
+ return true;
+ }
};
class NonBlankValidator final : public PropertyValidator {
public:
- NonBlankValidator() = default;
- constexpr ~NonBlankValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "NON_BLANK_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "NON_BLANK_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
return !utils::string::trim(input).empty();
}
@@ -53,10 +57,9 @@ class NonBlankValidator final : public PropertyValidator {
class TimePeriodValidator final : public PropertyValidator {
public:
- TimePeriodValidator() = default;
- constexpr ~TimePeriodValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "TIME_PERIOD_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "TIME_PERIOD_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_time = parsing::parseDuration<std::chrono::nanoseconds>(input);
return parsed_time.has_value();
@@ -65,10 +68,9 @@ class TimePeriodValidator final : public PropertyValidator {
class BooleanValidator final : public PropertyValidator {
public:
- BooleanValidator() = default;
- constexpr ~BooleanValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "BOOLEAN_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "BOOLEAN_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_bool = parsing::parseBool(input);
return parsed_bool.has_value();
@@ -77,10 +79,9 @@ class BooleanValidator final : public PropertyValidator {
class IntegerValidator final : public PropertyValidator {
public:
- IntegerValidator() = default;
- constexpr ~IntegerValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "INTEGER_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "INTEGER_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_integer = parsing::parseIntegral<int64_t>(input);
return parsed_integer.has_value();
@@ -89,10 +90,9 @@ class IntegerValidator final : public PropertyValidator {
class UnsignedIntegerValidator final : public PropertyValidator {
public:
- UnsignedIntegerValidator() = default;
- constexpr ~UnsignedIntegerValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "NON_NEGATIVE_INTEGER_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "NON_NEGATIVE_INTEGER_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_integer = parsing::parseIntegral<uint64_t>(input);
return parsed_integer.has_value();
@@ -101,10 +101,9 @@ class UnsignedIntegerValidator final : public PropertyValidator {
class DataSizeValidator final : public PropertyValidator {
public:
- DataSizeValidator() = default;
- constexpr ~DataSizeValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "DATA_SIZE_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "DATA_SIZE_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_data_size = parsing::parseDataSize(input);
return parsed_data_size.has_value();
@@ -113,16 +112,26 @@ class DataSizeValidator final : public PropertyValidator {
class PortValidator final : public core::PropertyValidator {
public:
- PortValidator() = default;
- constexpr ~PortValidator() override {} // NOLINT see comment at parent
-
- [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "PORT_VALIDATOR"; }
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "PORT_VALIDATOR";
+ }
[[nodiscard]] bool validate(const std::string_view input) const override {
const auto parsed_integer = parsing::parseIntegralMinMax<uint64_t>(input, 0, 65535);
return parsed_integer.has_value();
}
};
+class NumberValidator final : public core::PropertyValidator {
+ public:
+ [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override {
+ return "NUMBER_VALIDATOR";
+ }
+ [[nodiscard]] bool validate(const std::string_view input) const override {
+ const auto parsed_number = parsing::parseFloatingPoint<double>(input);
+ return parsed_number.has_value();
+ }
+};
+
namespace StandardPropertyValidators {
inline constexpr auto ALWAYS_VALID_VALIDATOR = AlwaysValidValidator{};
inline constexpr auto NON_BLANK_VALIDATOR = NonBlankValidator{};
@@ -132,6 +141,7 @@ inline constexpr auto INTEGER_VALIDATOR = IntegerValidator{};
inline constexpr auto UNSIGNED_INTEGER_VALIDATOR = UnsignedIntegerValidator{};
inline constexpr auto DATA_SIZE_VALIDATOR = DataSizeValidator{};
inline constexpr auto PORT_VALIDATOR = PortValidator{};
-}
+inline constexpr auto NUMBER_VALIDATOR = NumberValidator{};
+} // namespace StandardPropertyValidators
} // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/include/minifi-api.h b/minifi-api/include/minifi-api.h
index 2ee6f87ab..6f4cf5bcd 100644
--- a/minifi-api/include/minifi-api.h
+++ b/minifi-api/include/minifi-api.h
@@ -119,6 +119,7 @@ enum minifi_validator : uint32_t {
MINIFI_VALIDATOR_UNSIGNED_INTEGER = 5,
MINIFI_VALIDATOR_DATA_SIZE = 6,
MINIFI_VALIDATOR_PORT = 7,
+ MINIFI_VALIDATOR_NUMBER = 8,
};
struct minifi_property_definition {