MINIFI-68 Adding yaml-cpp source and updating LICENSE to reflect its inclusion.
Adding a Makefile for yaml-cpp and incorporating its library build as part of the overall process. Providing parsing of config.yml to establish a processing graph as well as providing configuration for FlowController to handle XML and YAML. Ignoring SIGPIPE signal. Adjusting Makefile to correct assembly packages not being generated. Providing includes for yaml-cpp build Makefile and having top level Makefile build libuuid regardless. Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/cf813d4d Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/cf813d4d Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/cf813d4d Branch: refs/heads/MINIFI-68 Commit: cf813d4dc775b655ff418b1a67d9ec67c838f7f1 Parents: ddedb4e Author: Aldrin Piri <[email protected]> Authored: Fri Jul 22 13:23:54 2016 -0400 Committer: Aldrin Piri <[email protected]> Committed: Tue Aug 2 11:49:37 2016 -0400 ---------------------------------------------------------------------- Makefile | 46 +- README.md | 2 +- conf/flow.yml | 55 + conf/minifi.properties | 191 + conf/nifi.properties | 191 - inc/FlowController.h | 40 +- inc/ProcessGroup.h | 2 + main/MiNiFiMain.cpp | 72 +- src/FlowController.cpp | 1068 +- src/ProcessGroup.cpp | 23 + src/ProcessSession.cpp | 6 +- src/Processor.cpp | 4 +- thirdparty/uuid/libuuid.a | Bin 1172996 -> 0 bytes thirdparty/uuid/tst_uuid | Bin 29660 -> 29892 bytes .../yaml-cpp-yaml-cpp-0.5.3/.clang-format | 47 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/.gitignore | 1 + .../yaml-cpp-yaml-cpp-0.5.3/CMakeLists.txt | 340 + .../yaml-cpp-yaml-cpp-0.5.3/CONTRIBUTING.md | 17 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/LICENSE | 19 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/Makefile | 40 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/README.md | 52 + .../include/yaml-cpp/anchor.h | 17 + .../include/yaml-cpp/binary.h | 67 + .../include/yaml-cpp/contrib/anchordict.h | 37 + .../include/yaml-cpp/contrib/graphbuilder.h | 147 + .../include/yaml-cpp/dll.h | 37 + .../include/yaml-cpp/emitfromevents.h | 57 + .../include/yaml-cpp/emitter.h | 254 + .../include/yaml-cpp/emitterdef.h | 16 + .../include/yaml-cpp/emittermanip.h | 137 + .../include/yaml-cpp/emitterstyle.h | 16 + .../include/yaml-cpp/eventhandler.h | 40 + .../include/yaml-cpp/exceptions.h | 231 + .../include/yaml-cpp/mark.h | 29 + .../include/yaml-cpp/node/convert.h | 297 + .../include/yaml-cpp/node/detail/bool_type.h | 26 + .../include/yaml-cpp/node/detail/impl.h | 177 + .../include/yaml-cpp/node/detail/iterator.h | 65 + .../include/yaml-cpp/node/detail/iterator_fwd.h | 28 + .../include/yaml-cpp/node/detail/memory.h | 46 + .../include/yaml-cpp/node/detail/node.h | 170 + .../include/yaml-cpp/node/detail/node_data.h | 127 + .../yaml-cpp/node/detail/node_iterator.h | 159 + .../include/yaml-cpp/node/detail/node_ref.h | 97 + .../include/yaml-cpp/node/emit.h | 25 + .../include/yaml-cpp/node/impl.h | 448 + .../include/yaml-cpp/node/iterator.h | 31 + .../include/yaml-cpp/node/node.h | 145 + .../include/yaml-cpp/node/parse.h | 30 + .../include/yaml-cpp/node/ptr.h | 29 + .../include/yaml-cpp/node/type.h | 16 + .../include/yaml-cpp/noncopyable.h | 25 + .../include/yaml-cpp/null.h | 24 + .../include/yaml-cpp/ostream_wrapper.h | 72 + .../include/yaml-cpp/parser.h | 48 + .../include/yaml-cpp/stlemitter.h | 51 + .../include/yaml-cpp/traits.h | 103 + .../include/yaml-cpp/yaml.h | 24 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/install.txt | 24 + .../yaml-cpp-yaml-cpp-0.5.3/src/binary.cpp | 93 + .../src/collectionstack.h | 39 + .../src/contrib/graphbuilder.cpp | 17 + .../src/contrib/graphbuilderadapter.cpp | 94 + .../src/contrib/graphbuilderadapter.h | 79 + .../yaml-cpp-yaml-cpp-0.5.3/src/convert.cpp | 75 + .../yaml-cpp-yaml-cpp-0.5.3/src/directives.cpp | 22 + .../yaml-cpp-yaml-cpp-0.5.3/src/directives.h | 29 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/emit.cpp | 25 + .../src/emitfromevents.cpp | 119 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitter.cpp | 911 + .../src/emitterstate.cpp | 350 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitterstate.h | 203 + .../src/emitterutils.cpp | 484 + .../yaml-cpp-yaml-cpp-0.5.3/src/emitterutils.h | 50 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.cpp | 136 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.h | 209 + .../yaml-cpp-yaml-cpp-0.5.3/src/indentation.h | 41 + .../yaml-cpp-yaml-cpp-0.5.3/src/memory.cpp | 26 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/node.cpp | 12 + .../yaml-cpp-yaml-cpp-0.5.3/src/node_data.cpp | 301 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.cpp | 131 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.h | 70 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.cpp | 101 + .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.h | 64 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/null.cpp | 5 + .../src/ostream_wrapper.cpp | 57 + .../yaml-cpp-yaml-cpp-0.5.3/src/parse.cpp | 68 + .../yaml-cpp-yaml-cpp-0.5.3/src/parser.cpp | 128 + .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_stack.h | 53 + .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_vector.h | 49 + .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.cpp | 45 + .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.h | 85 + .../yaml-cpp-yaml-cpp-0.5.3/src/regeximpl.h | 186 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.cpp | 386 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.h | 135 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.cpp | 221 + .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.h | 61 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.cpp | 81 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.h | 19 + .../yaml-cpp-yaml-cpp-0.5.3/src/scantoken.cpp | 436 + .../yaml-cpp-yaml-cpp-0.5.3/src/setting.h | 99 + .../yaml-cpp-yaml-cpp-0.5.3/src/simplekey.cpp | 128 + .../src/singledocparser.cpp | 413 + .../src/singledocparser.h | 65 + .../yaml-cpp-yaml-cpp-0.5.3/src/stream.cpp | 448 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/stream.h | 76 + .../src/streamcharsource.h | 48 + .../yaml-cpp-yaml-cpp-0.5.3/src/stringsource.h | 48 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.cpp | 49 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.h | 33 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/token.h | 69 + .../yaml-cpp-yaml-cpp-0.5.3/test/CMakeLists.txt | 34 + .../test/create-emitter-tests.py | 211 + .../test/gmock-1.7.0/CHANGES | 126 + .../test/gmock-1.7.0/CMakeLists.txt | 171 + .../test/gmock-1.7.0/CONTRIBUTORS | 40 + .../test/gmock-1.7.0/LICENSE | 28 + .../test/gmock-1.7.0/Makefile.am | 216 + .../test/gmock-1.7.0/Makefile.in | 1357 ++ .../test/gmock-1.7.0/README | 369 + .../test/gmock-1.7.0/aclocal.m4 | 9799 ++++++++ .../test/gmock-1.7.0/build-aux/config.guess | 1530 ++ .../test/gmock-1.7.0/build-aux/config.h.in | 69 + .../test/gmock-1.7.0/build-aux/config.sub | 1773 ++ .../test/gmock-1.7.0/build-aux/depcomp | 688 + .../test/gmock-1.7.0/build-aux/install-sh | 527 + .../test/gmock-1.7.0/build-aux/ltmain.sh | 9661 ++++++++ .../test/gmock-1.7.0/build-aux/missing | 331 + .../test/gmock-1.7.0/configure | 18535 +++++++++++++++ .../test/gmock-1.7.0/configure.ac | 146 + .../gmock-1.7.0/fused-src/gmock-gtest-all.cc | 11443 ++++++++++ .../test/gmock-1.7.0/fused-src/gmock/gmock.h | 14198 ++++++++++++ .../test/gmock-1.7.0/fused-src/gmock_main.cc | 54 + .../test/gmock-1.7.0/fused-src/gtest/gtest.h | 20061 +++++++++++++++++ .../test/gmock-1.7.0/gtest/CHANGES | 157 + .../test/gmock-1.7.0/gtest/CMakeLists.txt | 252 + .../test/gmock-1.7.0/gtest/CONTRIBUTORS | 37 + .../test/gmock-1.7.0/gtest/LICENSE | 28 + .../test/gmock-1.7.0/gtest/Makefile.am | 306 + .../test/gmock-1.7.0/gtest/Makefile.in | 1360 ++ .../test/gmock-1.7.0/gtest/README | 435 + .../test/gmock-1.7.0/gtest/aclocal.m4 | 1198 + .../gmock-1.7.0/gtest/build-aux/config.guess | 1530 ++ .../gmock-1.7.0/gtest/build-aux/config.h.in | 69 + .../test/gmock-1.7.0/gtest/build-aux/config.sub | 1773 ++ .../test/gmock-1.7.0/gtest/build-aux/depcomp | 688 + .../test/gmock-1.7.0/gtest/build-aux/install-sh | 527 + .../test/gmock-1.7.0/gtest/build-aux/ltmain.sh | 9661 ++++++++ .../test/gmock-1.7.0/gtest/build-aux/missing | 331 + .../gtest/cmake/internal_utils.cmake | 227 + .../gmock-1.7.0/gtest/codegear/gtest.cbproj | 138 + .../gmock-1.7.0/gtest/codegear/gtest.groupproj | 54 + .../gmock-1.7.0/gtest/codegear/gtest_all.cc | 38 + .../gmock-1.7.0/gtest/codegear/gtest_link.cc | 40 + .../gtest/codegear/gtest_main.cbproj | 82 + .../gtest/codegear/gtest_unittest.cbproj | 88 + .../test/gmock-1.7.0/gtest/configure | 18222 +++++++++++++++ .../test/gmock-1.7.0/gtest/configure.ac | 68 + .../gtest/fused-src/gtest/gtest-all.cc | 9592 ++++++++ .../gmock-1.7.0/gtest/fused-src/gtest/gtest.h | 20061 +++++++++++++++++ .../gtest/fused-src/gtest/gtest_main.cc | 38 + .../gtest/include/gtest/gtest-death-test.h | 294 + .../gtest/include/gtest/gtest-message.h | 250 + .../gtest/include/gtest/gtest-param-test.h | 1421 ++ .../gtest/include/gtest/gtest-param-test.h.pump | 487 + .../gtest/include/gtest/gtest-printers.h | 855 + .../gmock-1.7.0/gtest/include/gtest/gtest-spi.h | 232 + .../gtest/include/gtest/gtest-test-part.h | 179 + .../gtest/include/gtest/gtest-typed-test.h | 259 + .../gmock-1.7.0/gtest/include/gtest/gtest.h | 2291 ++ .../gtest/include/gtest/gtest_pred_impl.h | 358 + .../gtest/include/gtest/gtest_prod.h | 58 + .../gtest/internal/gtest-death-test-internal.h | 319 + .../include/gtest/internal/gtest-filepath.h | 206 + .../include/gtest/internal/gtest-internal.h | 1158 + .../include/gtest/internal/gtest-linked_ptr.h | 233 + .../gtest/internal/gtest-param-util-generated.h | 5143 +++++ .../internal/gtest-param-util-generated.h.pump | 301 + .../include/gtest/internal/gtest-param-util.h | 619 + .../gtest/include/gtest/internal/gtest-port.h | 1947 ++ .../gtest/include/gtest/internal/gtest-string.h | 167 + .../gtest/include/gtest/internal/gtest-tuple.h | 1012 + .../include/gtest/internal/gtest-tuple.h.pump | 339 + .../include/gtest/internal/gtest-type-util.h | 3331 +++ .../gtest/internal/gtest-type-util.h.pump | 297 + .../test/gmock-1.7.0/gtest/m4/acx_pthread.m4 | 363 + .../test/gmock-1.7.0/gtest/m4/gtest.m4 | 74 + .../test/gmock-1.7.0/gtest/m4/libtool.m4 | 8001 +++++++ .../test/gmock-1.7.0/gtest/m4/ltoptions.m4 | 384 + .../test/gmock-1.7.0/gtest/m4/ltsugar.m4 | 123 + .../test/gmock-1.7.0/gtest/m4/ltversion.m4 | 23 + .../test/gmock-1.7.0/gtest/m4/lt~obsolete.m4 | 98 + .../test/gmock-1.7.0/gtest/make/Makefile | 82 + .../test/gmock-1.7.0/gtest/msvc/gtest-md.sln | 45 + .../test/gmock-1.7.0/gtest/msvc/gtest-md.vcproj | 126 + .../test/gmock-1.7.0/gtest/msvc/gtest.sln | 45 + .../test/gmock-1.7.0/gtest/msvc/gtest.vcproj | 126 + .../gmock-1.7.0/gtest/msvc/gtest_main-md.vcproj | 129 + .../gmock-1.7.0/gtest/msvc/gtest_main.vcproj | 129 + .../gtest/msvc/gtest_prod_test-md.vcproj | 164 + .../gtest/msvc/gtest_prod_test.vcproj | 164 + .../gtest/msvc/gtest_unittest-md.vcproj | 147 + .../gtest/msvc/gtest_unittest.vcproj | 147 + .../gmock-1.7.0/gtest/samples/prime_tables.h | 123 + .../test/gmock-1.7.0/gtest/samples/sample1.cc | 68 + .../test/gmock-1.7.0/gtest/samples/sample1.h | 43 + .../gtest/samples/sample10_unittest.cc | 144 + .../gtest/samples/sample1_unittest.cc | 153 + .../test/gmock-1.7.0/gtest/samples/sample2.cc | 56 + .../test/gmock-1.7.0/gtest/samples/sample2.h | 85 + .../gtest/samples/sample2_unittest.cc | 109 + .../gmock-1.7.0/gtest/samples/sample3-inl.h | 172 + .../gtest/samples/sample3_unittest.cc | 151 + .../test/gmock-1.7.0/gtest/samples/sample4.cc | 46 + .../test/gmock-1.7.0/gtest/samples/sample4.h | 53 + .../gtest/samples/sample4_unittest.cc | 45 + .../gtest/samples/sample5_unittest.cc | 199 + .../gtest/samples/sample6_unittest.cc | 224 + .../gtest/samples/sample7_unittest.cc | 130 + .../gtest/samples/sample8_unittest.cc | 173 + .../gtest/samples/sample9_unittest.cc | 160 + .../gtest/scripts/fuse_gtest_files.py | 250 + .../gtest/scripts/gen_gtest_pred_impl.py | 730 + .../gmock-1.7.0/gtest/scripts/gtest-config.in | 274 + .../test/gmock-1.7.0/gtest/scripts/pump.py | 855 + .../gmock-1.7.0/gtest/scripts/test/Makefile | 59 + .../test/gmock-1.7.0/gtest/src/gtest-all.cc | 48 + .../gmock-1.7.0/gtest/src/gtest-death-test.cc | 1344 ++ .../gmock-1.7.0/gtest/src/gtest-filepath.cc | 382 + .../gmock-1.7.0/gtest/src/gtest-internal-inl.h | 1218 + .../test/gmock-1.7.0/gtest/src/gtest-port.cc | 805 + .../gmock-1.7.0/gtest/src/gtest-printers.cc | 363 + .../gmock-1.7.0/gtest/src/gtest-test-part.cc | 110 + .../gmock-1.7.0/gtest/src/gtest-typed-test.cc | 110 + .../test/gmock-1.7.0/gtest/src/gtest.cc | 5015 ++++ .../test/gmock-1.7.0/gtest/src/gtest_main.cc | 38 + .../gtest/test/gtest-death-test_ex_test.cc | 93 + .../gtest/test/gtest-death-test_test.cc | 1367 ++ .../gtest/test/gtest-filepath_test.cc | 680 + .../gtest/test/gtest-linked_ptr_test.cc | 154 + .../gtest/test/gtest-listener_test.cc | 310 + .../gtest/test/gtest-message_test.cc | 159 + .../gtest/test/gtest-options_test.cc | 215 + .../gtest/test/gtest-param-test2_test.cc | 65 + .../gtest/test/gtest-param-test_test.cc | 904 + .../gtest/test/gtest-param-test_test.h | 57 + .../gmock-1.7.0/gtest/test/gtest-port_test.cc | 1253 + .../gtest/test/gtest-printers_test.cc | 1566 ++ .../gtest/test/gtest-test-part_test.cc | 208 + .../gmock-1.7.0/gtest/test/gtest-tuple_test.cc | 320 + .../gtest/test/gtest-typed-test2_test.cc | 45 + .../gtest/test/gtest-typed-test_test.cc | 360 + .../gtest/test/gtest-typed-test_test.h | 66 + .../gtest/test/gtest-unittest-api_test.cc | 341 + .../gmock-1.7.0/gtest/test/gtest_all_test.cc | 47 + .../test/gtest_break_on_failure_unittest.py | 212 + .../test/gtest_break_on_failure_unittest_.cc | 88 + .../gtest/test/gtest_catch_exceptions_test.py | 237 + .../gtest/test/gtest_catch_exceptions_test_.cc | 311 + .../gmock-1.7.0/gtest/test/gtest_color_test.py | 130 + .../gmock-1.7.0/gtest/test/gtest_color_test_.cc | 71 + .../gtest/test/gtest_env_var_test.py | 103 + .../gtest/test/gtest_env_var_test_.cc | 126 + .../gtest/test/gtest_environment_test.cc | 192 + .../gtest/test/gtest_filter_unittest.py | 633 + .../gtest/test/gtest_filter_unittest_.cc | 140 + .../gmock-1.7.0/gtest/test/gtest_help_test.py | 172 + .../gmock-1.7.0/gtest/test/gtest_help_test_.cc | 46 + .../gtest/test/gtest_list_tests_unittest.py | 207 + .../gtest/test/gtest_list_tests_unittest_.cc | 157 + .../gtest/test/gtest_main_unittest.cc | 45 + .../gtest/test/gtest_no_test_unittest.cc | 56 + .../gmock-1.7.0/gtest/test/gtest_output_test.py | 335 + .../gtest/test/gtest_output_test_.cc | 1034 + .../gtest/test/gtest_output_test_golden_lin.txt | 720 + .../gtest/test/gtest_pred_impl_unittest.cc | 2427 ++ .../gtest/test/gtest_premature_exit_test.cc | 141 + .../gmock-1.7.0/gtest/test/gtest_prod_test.cc | 57 + .../gmock-1.7.0/gtest/test/gtest_repeat_test.cc | 253 + .../gtest/test/gtest_shuffle_test.py | 325 + .../gtest/test/gtest_shuffle_test_.cc | 103 + .../gtest/test/gtest_sole_header_test.cc | 57 + .../gmock-1.7.0/gtest/test/gtest_stress_test.cc | 256 + .../gmock-1.7.0/gtest/test/gtest_test_utils.py | 320 + .../test/gtest_throw_on_failure_ex_test.cc | 92 + .../gtest/test/gtest_throw_on_failure_test.py | 171 + .../gtest/test/gtest_throw_on_failure_test_.cc | 72 + .../gtest/test/gtest_uninitialized_test.py | 70 + .../gtest/test/gtest_uninitialized_test_.cc | 43 + .../gmock-1.7.0/gtest/test/gtest_unittest.cc | 7415 ++++++ .../gtest/test/gtest_xml_outfile1_test_.cc | 49 + .../gtest/test/gtest_xml_outfile2_test_.cc | 49 + .../gtest/test/gtest_xml_outfiles_test.py | 132 + .../gtest/test/gtest_xml_output_unittest.py | 307 + .../gtest/test/gtest_xml_output_unittest_.cc | 181 + .../gtest/test/gtest_xml_test_utils.py | 194 + .../test/gmock-1.7.0/gtest/test/production.cc | 36 + .../test/gmock-1.7.0/gtest/test/production.h | 55 + .../gtest/xcode/Config/DebugProject.xcconfig | 30 + .../gtest/xcode/Config/FrameworkTarget.xcconfig | 17 + .../gtest/xcode/Config/General.xcconfig | 41 + .../gtest/xcode/Config/ReleaseProject.xcconfig | 32 + .../xcode/Config/StaticLibraryTarget.xcconfig | 18 + .../gtest/xcode/Config/TestTarget.xcconfig | 8 + .../gtest/xcode/Resources/Info.plist | 30 + .../xcode/Samples/FrameworkSample/Info.plist | 28 + .../WidgetFramework.xcodeproj/project.pbxproj | 457 + .../xcode/Samples/FrameworkSample/runtests.sh | 62 + .../xcode/Samples/FrameworkSample/widget.cc | 63 + .../xcode/Samples/FrameworkSample/widget.h | 59 + .../Samples/FrameworkSample/widget_test.cc | 68 + .../gmock-1.7.0/gtest/xcode/Scripts/runtests.sh | 65 + .../gtest/xcode/Scripts/versiongenerate.py | 100 + .../gtest/xcode/gtest.xcodeproj/project.pbxproj | 1135 + .../gmock-1.7.0/include/gmock/gmock-actions.h | 1078 + .../include/gmock/gmock-cardinalities.h | 147 + .../include/gmock/gmock-generated-actions.h | 2415 ++ .../gmock/gmock-generated-actions.h.pump | 821 + .../gmock/gmock-generated-function-mockers.h | 991 + .../gmock-generated-function-mockers.h.pump | 265 + .../include/gmock/gmock-generated-matchers.h | 2190 ++ .../gmock/gmock-generated-matchers.h.pump | 674 + .../include/gmock/gmock-generated-nice-strict.h | 397 + .../gmock/gmock-generated-nice-strict.h.pump | 161 + .../gmock-1.7.0/include/gmock/gmock-matchers.h | 3986 ++++ .../include/gmock/gmock-more-actions.h | 233 + .../include/gmock/gmock-more-matchers.h | 58 + .../include/gmock/gmock-spec-builders.h | 1791 ++ .../test/gmock-1.7.0/include/gmock/gmock.h | 94 + .../internal/gmock-generated-internal-utils.h | 279 + .../gmock-generated-internal-utils.h.pump | 136 + .../gmock/internal/gmock-internal-utils.h | 498 + .../include/gmock/internal/gmock-port.h | 78 + .../test/gmock-1.7.0/make/Makefile | 101 + .../test/gmock-1.7.0/msvc/2005/gmock.sln | 32 + .../test/gmock-1.7.0/msvc/2005/gmock.vcproj | 191 + .../gmock-1.7.0/msvc/2005/gmock_config.vsprops | 15 + .../gmock-1.7.0/msvc/2005/gmock_main.vcproj | 187 + .../gmock-1.7.0/msvc/2005/gmock_test.vcproj | 201 + .../test/gmock-1.7.0/msvc/2010/gmock.sln | 32 + .../test/gmock-1.7.0/msvc/2010/gmock.vcxproj | 82 + .../gmock-1.7.0/msvc/2010/gmock_config.props | 19 + .../gmock-1.7.0/msvc/2010/gmock_main.vcxproj | 88 + .../gmock-1.7.0/msvc/2010/gmock_test.vcxproj | 101 + .../gmock-1.7.0/scripts/fuse_gmock_files.py | 240 + .../test/gmock-1.7.0/scripts/generator/LICENSE | 203 + .../test/gmock-1.7.0/scripts/generator/README | 35 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../gmock-1.7.0/scripts/generator/cpp/ast.py | 1723 ++ .../scripts/generator/cpp/gmock_class.py | 226 + .../scripts/generator/cpp/keywords.py | 59 + .../scripts/generator/cpp/tokenize.py | 287 + .../gmock-1.7.0/scripts/generator/cpp/utils.py | 41 + .../gmock-1.7.0/scripts/generator/gmock_gen.py | 31 + .../test/gmock-1.7.0/scripts/gmock-config.in | 303 + .../test/gmock-1.7.0/src/gmock-all.cc | 47 + .../test/gmock-1.7.0/src/gmock-cardinalities.cc | 156 + .../gmock-1.7.0/src/gmock-internal-utils.cc | 174 + .../test/gmock-1.7.0/src/gmock-matchers.cc | 498 + .../test/gmock-1.7.0/src/gmock-spec-builders.cc | 813 + .../test/gmock-1.7.0/src/gmock.cc | 182 + .../test/gmock-1.7.0/src/gmock_main.cc | 54 + .../test/gmock-1.7.0/test/gmock-actions_test.cc | 1256 ++ .../test/gmock-cardinalities_test.cc | 428 + .../test/gmock-generated-actions_test.cc | 1225 + .../gmock-generated-function-mockers_test.cc | 588 + .../test/gmock-generated-internal-utils_test.cc | 127 + .../test/gmock-generated-matchers_test.cc | 1289 ++ .../test/gmock-internal-utils_test.cc | 649 + .../gmock-1.7.0/test/gmock-matchers_test.cc | 5247 +++++ .../gmock-1.7.0/test/gmock-more-actions_test.cc | 705 + .../gmock-1.7.0/test/gmock-nice-strict_test.cc | 424 + .../test/gmock-1.7.0/test/gmock-port_test.cc | 43 + .../test/gmock-spec-builders_test.cc | 2613 +++ .../test/gmock-1.7.0/test/gmock_all_test.cc | 48 + .../test/gmock-1.7.0/test/gmock_ex_test.cc | 78 + .../test/gmock-1.7.0/test/gmock_leak_test.py | 108 + .../test/gmock-1.7.0/test/gmock_leak_test_.cc | 100 + .../test/gmock-1.7.0/test/gmock_link2_test.cc | 40 + .../test/gmock-1.7.0/test/gmock_link_test.cc | 40 + .../test/gmock-1.7.0/test/gmock_link_test.h | 669 + .../test/gmock-1.7.0/test/gmock_output_test.py | 180 + .../test/gmock-1.7.0/test/gmock_output_test_.cc | 291 + .../test/gmock_output_test_golden.txt | 310 + .../test/gmock-1.7.0/test/gmock_stress_test.cc | 322 + .../test/gmock-1.7.0/test/gmock_test.cc | 255 + .../test/gmock-1.7.0/test/gmock_test_utils.py | 112 + .../yaml-cpp-yaml-cpp-0.5.3/test/handler_test.h | 32 + .../test/integration/emitter_test.cpp | 1024 + .../test/integration/encoding_test.cpp | 182 + .../test/integration/gen_emitter_test.cpp | 9759 ++++++++ .../test/integration/handler_spec_test.cpp | 1611 ++ .../test/integration/handler_test.cpp | 46 + .../test/integration/load_node_test.cpp | 202 + .../test/integration/node_spec_test.cpp | 1131 + .../yaml-cpp-yaml-cpp-0.5.3/test/main.cpp | 6 + .../test/mock_event_handler.h | 26 + .../test/node/node_test.cpp | 474 + .../test/ostream_wrapper_test.cpp | 66 + .../yaml-cpp-yaml-cpp-0.5.3/test/specexamples.h | 846 + .../yaml-cpp-yaml-cpp-0.5.3/util/CMakeLists.txt | 11 + thirdparty/yaml-cpp-yaml-cpp-0.5.3/util/api.cpp | 137 + .../yaml-cpp-yaml-cpp-0.5.3/util/parse.cpp | 61 + .../yaml-cpp-yaml-cpp-0.5.3/util/read.cpp | 33 + .../yaml-cpp-yaml-cpp-0.5.3/util/sandbox.cpp | 36 + .../yaml-cpp-config-version.cmake.in | 11 + .../yaml-cpp-config.cmake.in | 14 + .../yaml-cpp-yaml-cpp-0.5.3/yaml-cpp.pc.cmake | 11 + 409 files changed, 299986 insertions(+), 639 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/Makefile ---------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 0bcfc35..97b4151 100644 --- a/Makefile +++ b/Makefile @@ -26,22 +26,20 @@ TARGET_LIB=libminifi.a PROJECT=minifi TARGET_EXE=$(PROJECT) ifeq ($(ARCH), arm) -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc -INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ #-L/usr/local/opt/leveldb/lib -#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc +INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty -L./thirdparty/libxml2/.libs/ LDFLAGS=-static -lminifi -lxml2 -pthread -luuid else ifeq ($(ARCH), linux) -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ #-L/usr/local/opt/leveldb/lib -#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g +INCLUDES=-I./inc -I./src -I./thirdparty -I./test -I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ LDFLAGS=-lminifi -lxml2 -pthread -luuid else -CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field -INCLUDES=-I./inc -I./src -I./test -I/usr/include/libxml2 #-I/usr/local/opt/leveldb/include/ -LDDIRECTORY=-L./build #-L/usr/local/opt/leveldb/out-static/ -LDFLAGS=-lminifi -lxml2 -pthread -luuid #--llevedb +CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall -g -Wno-unused-private-field +INCLUDES=-I./inc -I./src -I./test -I./thirdparty -I/usr/include/libxml2 -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include +LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/ +LDFLAGS=-lminifi -lxml2 -pthread -luuid -lyaml-cpp endif @@ -55,17 +53,21 @@ endif OBJS:=$(shell /bin/ls src/*.cpp | xargs -n1 basename 2>/dev/null | awk '/\.cpp$$/{a=$$0; gsub("\\.cpp$$",".o", a); print "$(BUILD_DIR)/" a}') TESTS:=Server -all: directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests assemblies +all: thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests assembly-pkgs + +thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a: + make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 .PHONY: directory directory: mkdir -p $(BUILD_DIR) mkdir -p $(TARGET_DIR) + + make -C thirdparty/uuid ifeq ($(ARCH), arm) make -C thirdparty/uuid CROSS_COMPILE=$(CROSS_COMPILE) cd thirdparty/libxml2; ./configure --host=${CROSS_COMPILE} --target==${CROSSS_COMPILE} --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ else ifeq ($(ARCH), linux) - make -C thirdparty/uuid cd thirdparty/libxml2; ./configure --without-python --without-zlib --enable-static --disable-shared; make; cd ../../ endif @@ -75,21 +77,24 @@ $(BUILD_DIR)/%.o: src/%.cpp $(BUILD_DIR)/$(TARGET_LIB): $(OBJS) $(AR) crs $@ $(OBJS) -minifi: $(BUILD_DIR)/$(TARGET_LIB) +minifi: $(BUILD_DIR)/$(TARGET_LIB) thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TARGET_EXE) main/MiNiFiMain.cpp $(LDDIRECTORY) $(LDFLAGS) cp $(BUILD_DIR)/$(TARGET_EXE) $(TARGET_DIR)/$(TARGET_EXE) .PHONY: tests -tests: $(BUILD_DIR)/$(TARGET_LIB) +tests: $(BUILD_DIR)/$(TARGET_LIB) thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a $(foreach TEST_NAME, $(TESTS),\ $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TEST_NAME) test/$(TEST_NAME).cpp $(LDDIRECTORY) $(LDFLAGS)) $(ASSEMBLIES_DIR) : mkdir -p $(ASSEMBLIES_DIR) +.PHONY: assembly-pkgs +assembly-pkgs: $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz + $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz : $(ASSEMBLIES_DIR) - tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz \ - LICENSE \ + mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source + cp -r LICENSE \ NOTICE \ README.md \ inc \ @@ -97,7 +102,9 @@ $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz : $(ASSEMBLIES_DIR) main \ conf \ thirdparty \ - Makefile + Makefile \ + $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source + tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz -C $(ASSEMBLIES_DIR) $(PROJECT)-$(VERSION)-source $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz : $(ASSEMBLIES_DIR) $(TARGET_EXE) tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz \ @@ -112,6 +119,7 @@ clean: rm -rf $(BUILD_DIR) rm -rf $(TARGET_DIR) rm -rf $(ASSEMBLIES_DIR) + make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean ifeq ($(ARCH), arm) make -C thirdparty/uuid clean make -C thirdparty/libxml2 distclean http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index 6c4137e..233caf4 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Add new propery HostName and Port into RemoteProcessGroup InputOutput port for r </property> </inputPort> 2) -Add new proerties into nifi.properties for command control +Add new proerties into minifi.properties for command control # MiNiFi Server for Command Control nifi.server.name=localhost nifi.server.port=9000 http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/conf/flow.yml ---------------------------------------------------------------------- diff --git a/conf/flow.yml b/conf/flow.yml new file mode 100644 index 0000000..63b0244 --- /dev/null +++ b/conf/flow.yml @@ -0,0 +1,55 @@ +# 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. + +Flow Controller: + name: MiNiFi Flow + +Processors: + - name: GenerateFlowFile 1 + class: org.apache.nifi.processors.standard.GenerateFlowFile + max concurrent tasks: 1 + scheduling strategy: TIMER_DRIVEN + scheduling period: 1 sec + penalization period: 30 sec + yield period: 1 sec + run duration nanos: 0 + auto-terminated relationships list: + Properties: + File Size: 1 kB + Batch Size: 1 + +Connections: + - name: GenerateFlowFileS2S + source name: GenerateFlowFile 1 + source relationship name: success + destination name: 471deef6-2a6e-4a7d-912a-81cc17e3a204 + max work queue size: 0 + max work queue data size: 1 MB + flowfile expiration: 60 sec + queue prioritizer class: org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer + +Remote Processing Groups: + - name: NiFi Flow + url: https://localhost:8081/nifi + timeout: 30 secs + yield period: 10 sec + Input Ports: + - id: 471deef6-2a6e-4a7d-912a-81cc17e3a204 + name: From Node A + max concurrent tasks: 1 + use compression: false + Properties: # Deviates from spec and will later be removed when this is autonegotiated + Port: 10001 + Host Name: localhost http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/conf/minifi.properties ---------------------------------------------------------------------- diff --git a/conf/minifi.properties b/conf/minifi.properties new file mode 100644 index 0000000..854b84a --- /dev/null +++ b/conf/minifi.properties @@ -0,0 +1,191 @@ +# 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. + +# Core Properties # +nifi.version=0.6.0-SNAPSHOT +nifi.flow.configuration.file=./conf/flow.yml +nifi.flow.configuration.archive.dir=./conf/archive/ +nifi.flowcontroller.autoResumeState=true +nifi.flowcontroller.graceful.shutdown.period=10 sec +nifi.flowservice.writedelay.interval=500 ms +nifi.administrative.yield.duration=30 sec +# If a component has no work to do (is "bored"), how long should we wait before checking again for work? +nifi.bored.yield.duration=10 millis + +nifi.authority.provider.configuration.file=./conf/authority-providers.xml +nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml +nifi.templates.directory=./conf/templates +nifi.ui.banner.text= +nifi.ui.autorefresh.interval=30 sec +nifi.nar.library.directory=./lib +nifi.nar.working.directory=./work/nar/ +nifi.documentation.working.directory=./work/docs/components + +#################### +# State Management # +#################### +nifi.state.management.configuration.file=./conf/state-management.xml +# The ID of the local state provider +nifi.state.management.provider.local=local-provider +# The ID of the cluster-wide state provider. This will be ignored if NiFi is not clustered but must be populated if running in a cluster. +nifi.state.management.provider.cluster=zk-provider +# Specifies whether or not this instance of NiFi should run an embedded ZooKeeper server +nifi.state.management.embedded.zookeeper.start=false +# Properties file that provides the ZooKeeper properties to use if <nifi.state.management.embedded.zookeeper.start> is set to true +nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties + + +# H2 Settings +nifi.database.directory=./database_repository +nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE + +# FlowFile Repository +nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository +nifi.flowfile.repository.directory=./flowfile_repository +nifi.flowfile.repository.partitions=256 +nifi.flowfile.repository.checkpoint.interval=2 mins +nifi.flowfile.repository.always.sync=false + +nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager +nifi.queue.swap.threshold=20000 +nifi.swap.in.period=5 sec +nifi.swap.in.threads=1 +nifi.swap.out.period=5 sec +nifi.swap.out.threads=4 + +# Content Repository +nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository +nifi.content.claim.max.appendable.size=10 MB +nifi.content.claim.max.flow.files=100 +nifi.content.repository.directory.default=./content_repository +nifi.content.repository.archive.max.retention.period=12 hours +nifi.content.repository.archive.max.usage.percentage=50% +nifi.content.repository.archive.enabled=true +nifi.content.repository.always.sync=false +nifi.content.viewer.url=/nifi-content-viewer/ + +# Provenance Repository Properties +nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository + +# Persistent Provenance Repository Properties +nifi.provenance.repository.directory.default=./provenance_repository +nifi.provenance.repository.max.storage.time=24 hours +nifi.provenance.repository.max.storage.size=1 GB +nifi.provenance.repository.rollover.time=30 secs +nifi.provenance.repository.rollover.size=100 MB +nifi.provenance.repository.query.threads=2 +nifi.provenance.repository.index.threads=1 +nifi.provenance.repository.compress.on.rollover=true +nifi.provenance.repository.always.sync=false +nifi.provenance.repository.journal.count=16 +# Comma-separated list of fields. Fields that are not indexed will not be searchable. Valid fields are: +# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, AlternateIdentifierURI, Relationship, Details +nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, ProcessorID, Relationship +# FlowFile Attributes that should be indexed and made searchable. Some examples to consider are filename, uuid, mime.type +nifi.provenance.repository.indexed.attributes= +# Large values for the shard size will result in more Java heap usage when searching the Provenance Repository +# but should provide better performance +nifi.provenance.repository.index.shard.size=500 MB +# Indicates the maximum length that a FlowFile attribute can be when retrieving a Provenance Event from +# the repository. If the length of any attribute exceeds this value, it will be truncated when the event is retrieved. +nifi.provenance.repository.max.attribute.length=65536 + +# Volatile Provenance Respository Properties +nifi.provenance.repository.buffer.size=100000 + +# Component Status Repository +nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository +nifi.components.status.repository.buffer.size=1440 +nifi.components.status.snapshot.frequency=1 min + +# Site to Site properties +nifi.remote.input.socket.host=localhost +nifi.remote.input.socket.port=10000 +nifi.remote.input.secure=false + +# web properties # +nifi.web.war.directory=./lib +nifi.web.http.host= +nifi.web.http.port=8080 +nifi.web.https.host= +nifi.web.https.port= +nifi.web.jetty.working.directory=./work/jetty +nifi.web.jetty.threads=200 + +# security properties # +nifi.sensitive.props.key= +nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL +nifi.sensitive.props.provider=BC + +nifi.security.keystore= +nifi.security.keystoreType= +nifi.security.keystorePasswd= +nifi.security.keyPasswd= +nifi.security.truststore= +nifi.security.truststoreType= +nifi.security.truststorePasswd= +nifi.security.needClientAuth= +nifi.security.user.credential.cache.duration=24 hours +nifi.security.user.authority.provider=file-provider +nifi.security.user.login.identity.provider= +nifi.security.support.new.account.requests= +# Valid Authorities include: ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI +nifi.security.anonymous.authorities= +nifi.security.ocsp.responder.url= +nifi.security.ocsp.responder.certificate= + +# cluster common properties (cluster manager and nodes must have same values) # +nifi.cluster.protocol.heartbeat.interval=5 sec +nifi.cluster.protocol.is.secure=false +nifi.cluster.protocol.socket.timeout=30 sec +nifi.cluster.protocol.connection.handshake.timeout=45 sec +# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured # +nifi.cluster.protocol.use.multicast=false +nifi.cluster.protocol.multicast.address= +nifi.cluster.protocol.multicast.port= +nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms +nifi.cluster.protocol.multicast.service.locator.attempts=3 +nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec + +# cluster node properties (only configure for cluster nodes) # +nifi.cluster.is.node=false +nifi.cluster.node.address= +nifi.cluster.node.protocol.port= +nifi.cluster.node.protocol.threads=2 +# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx # +nifi.cluster.node.unicast.manager.address= +nifi.cluster.node.unicast.manager.protocol.port= + +# cluster manager properties (only configure for cluster manager) # +nifi.cluster.is.manager=false +nifi.cluster.manager.address= +nifi.cluster.manager.protocol.port= +nifi.cluster.manager.node.firewall.file= +nifi.cluster.manager.node.event.history.size=10 +nifi.cluster.manager.node.api.connection.timeout=30 sec +nifi.cluster.manager.node.api.read.timeout=30 sec +nifi.cluster.manager.node.api.request.threads=10 +nifi.cluster.manager.flow.retrieval.delay=5 sec +nifi.cluster.manager.protocol.threads=10 +nifi.cluster.manager.safemode.duration=0 sec + +# kerberos # +nifi.kerberos.krb5.file= + +# MiNiFi Server for Command Control +nifi.server.name=localhost +nifi.server.port=9000 +nifi.server.report.interval=1000 ms + http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/conf/nifi.properties ---------------------------------------------------------------------- diff --git a/conf/nifi.properties b/conf/nifi.properties deleted file mode 100644 index 627876f..0000000 --- a/conf/nifi.properties +++ /dev/null @@ -1,191 +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. - -# Core Properties # -nifi.version=0.6.0-SNAPSHOT -nifi.flow.configuration.file=./conf/flow.xml -nifi.flow.configuration.archive.dir=./conf/archive/ -nifi.flowcontroller.autoResumeState=true -nifi.flowcontroller.graceful.shutdown.period=10 sec -nifi.flowservice.writedelay.interval=500 ms -nifi.administrative.yield.duration=30 sec -# If a component has no work to do (is "bored"), how long should we wait before checking again for work? -nifi.bored.yield.duration=10 millis - -nifi.authority.provider.configuration.file=./conf/authority-providers.xml -nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml -nifi.templates.directory=./conf/templates -nifi.ui.banner.text= -nifi.ui.autorefresh.interval=30 sec -nifi.nar.library.directory=./lib -nifi.nar.working.directory=./work/nar/ -nifi.documentation.working.directory=./work/docs/components - -#################### -# State Management # -#################### -nifi.state.management.configuration.file=./conf/state-management.xml -# The ID of the local state provider -nifi.state.management.provider.local=local-provider -# The ID of the cluster-wide state provider. This will be ignored if NiFi is not clustered but must be populated if running in a cluster. -nifi.state.management.provider.cluster=zk-provider -# Specifies whether or not this instance of NiFi should run an embedded ZooKeeper server -nifi.state.management.embedded.zookeeper.start=false -# Properties file that provides the ZooKeeper properties to use if <nifi.state.management.embedded.zookeeper.start> is set to true -nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties - - -# H2 Settings -nifi.database.directory=./database_repository -nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE - -# FlowFile Repository -nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository -nifi.flowfile.repository.directory=./flowfile_repository -nifi.flowfile.repository.partitions=256 -nifi.flowfile.repository.checkpoint.interval=2 mins -nifi.flowfile.repository.always.sync=false - -nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager -nifi.queue.swap.threshold=20000 -nifi.swap.in.period=5 sec -nifi.swap.in.threads=1 -nifi.swap.out.period=5 sec -nifi.swap.out.threads=4 - -# Content Repository -nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository -nifi.content.claim.max.appendable.size=10 MB -nifi.content.claim.max.flow.files=100 -nifi.content.repository.directory.default=./content_repository -nifi.content.repository.archive.max.retention.period=12 hours -nifi.content.repository.archive.max.usage.percentage=50% -nifi.content.repository.archive.enabled=true -nifi.content.repository.always.sync=false -nifi.content.viewer.url=/nifi-content-viewer/ - -# Provenance Repository Properties -nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository - -# Persistent Provenance Repository Properties -nifi.provenance.repository.directory.default=./provenance_repository -nifi.provenance.repository.max.storage.time=24 hours -nifi.provenance.repository.max.storage.size=1 GB -nifi.provenance.repository.rollover.time=30 secs -nifi.provenance.repository.rollover.size=100 MB -nifi.provenance.repository.query.threads=2 -nifi.provenance.repository.index.threads=1 -nifi.provenance.repository.compress.on.rollover=true -nifi.provenance.repository.always.sync=false -nifi.provenance.repository.journal.count=16 -# Comma-separated list of fields. Fields that are not indexed will not be searchable. Valid fields are: -# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, AlternateIdentifierURI, Relationship, Details -nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, ProcessorID, Relationship -# FlowFile Attributes that should be indexed and made searchable. Some examples to consider are filename, uuid, mime.type -nifi.provenance.repository.indexed.attributes= -# Large values for the shard size will result in more Java heap usage when searching the Provenance Repository -# but should provide better performance -nifi.provenance.repository.index.shard.size=500 MB -# Indicates the maximum length that a FlowFile attribute can be when retrieving a Provenance Event from -# the repository. If the length of any attribute exceeds this value, it will be truncated when the event is retrieved. -nifi.provenance.repository.max.attribute.length=65536 - -# Volatile Provenance Respository Properties -nifi.provenance.repository.buffer.size=100000 - -# Component Status Repository -nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository -nifi.components.status.repository.buffer.size=1440 -nifi.components.status.snapshot.frequency=1 min - -# Site to Site properties -nifi.remote.input.socket.host=localhost -nifi.remote.input.socket.port=10000 -nifi.remote.input.secure=false - -# web properties # -nifi.web.war.directory=./lib -nifi.web.http.host= -nifi.web.http.port=8080 -nifi.web.https.host= -nifi.web.https.port= -nifi.web.jetty.working.directory=./work/jetty -nifi.web.jetty.threads=200 - -# security properties # -nifi.sensitive.props.key= -nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL -nifi.sensitive.props.provider=BC - -nifi.security.keystore= -nifi.security.keystoreType= -nifi.security.keystorePasswd= -nifi.security.keyPasswd= -nifi.security.truststore= -nifi.security.truststoreType= -nifi.security.truststorePasswd= -nifi.security.needClientAuth= -nifi.security.user.credential.cache.duration=24 hours -nifi.security.user.authority.provider=file-provider -nifi.security.user.login.identity.provider= -nifi.security.support.new.account.requests= -# Valid Authorities include: ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI -nifi.security.anonymous.authorities= -nifi.security.ocsp.responder.url= -nifi.security.ocsp.responder.certificate= - -# cluster common properties (cluster manager and nodes must have same values) # -nifi.cluster.protocol.heartbeat.interval=5 sec -nifi.cluster.protocol.is.secure=false -nifi.cluster.protocol.socket.timeout=30 sec -nifi.cluster.protocol.connection.handshake.timeout=45 sec -# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties must be configured # -nifi.cluster.protocol.use.multicast=false -nifi.cluster.protocol.multicast.address= -nifi.cluster.protocol.multicast.port= -nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms -nifi.cluster.protocol.multicast.service.locator.attempts=3 -nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec - -# cluster node properties (only configure for cluster nodes) # -nifi.cluster.is.node=false -nifi.cluster.node.address= -nifi.cluster.node.protocol.port= -nifi.cluster.node.protocol.threads=2 -# if multicast is not used, nifi.cluster.node.unicast.xxx must have same values as nifi.cluster.manager.xxx # -nifi.cluster.node.unicast.manager.address= -nifi.cluster.node.unicast.manager.protocol.port= - -# cluster manager properties (only configure for cluster manager) # -nifi.cluster.is.manager=false -nifi.cluster.manager.address= -nifi.cluster.manager.protocol.port= -nifi.cluster.manager.node.firewall.file= -nifi.cluster.manager.node.event.history.size=10 -nifi.cluster.manager.node.api.connection.timeout=30 sec -nifi.cluster.manager.node.api.read.timeout=30 sec -nifi.cluster.manager.node.api.request.threads=10 -nifi.cluster.manager.flow.retrieval.delay=5 sec -nifi.cluster.manager.protocol.threads=10 -nifi.cluster.manager.safemode.duration=0 sec - -# kerberos # -nifi.kerberos.krb5.file= - -# MiNiFi Server for Command Control -nifi.server.name=localhost -nifi.server.port=9000 -nifi.server.report.interval=1000 ms - http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/inc/FlowController.h ---------------------------------------------------------------------- diff --git a/inc/FlowController.h b/inc/FlowController.h index 3895096..4d85014 100644 --- a/inc/FlowController.h +++ b/inc/FlowController.h @@ -30,6 +30,7 @@ #include <set> #include <libxml/parser.h> #include <libxml/tree.h> +#include <yaml-cpp/yaml.h> #include "Configure.h" #include "Property.h" @@ -50,6 +51,23 @@ //! Default NiFi Root Group Name #define DEFAULT_ROOT_GROUP_NAME "" #define DEFAULT_FLOW_XML_FILE_NAME "conf/flow.xml" +#define DEFAULT_FLOW_YAML_FILE_NAME "conf/flow.yml" +#define CONFIG_YAML_PROCESSORS_KEY "Processors" + +enum class ConfigFormat { XML, YAML }; + +struct ProcessorConfig { + std::string name; + std::string javaClass; + std::string maxConcurrentTasks; + std::string schedulingStrategy; + std::string schedulingPeriod; + std::string penalizationPeriod; + std::string yieldPeriod; + std::string runDurationNanos; + std::vector<std::string> autoTerminatedRelationships; + std::vector<Property> properties; +}; //! FlowController Class class FlowController @@ -113,7 +131,7 @@ public: //! Life Cycle related function //! Load flow xml from disk, after that, create the root process group and its children, initialize the flows - void load(); + void load(ConfigFormat format); //! Whether the Flow Controller is start running bool isRunning(); //! Whether the Flow Controller has already been initialized (loaded flow XML) @@ -153,10 +171,10 @@ protected: uuid_t _uuid; //! FlowController Name std::string _name; - //! XML File Name - std::string _xmlFileName; + //! Configuration File Name + std::string _configurationFileName; //! NiFi property File Name - std::string _configFileName; + std::string _propertiesFileName; //! Root Process Group ProcessGroup *_root; //! MAX Timer Driven Threads @@ -200,6 +218,20 @@ private: void parseConnection(xmlDoc *doc, xmlNode *node, ProcessGroup *parent); //! Process Remote Process Group void parseRemoteProcessGroup(xmlDoc *doc, xmlNode *node, ProcessGroup *parent); + + //! Process Processor Node YAML + void parseProcessorNodeYaml(YAML::Node processorNode, ProcessGroup *parent); + //! Process Port YAML + void parsePortYaml(YAML::Node *portNode, ProcessGroup *parent, TransferDirection direction); + //! Process Root Processor Group YAML + void parseRootProcessGroupYaml(YAML::Node rootNode); + //! Process Property YAML + void parseProcessorPropertyYaml(YAML::Node *doc, YAML::Node *node, Processor *processor); + //! Process connection YAML + void parseConnectionYaml(YAML::Node *node, ProcessGroup *parent); + //! Process Remote Process Group YAML + void parseRemoteProcessGroupYaml(YAML::Node *node, ProcessGroup *parent); + // Prevent default copy constructor and assignment operation // Only support pass by reference or pointer FlowController(const FlowController &parent); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/inc/ProcessGroup.h ---------------------------------------------------------------------- diff --git a/inc/ProcessGroup.h b/inc/ProcessGroup.h index be69f2d..4dd26f8 100644 --- a/inc/ProcessGroup.h +++ b/inc/ProcessGroup.h @@ -138,6 +138,8 @@ public: void addConnection(Connection *connection); //! findProcessor based on UUID Processor *findProcessor(uuid_t uuid); + //! findProcessor based on name + Processor *findProcessor(std::string processorName); //! removeConnection void removeConnection(Connection *connection); //! update property value http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/main/MiNiFiMain.cpp ---------------------------------------------------------------------- diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp index 1ceaba5..4506af1 100644 --- a/main/MiNiFiMain.cpp +++ b/main/MiNiFiMain.cpp @@ -23,6 +23,7 @@ #include <queue> #include <map> #include <unistd.h> +#include <yaml-cpp/yaml.h> #include "Logger.h" #include "Configure.h" @@ -32,8 +33,17 @@ #define SLEEP_INTERVAL 1 //! Main thread stop wait time #define STOP_WAIT_TIME 2 +//! Default YAML location +#define DEFAULT_NIFI_CONFIG_YML "./conf/config.yml" //! Default nifi properties file path -#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/nifi.properties" +#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/minifi.properties" + +/* Define Parser Values for Configuration YAML sections */ +#define CONFIG_YAML_FLOW_CONTROLLER_KEY "Flow Controller" +#define CONFIG_YAML_PROCESSORS_KEY "Processors" +#define CONFIG_YAML_CONNECTIONS_KEY "Connections" +#define CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY "Remote Processing Groups" + //! Whether it is running static bool running = false; //! Flow Controller @@ -49,14 +59,58 @@ void sigHandler(int signal) } } -int main(int argc, char **argv) -{ +int loadYaml() { + YAML::Node flow = YAML::LoadFile("./conf/flow.yml"); + + YAML::Node flowControllerNode = flow[CONFIG_YAML_FLOW_CONTROLLER_KEY]; + YAML::Node processorsNode = flow[CONFIG_YAML_PROCESSORS_KEY]; + YAML::Node connectionsNode = flow[CONFIG_YAML_CONNECTIONS_KEY]; + YAML::Node remoteProcessingGroupNode = flow[CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY]; + + if (processorsNode) { + int numProcessors = processorsNode.size(); + if (numProcessors < 1) { + throw new std::invalid_argument("There must be at least one processor configured."); + } + + std::vector<ProcessorConfig> processorConfigs; + + if (processorsNode.IsSequence()) { + for (YAML::const_iterator iter = processorsNode.begin(); iter != processorsNode.end(); ++iter) { + ProcessorConfig procCfg; + YAML::Node procNode = iter->as<YAML::Node>(); + + procCfg.name = procNode["name"].as<std::string>(); + procCfg.javaClass = procNode["class"].as<std::string>(); + + processorConfigs.push_back(procCfg); + } + } + + Logger::getLogger()->log_info("Added %d processor configs.", processorConfigs.size()); + } else { + throw new std::invalid_argument( + "Cannot instantiate a MiNiFi instance without a defined Processors configuration node."); + } + + return 0; +} + +int main(int argc, char **argv) { + Logger *logger = Logger::getLogger(); - logger->setLogLevel(trace); + logger->setLogLevel(info); logger->log_info("MiNiFi started"); - if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, sigHandler) == SIG_ERR) - { + try { + logger->log_info("Performing parsing of specified config.yml"); + loadYaml(); + } catch (...) { + std::cout << "Could not load YAML due to improper configuration."; + return 1; + } + + if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, sigHandler) == SIG_ERR || signal(SIGPIPE, SIG_IGN) == SIG_ERR) { logger->log_error("Can not install signal handler"); return -1; } @@ -64,10 +118,10 @@ int main(int argc, char **argv) Configure *configure = Configure::getConfigure(); configure->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE); - controller = new FlowController();; + controller = new FlowController(); - // Load flow XML - controller->load(); + // Load flow from specified configuration file + controller->load(ConfigFormat::YAML); // Start Processing the flow controller->start(); running = true;
