From 1c9e80dca2d0d73b8ad628932da0fb85dd7ee7e8 Mon Sep 17 00:00:00 2001 From: Marc Parisi Date: Wed, 17 Oct 2018 19:50:01 -0400 Subject: [PATCH 1/2] MINIFICPP-647: Begin process of deprecating functions and remove those which were added recently that aren't needed --- libminifi/include/capi/api.h | 10 ++++----- libminifi/src/capi/api.cpp | 37 ++++++++++++------------------- libminifi/test/capi/CAPITests.cpp | 32 +++++++++++++------------- python/minifi/__init__.py | 12 +++------- 4 files changed, 38 insertions(+), 53 deletions(-) diff --git a/libminifi/include/capi/api.h b/libminifi/include/capi/api.h index dff29ed4df..94b05fa044 100644 --- a/libminifi/include/capi/api.h +++ b/libminifi/include/capi/api.h @@ -30,7 +30,10 @@ int initialize_api(); extern "C" { #endif -#define API_VERSION "0.01" +/** + * Updates with every release + */ +#define API_VERSION "0.02" void enable_logging(); @@ -39,11 +42,6 @@ void enable_logging(); * BASE NIFI OPERATIONS * ################################################################## */ -nifi_port *create_port(const char *port); - -int free_port(nifi_port *port); - - nifi_instance *create_instance(const char *url, nifi_port *port); diff --git a/libminifi/src/capi/api.cpp b/libminifi/src/capi/api.cpp index 592fb6bf73..6484f9658b 100644 --- a/libminifi/src/capi/api.cpp +++ b/libminifi/src/capi/api.cpp @@ -57,38 +57,28 @@ class DirectoryConfiguration { } }; -nifi_port *create_port(const char *port) { - if (nullptr == port) - return nullptr; - nifi_port *p = new nifi_port(); - p->port_id = new char[strlen(port) + 1]; - memset(p->port_id, 0x00, strlen(port) + 1); - strncpy(p->port_id, port, strlen(port)); - return p; -} - -int free_port(nifi_port *port) { - if (port == nullptr) - return -1; - delete[] port->port_id; - delete port; - return 0; -} - /** * Creates a NiFi Instance from the url and output port. * @param url http URL for NiFi instance * @param port Remote output port. + * @Deprecated for 0.6.0 in favor of + * nifi_instance *create_instance(nifi_port const *port) { */ nifi_instance *create_instance(const char *url, nifi_port *port) { // make sure that we have a thread safe way of initializing the content directory DirectoryConfiguration::initialize(); - nifi_instance *instance = new nifi_instance; - + // need reinterpret cast until we move to C for this module. + nifi_instance *instance = reinterpret_cast( malloc(sizeof(nifi_instance)) ); + /** + * This API will gradually move away from C++, hence malloc is used for nifi_instance + * Since minifi::Instance is currently being used, then we need to use new in that case. + */ instance->instance_ptr = new minifi::Instance(url, port->port_id); - instance->port.port_id = port->port_id; - + // may have to translate port ID here in the future + // need reinterpret cast until we move to C for this module. + instance->port.port_id = reinterpret_cast(malloc(strlen(port->port_id) + 1)); + snprintf(instance->port.port_id, strlen(port->port_id) + 1, "%s", port->port_id); return instance; } @@ -135,7 +125,8 @@ int set_instance_property(nifi_instance *instance, const char *key, const char * void free_instance(nifi_instance* instance) { if (instance != nullptr) { delete ((minifi::Instance*) instance->instance_ptr); - delete instance; + free(instance->port.port_id); + free(instance); } } diff --git a/libminifi/test/capi/CAPITests.cpp b/libminifi/test/capi/CAPITests.cpp index d07b75b0ac..1739e1b780 100644 --- a/libminifi/test/capi/CAPITests.cpp +++ b/libminifi/test/capi/CAPITests.cpp @@ -24,7 +24,6 @@ #include #include - #include "utils/file/FileUtils.h" #include "../TestBase.h" @@ -33,8 +32,14 @@ #include #include +static nifi_instance *create_instance_obj(const char *name = "random_instance") { + nifi_port port; + port.port_id = "12345"; + return create_instance("random_instance", &port); +} + TEST_CASE("Test Creation of instance, one processor", "[createInstanceAndFlow]") { - nifi_instance *instance = create_instance("random_instance", create_port("12345")); + auto instance = create_instance_obj(); REQUIRE(instance != nullptr); flow *test_flow = create_flow(instance, nullptr); REQUIRE(test_flow != nullptr); @@ -45,7 +50,7 @@ TEST_CASE("Test Creation of instance, one processor", "[createInstanceAndFlow]") } TEST_CASE("Invalid processor returns null", "[addInvalidProcessor]") { - nifi_instance *instance = create_instance("random_instance", create_port("12345")); + auto instance = create_instance_obj(); REQUIRE(instance != nullptr); flow *test_flow = create_flow(instance, nullptr); processor *test_proc = add_processor(test_flow, "NeverExisted"); @@ -57,7 +62,7 @@ TEST_CASE("Invalid processor returns null", "[addInvalidProcessor]") { } TEST_CASE("Set valid and invalid properties", "[setProcesssorProperties]") { - nifi_instance *instance = create_instance("random_instance", create_port("12345")); + auto instance = create_instance_obj(); REQUIRE(instance != nullptr); flow *test_flow = create_flow(instance, nullptr); REQUIRE(test_flow != nullptr); @@ -82,8 +87,7 @@ TEST_CASE("get file and put file", "[getAndPutFile]") { const char *sourcedir = testController.createTempDirectory(src_format); const char *putfiledir = testController.createTempDirectory(put_format); std::string test_file_content = "C API raNdOMcaSe test d4t4 th1s is!"; - - nifi_instance *instance = create_instance("random_instance", create_port("12345")); + auto instance = create_instance_obj(); REQUIRE(instance != nullptr); flow *test_flow = create_flow(instance, nullptr); REQUIRE(test_flow != nullptr); @@ -135,8 +139,7 @@ TEST_CASE("Test manipulation of attributes", "[testAttributes]") { file.open(ss.str(), std::ios::out); file << test_file_content; file.close(); - - nifi_instance *instance = create_instance("random_instance", create_port("12345")); + auto instance = create_instance_obj(); REQUIRE(instance != nullptr); flow *test_flow = create_flow(instance, nullptr); REQUIRE(test_flow != nullptr); @@ -144,14 +147,13 @@ TEST_CASE("Test manipulation of attributes", "[testAttributes]") { processor *get_proc = add_processor(test_flow, "GetFile"); REQUIRE(get_proc != nullptr); REQUIRE(set_property(get_proc, "Input Directory", sourcedir) == 0); - processor *extract_test = add_processor_with_linkage(test_flow, "ExtractText"); + processor *extract_test = add_processor_with_linkage(test_flow, "ExtractText"); REQUIRE(extract_test != nullptr); REQUIRE(set_property(extract_test, "Attribute", "TestAttr") == 0); - // TODO(aboda): enable this after decision made in MINIFICPP-640 /*processor *update_attribute = add_processor_with_linkage(test_flow, "UpdateAttribute"); - REQUIRE(update_attribute != nullptr); + REQUIRE(update_attribute != nullptr); - REQUIRE(set_property(update_attribute, "TestAttribute", "TestValue") == 0);*/ + REQUIRE(set_property(update_attribute, "TestAttribute", "TestValue") == 0);*/ flow_file_record *record = get_next_flow_file(instance, test_flow); @@ -171,17 +173,17 @@ TEST_CASE("Test manipulation of attributes", "[testAttributes]") { const char * new_testattr_value = "S0me t3st t3xt"; // Attribute already exist, should fail - REQUIRE(add_attribute(record, test_attr.key, (void*)new_testattr_value, strlen(new_testattr_value)) != 0); // NOLINT + REQUIRE(add_attribute(record, test_attr.key, (void* )new_testattr_value, strlen(new_testattr_value)) != 0); // NOLINT // Update overwrites values - update_attribute(record, test_attr.key, (void*)new_testattr_value, strlen(new_testattr_value)); // NOLINT + update_attribute(record, test_attr.key, (void*) new_testattr_value, strlen(new_testattr_value)); // NOLINT int attr_size = get_attribute_qty(record); REQUIRE(attr_size > 0); attribute_set attr_set; attr_set.size = attr_size; - attr_set.attributes = (attribute*)malloc(attr_set.size * sizeof(attribute)); // NOLINT + attr_set.attributes = (attribute*) malloc(attr_set.size * sizeof(attribute)); // NOLINT REQUIRE(get_all_attributes(record, &attr_set) == attr_set.size); diff --git a/python/minifi/__init__.py b/python/minifi/__init__.py index 01fb70517a..7352eb7b35 100644 --- a/python/minifi/__init__.py +++ b/python/minifi/__init__.py @@ -66,9 +66,9 @@ def setBase(self, proc): def get(self, session): ff = self._minifi.get(self._instance.get_instance(),self._flow, session) if ff: - return FlowFile(self._minifi, ff) + return FlowFile(self._minifi, ff) else: - return None + return None def transfer(self, session, ff, rel): self._minifi.transfer(session, self._flow, rel.encode("UTF-8")) @@ -119,12 +119,6 @@ def __init__(self, dll_file, url, port): """ create instance """ self._minifi.create_instance.argtypes = [ctypes.c_char_p , ctypes.POINTER(RPG_PORT)] self._minifi.create_instance.restype = ctypes.POINTER(NIFI_STRUCT) - """ create port """ - self._minifi.create_port.argtype = ctypes.c_char_p - self._minifi.create_port.restype = ctypes.POINTER(RPG_PORT) - """ free port """ - self._minifi.free_port.argtype = ctypes.POINTER(RPG_PORT) - self._minifi.free_port.restype = ctypes.c_int """ create new flow """ self._minifi.create_new_flow.argtype = ctypes.POINTER(NIFI_STRUCT) self._minifi.create_new_flow.restype = ctypes.POINTER(CFlow) @@ -167,7 +161,7 @@ def __init__(self, dll_file, url, port): def __open_rpg(self, url, port): - rpgPort = self._minifi.create_port(port) + rpgPort = (RPG_PORT)(port) rpg = self._minifi.create_instance(url, rpgPort) ret = RPG(rpg) return ret From 4de3f8c4a735756a2c31f49ceb88e4942ec898a7 Mon Sep 17 00:00:00 2001 From: Marc Parisi Date: Thu, 18 Oct 2018 20:12:07 -0400 Subject: [PATCH 2/2] MINIFICPP-647: Update comment --- libminifi/src/capi/api.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libminifi/src/capi/api.cpp b/libminifi/src/capi/api.cpp index 6484f9658b..6bec57c403 100644 --- a/libminifi/src/capi/api.cpp +++ b/libminifi/src/capi/api.cpp @@ -61,7 +61,7 @@ class DirectoryConfiguration { * Creates a NiFi Instance from the url and output port. * @param url http URL for NiFi instance * @param port Remote output port. - * @Deprecated for 0.6.0 in favor of + * @Deprecated for API version 0.2 in favor of the following prototype * nifi_instance *create_instance(nifi_port const *port) { */ nifi_instance *create_instance(const char *url, nifi_port *port) {