MINIFI-6: More infra works
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/7956696e Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/7956696e Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/7956696e Branch: refs/heads/master Commit: 7956696ef23ad38b541af9db9e0b82b48dbea9e7 Parents: 86d03de Author: Bin Qiu <[email protected]> Authored: Tue Jun 7 07:26:07 2016 -0700 Committer: Aldrin Piri <[email protected]> Committed: Thu Jul 21 14:30:39 2016 -0400 ---------------------------------------------------------------------- Makefile | 46 +- conf/flow.xml | 130 + conf/flowTest.xml | 172 + conf/nifi.properties | 185 + inc/Configure.h | 3 + inc/Connection.h | 2 + inc/FlowControlProtocol.h | 332 + inc/FlowController.h | 14 +- inc/LogAttribute.h | 26 + inc/Logger.h | 6 +- inc/ProcessGroup.h | 2 + inc/ProcessSession.h | 2 + inc/Processor.h | 3 + inc/Property.h | 20 + main/MiNiFiMain.cpp | 39 +- src/Configure.cpp | 4 + src/Connection.cpp | 14 + src/FlowControlProtocol.cpp | 540 + src/FlowController.cpp | 50 +- src/FlowFileRecord.cpp | 4 + src/LogAttribute.cpp | 25 + src/ProcessGroup.cpp | 39 + src/ProcessSession.cpp | 97 +- src/Processor.cpp | 11 +- src/SchedulingAgent.cpp | 1 + src/TimerDrivenSchedulingAgent.cpp | 3 +- target/conf/nifi.properties | 6 + test/Server.cpp | 607 + thirdparty/libxml2/AUTHORS | 5 + thirdparty/libxml2/ChangeLog | 19678 +++++++ thirdparty/libxml2/Copyright | 23 + thirdparty/libxml2/DOCBparser.c | 305 + thirdparty/libxml2/HTMLparser.c | 7121 +++ thirdparty/libxml2/HTMLtree.c | 1281 + thirdparty/libxml2/INSTALL | 370 + thirdparty/libxml2/Makefile.am | 1279 + thirdparty/libxml2/Makefile.in | 2935 + thirdparty/libxml2/Makefile.tests | 41 + thirdparty/libxml2/NEWS | 2642 + thirdparty/libxml2/README | 39 + thirdparty/libxml2/README.tests | 39 + thirdparty/libxml2/SAX.c | 180 + thirdparty/libxml2/SAX2.c | 3045 + thirdparty/libxml2/TODO | 278 + thirdparty/libxml2/TODO_SCHEMAS | 31 + thirdparty/libxml2/VxWorks/Makefile | 68 + thirdparty/libxml2/VxWorks/README | 86 + thirdparty/libxml2/VxWorks/build.sh | 85 + thirdparty/libxml2/acinclude.m4 | 28 + thirdparty/libxml2/aclocal.m4 | 1373 + thirdparty/libxml2/bakefile/Bakefiles.bkgen | 15 + thirdparty/libxml2/bakefile/Readme.txt | 92 + thirdparty/libxml2/bakefile/libxml2.bkl | 749 + thirdparty/libxml2/buf.c | 1345 + thirdparty/libxml2/buf.h | 72 + thirdparty/libxml2/c14n.c | 2238 + thirdparty/libxml2/catalog.c | 3825 ++ thirdparty/libxml2/check-relaxng-test-suite.py | 394 + thirdparty/libxml2/check-relaxng-test-suite2.py | 418 + thirdparty/libxml2/check-xinclude-test-suite.py | 221 + thirdparty/libxml2/check-xml-test-suite.py | 409 + thirdparty/libxml2/check-xsddata-test-suite.py | 420 + thirdparty/libxml2/chvalid.c | 336 + thirdparty/libxml2/compile | 347 + thirdparty/libxml2/config.guess | 1421 + thirdparty/libxml2/config.h.in | 332 + thirdparty/libxml2/config.sub | 1807 + thirdparty/libxml2/configure | 18613 ++++++ thirdparty/libxml2/configure.ac | 1667 + thirdparty/libxml2/dbgen.pl | 43 + thirdparty/libxml2/dbgenattr.pl | 42 + thirdparty/libxml2/debugXML.c | 3428 ++ thirdparty/libxml2/depcomp | 791 + thirdparty/libxml2/dict.c | 1262 + thirdparty/libxml2/doc/APIchunk0.html | 301 + thirdparty/libxml2/doc/APIchunk1.html | 382 + thirdparty/libxml2/doc/APIchunk10.html | 675 + thirdparty/libxml2/doc/APIchunk11.html | 339 + thirdparty/libxml2/doc/APIchunk12.html | 927 + thirdparty/libxml2/doc/APIchunk13.html | 681 + thirdparty/libxml2/doc/APIchunk14.html | 470 + thirdparty/libxml2/doc/APIchunk15.html | 454 + thirdparty/libxml2/doc/APIchunk16.html | 375 + thirdparty/libxml2/doc/APIchunk17.html | 580 + thirdparty/libxml2/doc/APIchunk18.html | 457 + thirdparty/libxml2/doc/APIchunk19.html | 373 + thirdparty/libxml2/doc/APIchunk2.html | 416 + thirdparty/libxml2/doc/APIchunk20.html | 330 + thirdparty/libxml2/doc/APIchunk21.html | 399 + thirdparty/libxml2/doc/APIchunk22.html | 599 + thirdparty/libxml2/doc/APIchunk23.html | 668 + thirdparty/libxml2/doc/APIchunk24.html | 1001 + thirdparty/libxml2/doc/APIchunk25.html | 451 + thirdparty/libxml2/doc/APIchunk26.html | 332 + thirdparty/libxml2/doc/APIchunk27.html | 349 + thirdparty/libxml2/doc/APIchunk28.html | 565 + thirdparty/libxml2/doc/APIchunk29.html | 131 + thirdparty/libxml2/doc/APIchunk3.html | 360 + thirdparty/libxml2/doc/APIchunk4.html | 351 + thirdparty/libxml2/doc/APIchunk5.html | 293 + thirdparty/libxml2/doc/APIchunk6.html | 294 + thirdparty/libxml2/doc/APIchunk7.html | 330 + thirdparty/libxml2/doc/APIchunk8.html | 307 + thirdparty/libxml2/doc/APIchunk9.html | 273 + thirdparty/libxml2/doc/APIconstructors.html | 595 + thirdparty/libxml2/doc/APIfiles.html | 3591 ++ thirdparty/libxml2/doc/APIfunctions.html | 2347 + thirdparty/libxml2/doc/APIsymbols.html | 3587 ++ thirdparty/libxml2/doc/ChangeLog.xsl | 117 + thirdparty/libxml2/doc/DOM.gif | Bin 0 -> 3166 bytes thirdparty/libxml2/doc/DOM.html | 17 + thirdparty/libxml2/doc/FAQ.html | 299 + thirdparty/libxml2/doc/Libxml2-Logo-180x168.gif | Bin 0 -> 8195 bytes thirdparty/libxml2/doc/Libxml2-Logo-90x34.gif | Bin 0 -> 3070 bytes thirdparty/libxml2/doc/Makefile.am | 351 + thirdparty/libxml2/doc/Makefile.in | 1157 + thirdparty/libxml2/doc/README.docs | 24 + thirdparty/libxml2/doc/XMLinfo.html | 35 + thirdparty/libxml2/doc/XSLT.html | 13 + thirdparty/libxml2/doc/api.xsl | 394 + thirdparty/libxml2/doc/apibuild.py | 2151 + thirdparty/libxml2/doc/architecture.html | 24 + thirdparty/libxml2/doc/bugs.html | 70 + thirdparty/libxml2/doc/catalog.gif | Bin 0 -> 6105 bytes thirdparty/libxml2/doc/catalog.html | 261 + thirdparty/libxml2/doc/checkapisym.xsl | 48 + thirdparty/libxml2/doc/contribs.html | 41 + thirdparty/libxml2/doc/devhelp/Makefile.am | 79 + thirdparty/libxml2/doc/devhelp/Makefile.in | 681 + thirdparty/libxml2/doc/devhelp/devhelp.xsl | 127 + thirdparty/libxml2/doc/devhelp/general.html | 38 + thirdparty/libxml2/doc/devhelp/home.png | Bin 0 -> 654 bytes thirdparty/libxml2/doc/devhelp/html.xsl | 602 + thirdparty/libxml2/doc/devhelp/index.html | 67 + thirdparty/libxml2/doc/devhelp/left.png | Bin 0 -> 459 bytes .../libxml2/doc/devhelp/libxml2-DOCBparser.html | 138 + .../libxml2/doc/devhelp/libxml2-HTMLparser.html | 373 + .../libxml2/doc/devhelp/libxml2-HTMLtree.html | 172 + thirdparty/libxml2/doc/devhelp/libxml2-SAX.html | 243 + .../libxml2/doc/devhelp/libxml2-SAX2.html | 247 + .../libxml2/doc/devhelp/libxml2-c14n.html | 91 + .../libxml2/doc/devhelp/libxml2-catalog.html | 278 + .../libxml2/doc/devhelp/libxml2-chvalid.html | 241 + .../libxml2/doc/devhelp/libxml2-debugXML.html | 225 + .../libxml2/doc/devhelp/libxml2-dict.html | 134 + .../libxml2/doc/devhelp/libxml2-encoding.html | 218 + .../libxml2/doc/devhelp/libxml2-entities.html | 166 + .../libxml2/doc/devhelp/libxml2-globals.html | 383 + .../libxml2/doc/devhelp/libxml2-hash.html | 214 + .../libxml2/doc/devhelp/libxml2-list.html | 226 + .../libxml2/doc/devhelp/libxml2-nanoftp.html | 187 + .../libxml2/doc/devhelp/libxml2-nanohttp.html | 142 + .../libxml2/doc/devhelp/libxml2-parser.html | 766 + .../doc/devhelp/libxml2-parserInternals.html | 688 + .../libxml2/doc/devhelp/libxml2-pattern.html | 166 + .../libxml2/doc/devhelp/libxml2-relaxng.html | 278 + .../doc/devhelp/libxml2-schemasInternals.html | 860 + .../libxml2/doc/devhelp/libxml2-schematron.html | 166 + .../libxml2/doc/devhelp/libxml2-threads.html | 161 + .../libxml2/doc/devhelp/libxml2-tree.html | 1598 + thirdparty/libxml2/doc/devhelp/libxml2-uri.html | 154 + .../libxml2/doc/devhelp/libxml2-valid.html | 528 + .../libxml2/doc/devhelp/libxml2-xinclude.html | 169 + .../libxml2/doc/devhelp/libxml2-xlink.html | 160 + .../libxml2/doc/devhelp/libxml2-xmlIO.html | 347 + .../doc/devhelp/libxml2-xmlautomata.html | 176 + .../libxml2/doc/devhelp/libxml2-xmlerror.html | 953 + .../libxml2/doc/devhelp/libxml2-xmlexports.html | 87 + .../libxml2/doc/devhelp/libxml2-xmlmemory.html | 186 + .../libxml2/doc/devhelp/libxml2-xmlmodule.html | 97 + .../libxml2/doc/devhelp/libxml2-xmlreader.html | 565 + .../libxml2/doc/devhelp/libxml2-xmlregexp.html | 280 + .../libxml2/doc/devhelp/libxml2-xmlsave.html | 133 + .../libxml2/doc/devhelp/libxml2-xmlschemas.html | 314 + .../doc/devhelp/libxml2-xmlschemastypes.html | 237 + .../libxml2/doc/devhelp/libxml2-xmlstring.html | 217 + .../libxml2/doc/devhelp/libxml2-xmlunicode.html | 887 + .../libxml2/doc/devhelp/libxml2-xmlversion.html | 292 + .../libxml2/doc/devhelp/libxml2-xmlwriter.html | 479 + .../libxml2/doc/devhelp/libxml2-xpath.html | 542 + .../doc/devhelp/libxml2-xpathInternals.html | 787 + .../libxml2/doc/devhelp/libxml2-xpointer.html | 171 + thirdparty/libxml2/doc/devhelp/libxml2.devhelp | 3574 ++ thirdparty/libxml2/doc/devhelp/right.png | Bin 0 -> 472 bytes thirdparty/libxml2/doc/devhelp/style.css | 66 + thirdparty/libxml2/doc/devhelp/up.png | Bin 0 -> 406 bytes thirdparty/libxml2/doc/docs.html | 34 + thirdparty/libxml2/doc/downloads.html | 40 + thirdparty/libxml2/doc/elfgcchack.xsl | 160 + thirdparty/libxml2/doc/encoding.html | 217 + thirdparty/libxml2/doc/entities.html | 64 + thirdparty/libxml2/doc/example.html | 187 + thirdparty/libxml2/doc/examples/Makefile.am | 135 + thirdparty/libxml2/doc/examples/Makefile.in | 976 + thirdparty/libxml2/doc/examples/examples.xml | 751 + thirdparty/libxml2/doc/examples/examples.xsl | 174 + thirdparty/libxml2/doc/examples/index.html | 14 + thirdparty/libxml2/doc/examples/index.py | 314 + thirdparty/libxml2/doc/examples/io1.c | 166 + thirdparty/libxml2/doc/examples/io1.res | 5 + thirdparty/libxml2/doc/examples/io2.c | 58 + thirdparty/libxml2/doc/examples/io2.res | 2 + thirdparty/libxml2/doc/examples/parse1.c | 56 + thirdparty/libxml2/doc/examples/parse2.c | 72 + thirdparty/libxml2/doc/examples/parse3.c | 60 + thirdparty/libxml2/doc/examples/parse4.c | 143 + thirdparty/libxml2/doc/examples/reader1.c | 107 + thirdparty/libxml2/doc/examples/reader1.res | 14 + thirdparty/libxml2/doc/examples/reader2.c | 122 + thirdparty/libxml2/doc/examples/reader3.c | 120 + thirdparty/libxml2/doc/examples/reader3.res | 13 + thirdparty/libxml2/doc/examples/reader4.c | 122 + thirdparty/libxml2/doc/examples/reader4.res | 3 + thirdparty/libxml2/doc/examples/test1.xml | 1 + thirdparty/libxml2/doc/examples/test2.xml | 13 + thirdparty/libxml2/doc/examples/test3.xml | 39 + thirdparty/libxml2/doc/examples/testWriter.c | 1198 + thirdparty/libxml2/doc/examples/tree1.c | 94 + thirdparty/libxml2/doc/examples/tree1.res | 4 + thirdparty/libxml2/doc/examples/tree2.c | 118 + thirdparty/libxml2/doc/examples/tree2.res | 18 + thirdparty/libxml2/doc/examples/tst.xml | 7 + thirdparty/libxml2/doc/examples/writer.xml | 2 + thirdparty/libxml2/doc/examples/xpath1.c | 250 + thirdparty/libxml2/doc/examples/xpath1.res | 5 + thirdparty/libxml2/doc/examples/xpath2.c | 190 + thirdparty/libxml2/doc/examples/xpath2.res | 30 + thirdparty/libxml2/doc/guidelines.html | 374 + thirdparty/libxml2/doc/help.html | 26 + thirdparty/libxml2/doc/html/book1.html | 13 + thirdparty/libxml2/doc/html/home.png | Bin 0 -> 654 bytes thirdparty/libxml2/doc/html/index.html | 13 + thirdparty/libxml2/doc/html/left.png | Bin 0 -> 459 bytes .../libxml2/doc/html/libxml-DOCBparser.html | 51 + .../libxml2/doc/html/libxml-HTMLparser.html | 184 + .../libxml2/doc/html/libxml-HTMLtree.html | 73 + thirdparty/libxml2/doc/html/libxml-SAX.html | 125 + thirdparty/libxml2/doc/html/libxml-SAX2.html | 128 + thirdparty/libxml2/doc/html/libxml-c14n.html | 38 + thirdparty/libxml2/doc/html/libxml-catalog.html | 142 + thirdparty/libxml2/doc/html/libxml-chvalid.html | 72 + .../libxml2/doc/html/libxml-debugXML.html | 120 + thirdparty/libxml2/doc/html/libxml-dict.html | 58 + .../libxml2/doc/html/libxml-encoding.html | 124 + .../libxml2/doc/html/libxml-entities.html | 79 + thirdparty/libxml2/doc/html/libxml-globals.html | 152 + thirdparty/libxml2/doc/html/libxml-hash.html | 116 + thirdparty/libxml2/doc/html/libxml-lib.html | 13 + thirdparty/libxml2/doc/html/libxml-list.html | 120 + thirdparty/libxml2/doc/html/libxml-nanoftp.html | 94 + .../libxml2/doc/html/libxml-nanohttp.html | 65 + thirdparty/libxml2/doc/html/libxml-parser.html | 559 + .../doc/html/libxml-parserInternals.html | 322 + thirdparty/libxml2/doc/html/libxml-pattern.html | 76 + thirdparty/libxml2/doc/html/libxml-relaxng.html | 162 + .../doc/html/libxml-schemasInternals.html | 373 + .../libxml2/doc/html/libxml-schematron.html | 81 + thirdparty/libxml2/doc/html/libxml-threads.html | 72 + thirdparty/libxml2/doc/html/libxml-tree.html | 991 + thirdparty/libxml2/doc/html/libxml-uri.html | 73 + thirdparty/libxml2/doc/html/libxml-valid.html | 289 + .../libxml2/doc/html/libxml-xinclude.html | 59 + thirdparty/libxml2/doc/html/libxml-xlink.html | 82 + thirdparty/libxml2/doc/html/libxml-xmlIO.html | 212 + .../libxml2/doc/html/libxml-xmlautomata.html | 85 + .../libxml2/doc/html/libxml-xmlerror.html | 865 + .../libxml2/doc/html/libxml-xmlexports.html | 20 + .../libxml2/doc/html/libxml-xmlmemory.html | 107 + .../libxml2/doc/html/libxml-xmlmodule.html | 38 + .../libxml2/doc/html/libxml-xmlreader.html | 330 + .../libxml2/doc/html/libxml-xmlregexp.html | 143 + thirdparty/libxml2/doc/html/libxml-xmlsave.html | 60 + .../libxml2/doc/html/libxml-xmlschemas.html | 185 + .../doc/html/libxml-xmlschemastypes.html | 123 + .../libxml2/doc/html/libxml-xmlstring.html | 108 + .../libxml2/doc/html/libxml-xmlunicode.html | 512 + .../libxml2/doc/html/libxml-xmlversion.html | 63 + .../libxml2/doc/html/libxml-xmlwriter.html | 261 + thirdparty/libxml2/doc/html/libxml-xpath.html | 316 + .../libxml2/doc/html/libxml-xpathInternals.html | 394 + .../libxml2/doc/html/libxml-xpointer.html | 83 + thirdparty/libxml2/doc/html/libxml-xzlib.html | 16 + thirdparty/libxml2/doc/html/right.png | Bin 0 -> 472 bytes thirdparty/libxml2/doc/html/up.png | Bin 0 -> 406 bytes thirdparty/libxml2/doc/index.html | 77 + thirdparty/libxml2/doc/index.py | 1258 + thirdparty/libxml2/doc/interface.html | 59 + thirdparty/libxml2/doc/intro.html | 32 + thirdparty/libxml2/doc/library.html | 158 + thirdparty/libxml2/doc/libxml.gif | Bin 0 -> 7692 bytes thirdparty/libxml2/doc/libxml2-api.xml | 18510 ++++++ thirdparty/libxml2/doc/libxml2.xsa | 191 + thirdparty/libxml2/doc/namespaces.html | 50 + thirdparty/libxml2/doc/newapi.xsl | 766 + thirdparty/libxml2/doc/news.html | 2439 + thirdparty/libxml2/doc/news.xsl | 44 + thirdparty/libxml2/doc/python.html | 254 + thirdparty/libxml2/doc/redhat.gif | Bin 0 -> 697 bytes thirdparty/libxml2/doc/search.php | 477 + thirdparty/libxml2/doc/searches.html | 61 + thirdparty/libxml2/doc/searches.xsl | 97 + thirdparty/libxml2/doc/site.xsl | 741 + thirdparty/libxml2/doc/smallfootonly.gif | Bin 0 -> 2772 bytes thirdparty/libxml2/doc/structure.gif | Bin 0 -> 5559 bytes thirdparty/libxml2/doc/symbols.xml | 1768 + thirdparty/libxml2/doc/syms.xsl | 99 + thirdparty/libxml2/doc/threads.html | 30 + thirdparty/libxml2/doc/tree.html | 53 + thirdparty/libxml2/doc/tutorial/apa.html | 8 + thirdparty/libxml2/doc/tutorial/apb.html | 14 + thirdparty/libxml2/doc/tutorial/apc.html | 82 + thirdparty/libxml2/doc/tutorial/apd.html | 76 + thirdparty/libxml2/doc/tutorial/ape.html | 78 + thirdparty/libxml2/doc/tutorial/apf.html | 67 + thirdparty/libxml2/doc/tutorial/apg.html | 75 + thirdparty/libxml2/doc/tutorial/aph.html | 76 + thirdparty/libxml2/doc/tutorial/api.html | 4 + thirdparty/libxml2/doc/tutorial/ar01s02.html | 14 + thirdparty/libxml2/doc/tutorial/ar01s03.html | 47 + thirdparty/libxml2/doc/tutorial/ar01s04.html | 54 + thirdparty/libxml2/doc/tutorial/ar01s05.html | 55 + thirdparty/libxml2/doc/tutorial/ar01s06.html | 35 + thirdparty/libxml2/doc/tutorial/ar01s07.html | 30 + thirdparty/libxml2/doc/tutorial/ar01s08.html | 38 + thirdparty/libxml2/doc/tutorial/ar01s09.html | 63 + .../libxml2/doc/tutorial/images/blank.png | Bin 0 -> 374 bytes .../libxml2/doc/tutorial/images/callouts/1.png | Bin 0 -> 329 bytes .../libxml2/doc/tutorial/images/callouts/10.png | Bin 0 -> 361 bytes .../libxml2/doc/tutorial/images/callouts/2.png | Bin 0 -> 353 bytes .../libxml2/doc/tutorial/images/callouts/3.png | Bin 0 -> 350 bytes .../libxml2/doc/tutorial/images/callouts/4.png | Bin 0 -> 345 bytes .../libxml2/doc/tutorial/images/callouts/5.png | Bin 0 -> 348 bytes .../libxml2/doc/tutorial/images/callouts/6.png | Bin 0 -> 355 bytes .../libxml2/doc/tutorial/images/callouts/7.png | Bin 0 -> 344 bytes .../libxml2/doc/tutorial/images/callouts/8.png | Bin 0 -> 357 bytes .../libxml2/doc/tutorial/images/callouts/9.png | Bin 0 -> 357 bytes .../libxml2/doc/tutorial/images/caution.png | Bin 0 -> 1250 bytes .../libxml2/doc/tutorial/images/draft.png | Bin 0 -> 17454 bytes thirdparty/libxml2/doc/tutorial/images/home.png | Bin 0 -> 1156 bytes .../libxml2/doc/tutorial/images/important.png | Bin 0 -> 722 bytes thirdparty/libxml2/doc/tutorial/images/next.png | Bin 0 -> 1150 bytes thirdparty/libxml2/doc/tutorial/images/note.png | Bin 0 -> 490 bytes thirdparty/libxml2/doc/tutorial/images/prev.png | Bin 0 -> 1132 bytes thirdparty/libxml2/doc/tutorial/images/tip.png | Bin 0 -> 449 bytes .../libxml2/doc/tutorial/images/toc-blank.png | Bin 0 -> 318 bytes .../libxml2/doc/tutorial/images/toc-minus.png | Bin 0 -> 259 bytes .../libxml2/doc/tutorial/images/toc-plus.png | Bin 0 -> 264 bytes thirdparty/libxml2/doc/tutorial/images/up.png | Bin 0 -> 1111 bytes .../libxml2/doc/tutorial/images/warning.png | Bin 0 -> 1241 bytes .../libxml2/doc/tutorial/includeaddattribute.c | 64 + .../libxml2/doc/tutorial/includeaddkeyword.c | 75 + .../libxml2/doc/tutorial/includeconvert.c | 73 + .../libxml2/doc/tutorial/includegetattribute.c | 72 + .../libxml2/doc/tutorial/includekeyword.c | 79 + thirdparty/libxml2/doc/tutorial/includexpath.c | 74 + thirdparty/libxml2/doc/tutorial/index.html | 14 + thirdparty/libxml2/doc/tutorial/ix01.html | 1 + thirdparty/libxml2/doc/tutorial/xmltutorial.pdf | 1336 + thirdparty/libxml2/doc/upgrade.html | 112 + thirdparty/libxml2/doc/w3c.png | Bin 0 -> 2028 bytes thirdparty/libxml2/doc/wiki.xsl | 589 + thirdparty/libxml2/doc/xml.html | 6068 ++ thirdparty/libxml2/doc/xmlcatalog.1 | 340 + thirdparty/libxml2/doc/xmlcatalog_man.html | 101 + thirdparty/libxml2/doc/xmlcatalog_man.xml | 450 + thirdparty/libxml2/doc/xmldtd.html | 107 + thirdparty/libxml2/doc/xmlio.html | 141 + thirdparty/libxml2/doc/xmllint.1 | 647 + thirdparty/libxml2/doc/xmllint.html | 175 + thirdparty/libxml2/doc/xmllint.xml | 930 + thirdparty/libxml2/doc/xmlmem.html | 122 + thirdparty/libxml2/doc/xmlreader.html | 475 + thirdparty/libxml2/doc/xsa.xsl | 54 + thirdparty/libxml2/elfgcchack.h | 17808 ++++++ thirdparty/libxml2/enc.h | 32 + thirdparty/libxml2/encoding.c | 4085 ++ thirdparty/libxml2/entities.c | 1105 + thirdparty/libxml2/error.c | 998 + thirdparty/libxml2/example/Makefile.am | 7 + thirdparty/libxml2/example/Makefile.in | 704 + thirdparty/libxml2/example/gjobread.c | 309 + thirdparty/libxml2/example/gjobs.xml | 57 + thirdparty/libxml2/genUnicode.py | 478 + thirdparty/libxml2/gentest.py | 963 + thirdparty/libxml2/globals.c | 1114 + thirdparty/libxml2/hash.c | 1124 + thirdparty/libxml2/include/Makefile.am | 5 + thirdparty/libxml2/include/Makefile.in | 731 + thirdparty/libxml2/include/libxml/DOCBparser.h | 96 + thirdparty/libxml2/include/libxml/HTMLparser.h | 306 + thirdparty/libxml2/include/libxml/HTMLtree.h | 147 + thirdparty/libxml2/include/libxml/Makefile.am | 54 + thirdparty/libxml2/include/libxml/Makefile.in | 722 + thirdparty/libxml2/include/libxml/SAX.h | 173 + thirdparty/libxml2/include/libxml/SAX2.h | 178 + thirdparty/libxml2/include/libxml/c14n.h | 126 + thirdparty/libxml2/include/libxml/catalog.h | 182 + thirdparty/libxml2/include/libxml/chvalid.h | 230 + thirdparty/libxml2/include/libxml/debugXML.h | 217 + thirdparty/libxml2/include/libxml/dict.h | 80 + thirdparty/libxml2/include/libxml/encoding.h | 240 + thirdparty/libxml2/include/libxml/entities.h | 151 + thirdparty/libxml2/include/libxml/globals.h | 509 + thirdparty/libxml2/include/libxml/hash.h | 233 + thirdparty/libxml2/include/libxml/list.h | 137 + thirdparty/libxml2/include/libxml/nanoftp.h | 163 + thirdparty/libxml2/include/libxml/nanohttp.h | 81 + thirdparty/libxml2/include/libxml/parser.h | 1241 + .../libxml2/include/libxml/parserInternals.h | 644 + thirdparty/libxml2/include/libxml/pattern.h | 100 + thirdparty/libxml2/include/libxml/relaxng.h | 217 + .../libxml2/include/libxml/schemasInternals.h | 958 + thirdparty/libxml2/include/libxml/schematron.h | 142 + thirdparty/libxml2/include/libxml/threads.h | 84 + thirdparty/libxml2/include/libxml/tree.h | 1311 + thirdparty/libxml2/include/libxml/uri.h | 94 + thirdparty/libxml2/include/libxml/valid.h | 458 + thirdparty/libxml2/include/libxml/xinclude.h | 129 + thirdparty/libxml2/include/libxml/xlink.h | 189 + thirdparty/libxml2/include/libxml/xmlIO.h | 366 + thirdparty/libxml2/include/libxml/xmlautomata.h | 146 + thirdparty/libxml2/include/libxml/xmlerror.h | 945 + thirdparty/libxml2/include/libxml/xmlexports.h | 162 + thirdparty/libxml2/include/libxml/xmlmemory.h | 224 + thirdparty/libxml2/include/libxml/xmlmodule.h | 57 + thirdparty/libxml2/include/libxml/xmlreader.h | 428 + thirdparty/libxml2/include/libxml/xmlregexp.h | 222 + thirdparty/libxml2/include/libxml/xmlsave.h | 88 + thirdparty/libxml2/include/libxml/xmlschemas.h | 246 + .../libxml2/include/libxml/xmlschemastypes.h | 151 + thirdparty/libxml2/include/libxml/xmlstring.h | 140 + thirdparty/libxml2/include/libxml/xmlunicode.h | 202 + .../libxml2/include/libxml/xmlversion.h.in | 489 + thirdparty/libxml2/include/libxml/xmlwriter.h | 488 + thirdparty/libxml2/include/libxml/xpath.h | 557 + .../libxml2/include/libxml/xpathInternals.h | 632 + thirdparty/libxml2/include/libxml/xpointer.h | 114 + thirdparty/libxml2/include/win32config.h | 128 + thirdparty/libxml2/include/wsockcompat.h | 86 + thirdparty/libxml2/install-sh | 501 + thirdparty/libxml2/legacy.c | 1343 + thirdparty/libxml2/libxml-2.0-uninstalled.pc.in | 12 + thirdparty/libxml2/libxml-2.0.pc.in | 13 + thirdparty/libxml2/libxml.3 | 71 + thirdparty/libxml2/libxml.h | 112 + thirdparty/libxml2/libxml.m4 | 188 + thirdparty/libxml2/libxml.spec.in | 199 + thirdparty/libxml2/libxml2-config.cmake.in | 50 + thirdparty/libxml2/libxml2.syms | 2281 + thirdparty/libxml2/list.c | 779 + thirdparty/libxml2/ltmain.sh | 11147 ++++ thirdparty/libxml2/m4/libtool.m4 | 8372 +++ thirdparty/libxml2/m4/ltoptions.m4 | 437 + thirdparty/libxml2/m4/ltsugar.m4 | 124 + thirdparty/libxml2/m4/ltversion.m4 | 23 + thirdparty/libxml2/m4/lt~obsolete.m4 | 99 + thirdparty/libxml2/macos/README | 8 + .../libxml2/macos/libxml2.mcp.xml.sit.hqx | 1 + thirdparty/libxml2/macos/src/XMLTestPrefix.h | 1 + thirdparty/libxml2/macos/src/XMLTestPrefix2.h | 1 + thirdparty/libxml2/macos/src/config-mac.h | 192 + .../libxml2/macos/src/libxml2_GUSIConfig.cp | 1 + thirdparty/libxml2/macos/src/macos_main.c | 1 + thirdparty/libxml2/missing | 215 + thirdparty/libxml2/nanoftp.c | 2121 + thirdparty/libxml2/nanohttp.c | 1890 + thirdparty/libxml2/os400/README400 | 214 + thirdparty/libxml2/os400/config.h.in | 345 + thirdparty/libxml2/os400/dlfcn/dlfcn.c | 1213 + thirdparty/libxml2/os400/dlfcn/dlfcn.h | 32 + thirdparty/libxml2/os400/iconv/README.iconv | 47 + .../libxml2/os400/iconv/bldcsndfa/bldcsndfa.c | 1953 + .../os400/iconv/bldcsndfa/ccsid_mibenum.dtd | 15 + .../os400/iconv/bldcsndfa/ccsid_mibenum.xml | 270 + .../os400/iconv/bldcsndfa/character-sets.xhtml | 3077 + thirdparty/libxml2/os400/iconv/ianatables.c | 4609 ++ thirdparty/libxml2/os400/iconv/iconv.c | 154 + thirdparty/libxml2/os400/iconv/iconv.h | 40 + thirdparty/libxml2/os400/initscript.sh | 290 + .../libxml2/os400/libxmlrpg/DOCBparser.rpgle | 116 + .../libxml2/os400/libxmlrpg/HTMLparser.rpgle | 404 + .../libxml2/os400/libxmlrpg/HTMLtree.rpgle | 166 + thirdparty/libxml2/os400/libxmlrpg/SAX.rpgle | 207 + thirdparty/libxml2/os400/libxmlrpg/SAX2.rpgle | 248 + thirdparty/libxml2/os400/libxmlrpg/c14n.rpgle | 119 + .../libxml2/os400/libxmlrpg/catalog.rpgle | 235 + .../libxml2/os400/libxmlrpg/chvalid.rpgle | 98 + .../libxml2/os400/libxmlrpg/debugXML.rpgle | 241 + thirdparty/libxml2/os400/libxmlrpg/dict.rpgle | 81 + .../libxml2/os400/libxmlrpg/encoding.rpgle | 274 + .../libxml2/os400/libxmlrpg/entities.rpgle | 174 + .../libxml2/os400/libxmlrpg/globals.rpgle | 557 + thirdparty/libxml2/os400/libxmlrpg/hash.rpgle | 231 + thirdparty/libxml2/os400/libxmlrpg/list.rpgle | 168 + .../libxml2/os400/libxmlrpg/nanoftp.rpgle | 156 + .../libxml2/os400/libxmlrpg/nanohttp.rpgle | 103 + thirdparty/libxml2/os400/libxmlrpg/parser.rpgle | 1410 + .../os400/libxmlrpg/parserInternals.rpgle | 575 + .../libxml2/os400/libxmlrpg/pattern.rpgle | 117 + .../libxml2/os400/libxmlrpg/relaxng.rpgle | 297 + .../os400/libxmlrpg/schemasInternals.rpgle | 1137 + .../libxml2/os400/libxmlrpg/schematron.rpgle | 195 + .../libxml2/os400/libxmlrpg/threads.rpgle | 70 + .../libxml2/os400/libxmlrpg/transcode.rpgle | 71 + thirdparty/libxml2/os400/libxmlrpg/tree.rpgle | 1634 + thirdparty/libxml2/os400/libxmlrpg/uri.rpgle | 100 + thirdparty/libxml2/os400/libxmlrpg/valid.rpgle | 575 + .../libxml2/os400/libxmlrpg/xinclude.rpgle | 147 + thirdparty/libxml2/os400/libxmlrpg/xlink.rpgle | 164 + thirdparty/libxml2/os400/libxmlrpg/xmlIO.rpgle | 443 + .../libxml2/os400/libxmlrpg/xmlTypesC.rpgle | 24 + .../libxml2/os400/libxmlrpg/xmlautomata.rpgle | 179 + .../libxml2/os400/libxmlrpg/xmlerror.rpgle | 1681 + .../libxml2/os400/libxmlrpg/xmlexports.rpgle | 15 + .../libxml2/os400/libxmlrpg/xmlmemory.rpgle | 240 + .../libxml2/os400/libxmlrpg/xmlmodule.rpgle | 51 + .../libxml2/os400/libxmlrpg/xmlreader.rpgle | 621 + .../libxml2/os400/libxmlrpg/xmlregexp.rpgle | 246 + .../libxml2/os400/libxmlrpg/xmlsave.rpgle | 99 + .../libxml2/os400/libxmlrpg/xmlschemas.rpgle | 318 + .../os400/libxmlrpg/xmlschemastypes.rpgle | 237 + .../libxml2/os400/libxmlrpg/xmlstdarg.rpgle | 34 + .../libxml2/os400/libxmlrpg/xmlstring.rpgle | 164 + .../libxml2/os400/libxmlrpg/xmlunicode.rpgle | 668 + .../libxml2/os400/libxmlrpg/xmlversion.rpgle.in | 352 + .../libxml2/os400/libxmlrpg/xmlwriter.rpgle | 725 + thirdparty/libxml2/os400/libxmlrpg/xpath.rpgle | 651 + .../os400/libxmlrpg/xpathInternals.rpgle | 672 + .../libxml2/os400/libxmlrpg/xpointer.rpgle | 157 + thirdparty/libxml2/os400/make-bldcsndfa.sh | 43 + thirdparty/libxml2/os400/make-include.sh | 81 + thirdparty/libxml2/os400/make-rpg.sh | 100 + thirdparty/libxml2/os400/make-src.sh | 241 + thirdparty/libxml2/os400/make.sh | 84 + thirdparty/libxml2/os400/os400config.h.in | 353 + thirdparty/libxml2/os400/rpgsupport.c | 270 + thirdparty/libxml2/os400/rpgsupport.h | 157 + thirdparty/libxml2/os400/transcode.c | 268 + thirdparty/libxml2/os400/transcode.h | 43 + thirdparty/libxml2/os400/wrappers.c | 170 + thirdparty/libxml2/os400/wrappers.h | 70 + thirdparty/libxml2/parser.c | 15775 +++++ thirdparty/libxml2/parserInternals.c | 2151 + thirdparty/libxml2/pattern.c | 2617 + thirdparty/libxml2/python/Makefile.am | 54 + thirdparty/libxml2/python/Makefile.in | 982 + thirdparty/libxml2/python/README | 34 + thirdparty/libxml2/python/TODO | 57 + thirdparty/libxml2/python/drv_libxml2.py | 377 + thirdparty/libxml2/python/generator.py | 1228 + thirdparty/libxml2/python/libxml.c | 3934 ++ thirdparty/libxml2/python/libxml.py | 788 + thirdparty/libxml2/python/libxml2-export.c | 2063 + thirdparty/libxml2/python/libxml2-py.c | 14789 +++++ thirdparty/libxml2/python/libxml2-py.h | 2063 + .../libxml2/python/libxml2-python-api.xml | 350 + thirdparty/libxml2/python/libxml2.py | 9320 +++ thirdparty/libxml2/python/libxml2class.py | 8532 +++ thirdparty/libxml2/python/libxml2class.txt | 1177 + thirdparty/libxml2/python/libxml_wrap.h | 279 + thirdparty/libxml2/python/setup.py.in | 242 + thirdparty/libxml2/python/tests/Makefile.am | 75 + thirdparty/libxml2/python/tests/Makefile.in | 677 + thirdparty/libxml2/python/tests/attribs.py | 34 + thirdparty/libxml2/python/tests/build.py | 59 + thirdparty/libxml2/python/tests/compareNodes.py | 50 + thirdparty/libxml2/python/tests/ctxterror.py | 56 + thirdparty/libxml2/python/tests/cutnpaste.py | 48 + thirdparty/libxml2/python/tests/dtdvalid.py | 32 + thirdparty/libxml2/python/tests/error.py | 51 + thirdparty/libxml2/python/tests/inbuf.py | 30 + thirdparty/libxml2/python/tests/indexes.py | 113 + .../libxml2/python/tests/input_callback.py | 148 + thirdparty/libxml2/python/tests/invalid.xml | 6 + thirdparty/libxml2/python/tests/nsdel.py | 62 + thirdparty/libxml2/python/tests/outbuf.py | 110 + thirdparty/libxml2/python/tests/push.py | 35 + thirdparty/libxml2/python/tests/pushSAX.py | 64 + thirdparty/libxml2/python/tests/pushSAXhtml.py | 65 + thirdparty/libxml2/python/tests/reader.py | 446 + thirdparty/libxml2/python/tests/reader2.py | 265 + thirdparty/libxml2/python/tests/reader3.py | 160 + thirdparty/libxml2/python/tests/reader4.py | 50 + thirdparty/libxml2/python/tests/reader5.py | 47 + thirdparty/libxml2/python/tests/reader6.py | 128 + thirdparty/libxml2/python/tests/reader7.py | 101 + thirdparty/libxml2/python/tests/reader8.py | 36 + thirdparty/libxml2/python/tests/readererr.py | 56 + thirdparty/libxml2/python/tests/readernext.py | 86 + thirdparty/libxml2/python/tests/regexp.py | 32 + thirdparty/libxml2/python/tests/relaxng.py | 48 + thirdparty/libxml2/python/tests/resolver.py | 44 + thirdparty/libxml2/python/tests/schema.py | 52 + thirdparty/libxml2/python/tests/serialize.py | 150 + thirdparty/libxml2/python/tests/sync.py | 138 + thirdparty/libxml2/python/tests/test.dtd | 1 + thirdparty/libxml2/python/tests/thread2.py | 99 + thirdparty/libxml2/python/tests/tst.py | 28 + thirdparty/libxml2/python/tests/tst.xml | 1 + thirdparty/libxml2/python/tests/tstLastError.py | 82 + thirdparty/libxml2/python/tests/tstURI.py | 41 + thirdparty/libxml2/python/tests/tstmem.py | 36 + thirdparty/libxml2/python/tests/tstxpath.py | 63 + thirdparty/libxml2/python/tests/valid.xml | 4 + thirdparty/libxml2/python/tests/validDTD.py | 59 + thirdparty/libxml2/python/tests/validRNG.py | 76 + thirdparty/libxml2/python/tests/validSchemas.py | 83 + thirdparty/libxml2/python/tests/validate.py | 82 + thirdparty/libxml2/python/tests/walker.py | 144 + thirdparty/libxml2/python/tests/xpath.py | 51 + thirdparty/libxml2/python/tests/xpathext.py | 49 + thirdparty/libxml2/python/tests/xpathleak.py | 65 + thirdparty/libxml2/python/tests/xpathns.py | 29 + thirdparty/libxml2/python/tests/xpathret.py | 57 + thirdparty/libxml2/python/types.c | 957 + thirdparty/libxml2/regressions.py | 350 + thirdparty/libxml2/regressions.xml | 226 + thirdparty/libxml2/relaxng.c | 11057 ++++ thirdparty/libxml2/runsuite.c | 1172 + thirdparty/libxml2/runtest.c | 4480 ++ thirdparty/libxml2/runxmlconf.c | 607 + thirdparty/libxml2/save.h | 35 + thirdparty/libxml2/schematron.c | 1787 + thirdparty/libxml2/testAutomata.c | 309 + thirdparty/libxml2/testC14N.c | 370 + thirdparty/libxml2/testHTML.c | 880 + thirdparty/libxml2/testModule.c | 82 + thirdparty/libxml2/testReader.c | 145 + thirdparty/libxml2/testRegexp.c | 402 + thirdparty/libxml2/testRelax.c | 194 + thirdparty/libxml2/testSAX.c | 1198 + thirdparty/libxml2/testSchemas.c | 185 + thirdparty/libxml2/testThreads.c | 200 + thirdparty/libxml2/testThreadsWin32.c | 150 + thirdparty/libxml2/testURI.c | 124 + thirdparty/libxml2/testXPath.c | 229 + thirdparty/libxml2/testapi.c | 52172 +++++++++++++++++ thirdparty/libxml2/testchar.c | 617 + thirdparty/libxml2/testdict.c | 444 + thirdparty/libxml2/testdso.c | 12 + thirdparty/libxml2/testlimits.c | 1637 + thirdparty/libxml2/testrecurse.c | 965 + thirdparty/libxml2/threads.c | 1039 + thirdparty/libxml2/timsort.h | 518 + thirdparty/libxml2/tree.c | 10121 ++++ thirdparty/libxml2/trio.c | 6895 +++ thirdparty/libxml2/trio.h | 230 + thirdparty/libxml2/triodef.h | 228 + thirdparty/libxml2/trionan.c | 914 + thirdparty/libxml2/trionan.h | 84 + thirdparty/libxml2/triop.h | 150 + thirdparty/libxml2/triostr.c | 2112 + thirdparty/libxml2/triostr.h | 144 + thirdparty/libxml2/uri.c | 2566 + thirdparty/libxml2/valid.c | 7054 +++ thirdparty/libxml2/vms/build_libxml.com | 273 + thirdparty/libxml2/vms/config.vms | 216 + thirdparty/libxml2/vms/diffs.vms | 192 + thirdparty/libxml2/vms/readme.vms | 143 + thirdparty/libxml2/win32/Makefile.bcb | 355 + thirdparty/libxml2/win32/Makefile.mingw | 354 + thirdparty/libxml2/win32/Makefile.msvc | 489 + thirdparty/libxml2/win32/Readme.txt | 226 + thirdparty/libxml2/win32/VC10/README.vc10 | 27 + thirdparty/libxml2/win32/VC10/RuleSet1.ruleset | 3 + thirdparty/libxml2/win32/VC10/config.h | 125 + .../libxml2/win32/VC10/libxml2-focus.vcxproj | 184 + thirdparty/libxml2/win32/VC10/libxml2.sln | 49 + thirdparty/libxml2/win32/VC10/libxml2.vcxproj | 137 + .../libxml2/win32/VC10/libxml2.vcxproj.filters | 171 + thirdparty/libxml2/win32/VC10/runsuite.vcxproj | 85 + .../libxml2/win32/VC10/runsuite.vcxproj.filters | 22 + thirdparty/libxml2/win32/configure.js | 708 + thirdparty/libxml2/win32/defgen.xsl | 288 + thirdparty/libxml2/win32/libxml2.def.src | 3190 + thirdparty/libxml2/win32/wince/libxml2.vcb | 1 + thirdparty/libxml2/win32/wince/libxml2.vcl | 122 + thirdparty/libxml2/win32/wince/libxml2.vco | 1 + thirdparty/libxml2/win32/wince/libxml2.vcp | 5273 ++ thirdparty/libxml2/win32/wince/libxml2.vcw | 41 + thirdparty/libxml2/win32/wince/wincecompat.c | 68 + thirdparty/libxml2/win32/wince/wincecompat.h | 50 + thirdparty/libxml2/xinclude.c | 2624 + thirdparty/libxml2/xlink.c | 183 + thirdparty/libxml2/xml2-config.1 | 30 + thirdparty/libxml2/xml2-config.in | 106 + thirdparty/libxml2/xml2Conf.sh.in | 8 + thirdparty/libxml2/xmlIO.c | 4186 ++ thirdparty/libxml2/xmlcatalog.c | 615 + thirdparty/libxml2/xmllint.c | 3801 ++ thirdparty/libxml2/xmlmemory.c | 1134 + thirdparty/libxml2/xmlmodule.c | 460 + thirdparty/libxml2/xmlreader.c | 5950 ++ thirdparty/libxml2/xmlregexp.c | 8167 +++ thirdparty/libxml2/xmlsave.c | 2788 + thirdparty/libxml2/xmlschemas.c | 28907 +++++++++ thirdparty/libxml2/xmlschemastypes.c | 6139 ++ thirdparty/libxml2/xmlstring.c | 984 + thirdparty/libxml2/xmlunicode.c | 3179 + thirdparty/libxml2/xmlwriter.c | 4743 ++ thirdparty/libxml2/xpath.c | 15377 +++++ thirdparty/libxml2/xpointer.c | 3031 + thirdparty/libxml2/xstc/Makefile.am | 132 + thirdparty/libxml2/xstc/Makefile.in | 681 + thirdparty/libxml2/xstc/xstc-to-python.xsl | 114 + thirdparty/libxml2/xstc/xstc.py | 693 + thirdparty/libxml2/xzlib.c | 804 + thirdparty/libxml2/xzlib.h | 19 + thirdparty/uuid/COPYING | 25 + thirdparty/uuid/clear.c | 44 + thirdparty/uuid/compare.c | 56 + thirdparty/uuid/config.h | 845 + thirdparty/uuid/copy.c | 46 + thirdparty/uuid/gen_uuid.c | 678 + thirdparty/uuid/isnull.c | 49 + thirdparty/uuid/libuuid.a | Bin 0 -> 1172996 bytes thirdparty/uuid/makefile | 72 + thirdparty/uuid/pack.c | 70 + thirdparty/uuid/parse.c | 80 + thirdparty/uuid/tst_uuid | Bin 0 -> 191032 bytes thirdparty/uuid/tst_uuid.c | 199 + thirdparty/uuid/unpack.c | 64 + thirdparty/uuid/unparse.c | 77 + thirdparty/uuid/uuid.h | 103 + thirdparty/uuid/uuidP.h | 63 + thirdparty/uuid/uuid_time.c | 173 + thirdparty/uuid/uuidd.h | 54 + 727 files changed, 590684 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/Makefile ---------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 8702299..3128422 100644 --- a/Makefile +++ b/Makefile @@ -14,16 +14,32 @@ # See the License for the specific language governing permissions and # limitations under the License -CC=g++ -AR=ar +# for ARM make CROSS_COMPILE=arm-linux-gnueabi ARCH=arm +CC=$(CROSS_COMPILE)-g++ +AR=$(CROSS_COMPILE)-ar BUILD_DIR= ./build TARGET_DIR=./target TARGET_LIB=libminifi.a TARGET_EXE=minifi +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 +LDFLAGS=-static -lminifi -lxml2 -pthread -luuid +else ifeq ($(ARCH), linux) 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/usr/local/opt/leveldb/lib/ -L./build -LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid +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 +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 +endif + UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) @@ -33,12 +49,19 @@ ifeq ($(UNAME_S),Darwin) 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:=FlowFileRecordTest +TESTS:=Server all: directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests directory: mkdir -p $(BUILD_DIR) +ifeq ($(ARCH), arm) + make -C thirdparty/uuid CROSS_COMILE=$(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 $(BUILD_DIR)/%.o: src/%.cpp $(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $< @@ -52,10 +75,17 @@ minifi: $(BUILD_DIR)/$(TARGET_LIB) tests: $(BUILD_DIR)/$(TARGET_LIB) $(foreach TEST_NAME, $(TESTS),\ - $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TEST_NAME) test/$(TEST_NAME).cpp $(LDDIRECTORY) $(LDFLAGS);) + $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TEST_NAME) test/$(TEST_NAME).cpp $(LDDIRECTORY) $(LDFLAGS)) clean: rm -rf $(BUILD_DIR)/* rm -rf $(TARGET_DIR)/$(TARGET_EXE) cp -r $(TARGET_DIR)/conf $(BUILD_DIR)/ - +ifeq ($(ARCH), arm) + make -C thirdparty/uuid clean + make -C thirdparty/libxml2 distclean +else ifeq ($(ARCH), linux) + make -C thirdparty/uuid clean + make -C thirdparty/libxml2 distclean +endif + http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/conf/flow.xml ---------------------------------------------------------------------- diff --git a/conf/flow.xml b/conf/flow.xml new file mode 100644 index 0000000..a29ea1f --- /dev/null +++ b/conf/flow.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<flowController> + <maxTimerDrivenThreadCount>10</maxTimerDrivenThreadCount> + <maxEventDrivenThreadCount>5</maxEventDrivenThreadCount> + <rootGroup> + <id>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</id> + <name>NiFi Flow</name> + <position x="0.0" y="0.0"/> + <comment/> + <processor> + <id>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</id> + <name>RealTimeDataCollector</name> + <position x="3259.732177734375" y="1739.991943359375"/> + <styles/> + <comment/> + <class>org.apache.nifi.processors.standard.RealTimeDataCollector</class> + <maxConcurrentTasks>2</maxConcurrentTasks> + <schedulingPeriod>1 ms</schedulingPeriod> + <penalizationPeriod>30 sec</penalizationPeriod> + <yieldPeriod>1 sec</yieldPeriod> + <bulletinLevel>WARN</bulletinLevel> + <lossTolerant>false</lossTolerant> + <scheduledState>RUNNING</scheduledState> + <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy> + <runDurationNanos>0</runDurationNanos> + <property> + <name>File Name</name> + <value>data.osp></value> + </property> + <property> + <name>Real Time Server Name</name> + <value>localhost</value> + </property> + <property> + <name>Real Time Server Port</name> + <value>10000</value> + </property> + <property> + <name>Batch Server Name</name> + <value>localhost</value> + </property> + <property> + <name>Batch Server Port</name> + <value>10001</value> + </property> + <property> + <name>Iteration</name> + <value>true</value> + </property> + <property> + <name>Real Time Message ID</name> + <value>41</value> + </property> + <property> + <name>Batch Message ID</name> + <value>172, 30, 48</value> + </property> + <property> + <name>Real Time Interval</name> + <value>10 ms</value> + </property> + <property> + <name>Batch Time Interval</name> + <value>100 ms</value> + </property> + <property> + <name>Batch Max Buffer Size</name> + <value>1048576</value> + </property> + <autoTerminatedRelationship>success</autoTerminatedRelationship> + </processor> + </rootGroup> + <controllerServices> + <controllerService> + <id>b2785fb0-e797-4c4d-8592-d2b2563504c4</id> + <name>DistributedMapCacheClientService</name> + <comment/> + <class>org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService</class> + <enabled>true</enabled> + <property> + <name>Server Hostname</name> + <value>localhost</value> + </property> + <property> + <name>Server Port</name> + <value>4557</value> + </property> + <property> + <name>SSL Context Service</name> + </property> + <property> + <name>Communications Timeout</name> + <value>30 secs</value> + </property> + </controllerService> + <controllerService> + <id>2855f1e0-dc35-4955-9ae2-b2d7d1765d4e</id> + <name>StandardSSLContextService</name> + <comment/> + <class>org.apache.nifi.ssl.StandardSSLContextService</class> + <enabled>true</enabled> + <property> + <name>Keystore Filename</name> + </property> + <property> + <name>Keystore Password</name> + </property> + <property> + <name>Keystore Type</name> + </property> + <property> + <name>Truststore Filename</name> + <value>/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/security/cacerts</value> + </property> + <property> + <name>Truststore Password</name> + <value>enc{9E2EE146023A0F31914706460EB177B357796CF0C768DECE09D10C4B40F344C8}</value> + </property> + <property> + <name>Truststore Type</name> + <value>JKS</value> + </property> + <property> + <name>SSL Protocol</name> + <value>TLS</value> + </property> + </controllerService> + </controllerServices> + <reportingTasks/> +</flowController> http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/conf/flowTest.xml ---------------------------------------------------------------------- diff --git a/conf/flowTest.xml b/conf/flowTest.xml new file mode 100644 index 0000000..56125f8 --- /dev/null +++ b/conf/flowTest.xml @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<flowController> + <maxTimerDrivenThreadCount>10</maxTimerDrivenThreadCount> + <maxEventDrivenThreadCount>5</maxEventDrivenThreadCount> + <rootGroup> + <id>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</id> + <name>NiFi Flow</name> + <position x="0.0" y="0.0"/> + <comment/> + <processor> + <id>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</id> + <name>LogAttribute</name> + <position x="3259.732177734375" y="1739.991943359375"/> + <styles/> + <comment/> + <class>org.apache.nifi.processors.standard.LogAttribute</class> + <maxConcurrentTasks>1</maxConcurrentTasks> + <schedulingPeriod>0 sec</schedulingPeriod> + <penalizationPeriod>30 sec</penalizationPeriod> + <yieldPeriod>1 sec</yieldPeriod> + <bulletinLevel>WARN</bulletinLevel> + <lossTolerant>false</lossTolerant> + <scheduledState>RUNNING</scheduledState> + <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy> + <runDurationNanos>0</runDurationNanos> + <property> + <name>Log Level</name> + <value>info</value> + </property> + <property> + <name>Log Payload</name> + <value>false</value> + </property> + <property> + <name>Attributes to Log</name> + </property> + <property> + <name>Attributes to Ignore</name> + </property> + <property> + <name>Log prefix</name> + </property> + <autoTerminatedRelationship>success</autoTerminatedRelationship> + </processor> + <processor> + <id>a0e57bb2-5b89-438e-8869-0326bbdbbe43</id> + <name>GenerateFlowFile</name> + <position x="2643.1135987796815" y="1457.4419966791334"/> + <styles/> + <comment/> + <class>org.apache.nifi.processors.standard.GenerateFlowFile</class> + <maxConcurrentTasks>1</maxConcurrentTasks> + <schedulingPeriod>1 s</schedulingPeriod> + <penalizationPeriod>30 sec</penalizationPeriod> + <yieldPeriod>1 sec</yieldPeriod> + <bulletinLevel>WARN</bulletinLevel> + <lossTolerant>false</lossTolerant> + <scheduledState>RUNNING</scheduledState> + <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy> + <runDurationNanos>0</runDurationNanos> + <property> + <name>File Size</name> + <value>1 kB</value> + </property> + <property> + <name>Batch Size</name> + <value>1</value> + </property> + <property> + <name>Data Format</name> + <value>Text</value> + </property> + <property> + <name>Unique FlowFiles</name> + <value>false</value> + </property> + </processor> + <connection> + <id>c4cf70d8-be05-4c3d-b926-465f330d6503</id> + <name/> + <bendPoints/> + <labelIndex>1</labelIndex> + <zIndex>0</zIndex> + <sourceId>a0e57bb2-5b89-438e-8869-0326bbdbbe43</sourceId> + <sourceGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</sourceGroupId> + <sourceType>PROCESSOR</sourceType> + <destinationId>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</destinationId> + <destinationGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</destinationGroupId> + <destinationType>PROCESSOR</destinationType> + <relationship>success</relationship> + <maxWorkQueueSize>0</maxWorkQueueSize> + <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize> + <flowFileExpiration>0 sec</flowFileExpiration> + </connection> + <connection> + <id>673cf83c-d261-4b6b-8e5a-19052fe40025</id> + <name/> + <bendPoints> + <bendPoint x="3106.4228882570283" y="1573.7169700192542"/> + </bendPoints> + <labelIndex>1</labelIndex> + <zIndex>0</zIndex> + <sourceId>a0e57bb2-5b89-438e-8869-0326bbdbbe43</sourceId> + <sourceGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</sourceGroupId> + <sourceType>PROCESSOR</sourceType> + <destinationId>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</destinationId> + <destinationGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</destinationGroupId> + <destinationType>PROCESSOR</destinationType> + <relationship>success</relationship> + <maxWorkQueueSize>0</maxWorkQueueSize> + <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize> + <flowFileExpiration>0 sec</flowFileExpiration> + </connection> + </rootGroup> + <controllerServices> + <controllerService> + <id>b2785fb0-e797-4c4d-8592-d2b2563504c4</id> + <name>DistributedMapCacheClientService</name> + <comment/> + <class>org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService</class> + <enabled>true</enabled> + <property> + <name>Server Hostname</name> + <value>localhost</value> + </property> + <property> + <name>Server Port</name> + <value>4557</value> + </property> + <property> + <name>SSL Context Service</name> + </property> + <property> + <name>Communications Timeout</name> + <value>30 secs</value> + </property> + </controllerService> + <controllerService> + <id>2855f1e0-dc35-4955-9ae2-b2d7d1765d4e</id> + <name>StandardSSLContextService</name> + <comment/> + <class>org.apache.nifi.ssl.StandardSSLContextService</class> + <enabled>true</enabled> + <property> + <name>Keystore Filename</name> + </property> + <property> + <name>Keystore Password</name> + </property> + <property> + <name>Keystore Type</name> + </property> + <property> + <name>Truststore Filename</name> + <value>/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/security/cacerts</value> + </property> + <property> + <name>Truststore Password</name> + <value>enc{9E2EE146023A0F31914706460EB177B357796CF0C768DECE09D10C4B40F344C8}</value> + </property> + <property> + <name>Truststore Type</name> + <value>JKS</value> + </property> + <property> + <name>SSL Protocol</name> + <value>TLS</value> + </property> + </controllerService> + </controllerServices> + <reportingTasks/> +</flowController> http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/conf/nifi.properties ---------------------------------------------------------------------- diff --git a/conf/nifi.properties b/conf/nifi.properties new file mode 100644 index 0000000..c4f7dff --- /dev/null +++ b/conf/nifi.properties @@ -0,0 +1,185 @@ +# 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= http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/Configure.h ---------------------------------------------------------------------- diff --git a/inc/Configure.h b/inc/Configure.h index 56b6ed9..502916f 100644 --- a/inc/Configure.h +++ b/inc/Configure.h @@ -44,6 +44,9 @@ public: static const char *nifi_flow_configuration_file; static const char *nifi_administrative_yield_duration; static const char *nifi_bored_yield_duration; + static const char *nifi_server_name; + static const char *nifi_server_port; + static const char *nifi_server_report_interval; //! Clear the load config void clear() http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/Connection.h ---------------------------------------------------------------------- diff --git a/inc/Connection.h b/inc/Connection.h index 6438e6f..919cdc9 100644 --- a/inc/Connection.h +++ b/inc/Connection.h @@ -158,6 +158,8 @@ public: void put(FlowFileRecord *flow); //! Poll the flow file from queue, the expired flow file record also being returned FlowFileRecord *poll(std::set<FlowFileRecord *> &expiredFlowRecords); + //! Drain the flow records + void drain(); protected: //! A global unique identifier http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/FlowControlProtocol.h ---------------------------------------------------------------------- diff --git a/inc/FlowControlProtocol.h b/inc/FlowControlProtocol.h new file mode 100644 index 0000000..ae31ce5 --- /dev/null +++ b/inc/FlowControlProtocol.h @@ -0,0 +1,332 @@ +/** + * @file FlowControlProtocol.h + * FlowControlProtocol class declaration + * + * 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. + */ +#ifndef __FLOW_CONTROL_PROTOCOL_H__ +#define __FLOW_CONTROL_PROTOCOL_H__ + +#include <stdio.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <fcntl.h> +#include <netdb.h> +#include <string> +#include <errno.h> +#include <chrono> +#include <thread> +#include "Logger.h" +#include "Configure.h" +#include "Property.h" + +//! Forwarder declaration +class FlowController; + +#define DEFAULT_NIFI_SERVER_PORT 9000 +#define DEFAULT_REPORT_INTERVAL 1000 // 1 sec +#define MAX_READ_TIMEOUT 30000 // 30 seconds + +//! FlowControl Protocol Msg Type +typedef enum { + REGISTER_REQ, // Device Register Request from device to server which contain device serial number, current running flow xml version + REGISTER_RESP, // Device Register Respond from server to device, may contain new flow.xml from server ask device to apply and also device report interval + REPORT_REQ, // Period Device Report from device to server which contain device serial number, current running flow xml name/version and other period report info + REPORT_RESP, // Report Respond from server to device, may ask device to update flow xml or processor property + MAX_FLOW_CONTROL_MSG_TYPE +} FlowControlMsgType; + +//! FlowControl Protocol Msg Type String +static const char *FlowControlMsgTypeStr[MAX_FLOW_CONTROL_MSG_TYPE] = +{ + "REGISTER_REQ", + "REGISTER_RESP", + "REPORT_REQ", + "REPORT_RESP" +}; + +//! Flow Control Msg Type to String +inline const char *FlowControlMsgTypeToStr(FlowControlMsgType type) +{ + if (type < MAX_FLOW_CONTROL_MSG_TYPE) + return FlowControlMsgTypeStr[type]; + else + return NULL; +} + +//! FlowControll Protocol Msg ID (Some Messages are fix length, Some are variable length (TLV) +typedef enum { + //Fix length 8 bytes: client to server in register request, required field + FLOW_SERIAL_NUMBER, + // Flow XML name TLV: client to server in register request and report request, required field + FLOW_XML_NAME, + // Flow XML content, TLV: server to client in register respond, option field in case server want to ask client to load xml from server + FLOW_XML_CONTENT, + // Fix length, 4 bytes Report interval in msec: server to client in register respond, option field + REPORT_INTERVAL, + // Processor Name TLV: server to client in report respond, option field in case server want to ask client to update processor property + PROCESSOR_NAME, + // Processor Property Name TLV: server to client in report respond, option field in case server want to ask client to update processor property + PROPERTY_NAME, + // Processor Property Value TLV: server to client in report respond, option field in case server want to ask client to update processor property + PROPERTY_VALUE, + // Report Blob TLV: client to server in report request, option field in case client want to pickyback the report blob in report request to server + REPORT_BLOB, + MAX_FLOW_MSG_ID +} FlowControlMsgID; + +//! FlowControl Protocol Msg ID String +static const char *FlowControlMsgIDStr[MAX_FLOW_MSG_ID] = +{ + "FLOW_SERIAL_NUMBER", + "FLOW_XML_NAME", + "FLOW_XML_CONTENT", + "REPORT_INTERVAL", + "PROCESSOR_NAME" + "PROPERTY_NAME", + "PROPERTY_VALUE", + "REPORT_BLOB" +}; + +#define TYPE_HDR_LEN 4 // Fix Hdr Type +#define TLV_HDR_LEN 8 // Type 4 bytes and Len 4 bytes + +//! FlowControl Protocol Msg Len +inline int FlowControlMsgIDEncodingLen(FlowControlMsgID id, int payLoadLen) +{ + if (id == FLOW_SERIAL_NUMBER) + return (TYPE_HDR_LEN + 8); + else if (id == REPORT_INTERVAL) + return (TYPE_HDR_LEN + 4); + else if (id < MAX_FLOW_MSG_ID) + return (TLV_HDR_LEN + payLoadLen); + else + return -1; +} + +//! Flow Control Msg Id to String +inline const char *FlowControlMsgIdToStr(FlowControlMsgID id) +{ + if (id < MAX_FLOW_MSG_ID) + return FlowControlMsgIDStr[id]; + else + return NULL; +} + +//! Flow Control Respond status code +typedef enum { + RESP_SUCCESS, + RESP_TRIGGER_REGISTER, // Server respond to client report to re trigger register + RESP_START_FLOW_CONTROLLER, // Server respond to client to start flow controller + RESP_STOP_FLOW_CONTROLLER, // Server respond to client to stop flow controller + RESP_FAILURE, + MAX_RESP_CODE +} FlowControlRespCode; + +//! FlowControl Resp Code str +static const char *FlowControlRespCodeStr[MAX_RESP_CODE] = +{ + "RESP_SUCCESS", + "RESP_TRIGGER_REGISTER", + "RESP_START_FLOW_CONTROLLER", + "RESP_STOP_FLOW_CONTROLLER", + "RESP_FAILURE" +}; + +//! Flow Control Resp Code to String +inline const char *FlowControlRespCodeToStr(FlowControlRespCode code) +{ + if (code < MAX_RESP_CODE) + return FlowControlRespCodeStr[code]; + else + return NULL; +} + +//! Common FlowControlProtocol Header +typedef struct { + uint32_t msgType; //! Msg Type + uint32_t seqNumber; //! Seq Number to match Req with Resp + uint32_t status; //! Resp Code, see FlowControlRespCode + uint32_t payloadLen; //! Msg Payload length +} FlowControlProtocolHeader; + +//! FlowControlProtocol Class +class FlowControlProtocol +{ +public: + //! Constructor + /*! + * Create a new control protocol + */ + FlowControlProtocol(FlowController *controller) { + _controller = controller; + _logger = Logger::getLogger(); + _configure = Configure::getConfigure(); + _socket = 0; + _serverName = "localhost"; + _serverPort = DEFAULT_NIFI_SERVER_PORT; + _registered = false; + _seqNumber = 0; + _reportBlob = NULL; + _reportBlobLen = 0; + _reportInterval = DEFAULT_REPORT_INTERVAL; + _running = false; + + std::string value; + + if (_configure->get(Configure::nifi_server_name, value)) + { + _serverName = value; + _logger->log_info("NiFi Server Name %s", _serverName.c_str()); + } + if (_configure->get(Configure::nifi_server_port, value) && Property::StringToInt(value, _serverPort)) + { + _logger->log_info("NiFi Server Port: [%d]", _serverPort); + } + if (_configure->get(Configure::nifi_server_report_interval, value)) + { + TimeUnit unit; + if (Property::StringToTime(value, _reportInterval, unit) && + Property::ConvertTimeUnitToMS(_reportInterval, unit, _reportInterval)) + { + _logger->log_info("NiFi server report interval: [%d] ms", _reportInterval); + } + } + } + //! Destructor + virtual ~FlowControlProtocol() + { + stop(); + if (_socket) + close(_socket); + if (_reportBlob) + delete [] _reportBlob; + } + +public: + + //! SendRegisterRequest and Process Register Respond, return 0 for success + int sendRegisterReq(); + //! SendReportReq and Process Report Respond, return 0 for success + int sendReportReq(); + //! Start the flow control protocol + void start(); + //! Stop the flow control protocol + void stop(); + //! Set Report BLOB for periodically report + void setReportBlob(char *blob, int len) + { + std::lock_guard<std::mutex> lock(_mtx); + if (_reportBlob && _reportBlobLen >= len) + { + memcpy(_reportBlob, blob, len); + _reportBlobLen = len; + } + else + { + if (_reportBlob) + delete[] _reportBlob; + _reportBlob = new char[len]; + _reportBlobLen = len; + } + } + //! Run function for the thread + static void run(FlowControlProtocol *protocol); + +protected: + +private: + //! Connect to the socket, return sock descriptor if success, 0 for failure + int connectServer(const char *host, uint16_t port); + //! Send Data via the socket, return -1 for failure + int sendData(uint8_t *buf, int buflen); + //! Read length into buf, return -1 for failure and 0 for EOF + int readData(uint8_t *buf, int buflen); + //! Select on the socket + int selectClient(int msec); + //! Read the header + int readHdr(FlowControlProtocolHeader *hdr); + //! encode uint32_t + uint8_t *encode(uint8_t *buf, uint32_t value) + { + *buf++ = (value & 0xFF000000) >> 24; + *buf++ = (value & 0x00FF0000) >> 16; + *buf++ = (value & 0x0000FF00) >> 8; + *buf++ = (value & 0x000000FF); + return buf; + } + //! encode uint32_t + uint8_t *decode(uint8_t *buf, uint32_t &value) + { + value = ((buf[0]<<24)|(buf[1]<<16)|(buf[2]<<8)|(buf[3])); + return (buf + 4); + } + //! encode byte array + uint8_t *encode(uint8_t *buf, uint8_t *bufArray, int size) + { + memcpy(buf, bufArray, size); + buf += size; + return buf; + } + //! encode std::string + uint8_t *encode(uint8_t *buf, std::string value) + { + // add the \0 for size + buf = encode(buf, value.size()+1); + buf = encode(buf, (uint8_t *) value.c_str(), value.size()+1); + return buf; + } + //! Mutex for protection + std::mutex _mtx; + //! Logger + Logger *_logger; + //! Configure + Configure *_configure; + //! NiFi server Name + std::string _serverName; + //! NiFi server port + int64_t _serverPort; + //! Serial Number + uint8_t _serialNumber[8]; + //! socket to server + int _socket; + //! report interal in msec + int64_t _reportInterval; + //! whether it was registered to the NiFi server + bool _registered; + //! seq number + uint32_t _seqNumber; + //! FlowController + FlowController *_controller; + //! report Blob + char *_reportBlob; + //! report Blob len; + int _reportBlobLen; + //! thread + std::thread *_thread; + //! whether it is running + bool _running; + // Prevent default copy constructor and assignment operation + // Only support pass by reference or pointer + FlowControlProtocol(const FlowControlProtocol &parent); + FlowControlProtocol &operator=(const FlowControlProtocol &parent); + +}; + +#endif http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/FlowController.h ---------------------------------------------------------------------- diff --git a/inc/FlowController.h b/inc/FlowController.h index 2efda2c..4fa5810 100644 --- a/inc/FlowController.h +++ b/inc/FlowController.h @@ -43,9 +43,10 @@ #include "GenerateFlowFile.h" #include "LogAttribute.h" #include "TimerDrivenSchedulingAgent.h" +#include "FlowControlProtocol.h" //! Default NiFi Root Group Name -#define DEFAULT_ROOT_GROUP_NAME "NiFi Flow" +#define DEFAULT_ROOT_GROUP_NAME "" #define DEFAULT_FLOW_XML_FILE_NAME "conf/flow.xml" //! FlowController Class @@ -121,6 +122,14 @@ public: void stop(bool force); //! Unload the current flow xml, clean the root process group and all its children void unload(); + //! Load new xml + void reload(std::string xmlFile); + //! update property value + void updatePropertyValue(std::string processorName, std::string propertyName, std::string propertyValue) + { + if (_root) + _root->updatePropertyValue(processorName, propertyName, propertyValue); + } //! Create Processor (Node/Input/Output Port) based on the name Processor *createProcessor(std::string name, uuid_t uuid); @@ -157,7 +166,8 @@ protected: //! Config //! Site to Site Server Listener //! Heart Beat - + //! FlowControl Protocol + FlowControlProtocol *_protocol; private: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/LogAttribute.h ---------------------------------------------------------------------- diff --git a/inc/LogAttribute.h b/inc/LogAttribute.h index b43991a..125ebf3 100644 --- a/inc/LogAttribute.h +++ b/inc/LogAttribute.h @@ -85,6 +85,32 @@ public: else return false; } + //! Nest Callback Class for read stream + class ReadCallback : public InputStreamCallback + { + public: + ReadCallback(uint64_t size) + { + _bufferSize = size; + _buffer = new char[_bufferSize]; + } + ~ReadCallback() + { + if (_buffer) + delete[] _buffer; + } + void process(std::ifstream *stream) { + + stream->read(_buffer, _bufferSize); + if (!stream) + _readSize = stream->gcount(); + else + _readSize = _bufferSize; + } + char *_buffer; + uint64_t _bufferSize; + uint64_t _readSize; + }; public: //! OnTrigger method, implemented by NiFi LogAttribute http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/Logger.h ---------------------------------------------------------------------- diff --git a/inc/Logger.h b/inc/Logger.h index ed2784c..42cf3ea 100644 --- a/inc/Logger.h +++ b/inc/Logger.h @@ -141,7 +141,11 @@ private: * Create a logger * */ Logger(const std::string logger_name = LOG_NAME, const std::string filename = LOG_FILE_NAME, size_t max_file_size = DEFAULT_LOG_FILE_SIZE, size_t max_files = DEFAULT_LOG_FILE_NUMBER, bool force_flush = true) { - _spdlog = rotating_logger_mt(logger_name, filename, max_file_size, max_files, force_flush); + /* + if (!filename.empty()) + _spdlog = rotating_logger_mt(logger_name, filename, max_file_size, max_files, force_flush); + else */ + _spdlog = stdout_logger_mt("console"); _spdlog->set_level((spdlog::level::level_enum) debug); } //! spdlog http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/ProcessGroup.h ---------------------------------------------------------------------- diff --git a/inc/ProcessGroup.h b/inc/ProcessGroup.h index 1522c09..796142f 100644 --- a/inc/ProcessGroup.h +++ b/inc/ProcessGroup.h @@ -105,6 +105,8 @@ public: Processor *findProcessor(uuid_t uuid); //! removeConnection void removeConnection(Connection *connection); + //! update property value + void updatePropertyValue(std::string processorName, std::string propertyName, std::string propertyValue); protected: //! A global unique identifier http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/ProcessSession.h ---------------------------------------------------------------------- diff --git a/inc/ProcessSession.h b/inc/ProcessSession.h index b24ea8a..d38e71b 100644 --- a/inc/ProcessSession.h +++ b/inc/ProcessSession.h @@ -82,6 +82,8 @@ public: void append(FlowFileRecord *flow, OutputStreamCallback *callback); //! Penalize the flow void penalize(FlowFileRecord *flow); + //! Import the existed file into the flow + void import(std::string source, FlowFileRecord *flow); protected: //! FlowFiles being modified by current process session http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/Processor.h ---------------------------------------------------------------------- diff --git a/inc/Processor.h b/inc/Processor.h index 64e347f..db26ad0 100644 --- a/inc/Processor.h +++ b/inc/Processor.h @@ -217,6 +217,9 @@ public: void decrementActiveTask(void) { _activeTasks--; } + void clearActiveTask(void) { + _activeTasks = 0; + } //! Yield based on the yield period void yield() { http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/inc/Property.h ---------------------------------------------------------------------- diff --git a/inc/Property.h b/inc/Property.h index b22cf64..a724394 100644 --- a/inc/Property.h +++ b/inc/Property.h @@ -309,6 +309,26 @@ public: return false; } + // Trim String utils + static std::string trim(const std::string& s) + { + return trimRight(trimLeft(s)); + } + + static std::string trimLeft(const std::string& s) + { + const char *WHITESPACE = " \n\r\t"; + size_t startpos = s.find_first_not_of(WHITESPACE); + return (startpos == std::string::npos) ? "" : s.substr(startpos); + } + + static std::string trimRight(const std::string& s) + { + const char *WHITESPACE = " \n\r\t"; + size_t endpos = s.find_last_not_of(WHITESPACE); + return (endpos == std::string::npos) ? "" : s.substr(0, endpos+1); + } + protected: //! Name std::string _name; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/main/MiNiFiMain.cpp ---------------------------------------------------------------------- diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp index ded7d96..4d9db5d 100644 --- a/main/MiNiFiMain.cpp +++ b/main/MiNiFiMain.cpp @@ -17,6 +17,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include <stdio.h> +#include <signal.h> #include <vector> #include <queue> #include <map> @@ -28,30 +30,57 @@ //! Main thread sleep interval 1 second #define SLEEP_INTERVAL 1 +//! Main thread stop wait time +#define STOP_WAIT_TIME 2 //! Default nifi properties file path #define DEFAULT_NIFI_PROPERTIES_FILE "./conf/nifi.properties" +//! Whether it is running +static bool running = false; +//! Flow Controller +static FlowController *controller = NULL; + +void sigHandler(int signal) +{ + if (signal == SIGINT || signal == SIGTERM) + { + controller->stop(true); + sleep(STOP_WAIT_TIME); + running = false; + } +} 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) + { + logger->log_error("Can not install signal handler"); + return -1; + } + Configure *configure = Configure::getConfigure(); configure->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE); - FlowController controller; + controller = new FlowController();; // Load flow XML - controller.load(); + controller->load(); // Start Processing the flow - controller.start(); + controller->start(); + running = true; // main loop - while (true) + while (running) { sleep(SLEEP_INTERVAL); } + controller->unload(); + delete controller; + logger->log_info("MiNiFi exit"); + return 0; } http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/src/Configure.cpp ---------------------------------------------------------------------- diff --git a/src/Configure.cpp b/src/Configure.cpp index bcc4a12..862bb71 100644 --- a/src/Configure.cpp +++ b/src/Configure.cpp @@ -23,6 +23,10 @@ Configure *Configure::_configure(NULL); const char *Configure::nifi_flow_configuration_file = "nifi.flow.configuration.file"; const char *Configure::nifi_administrative_yield_duration = "nifi.administrative.yield.duration"; const char *Configure::nifi_bored_yield_duration = "nifi.bored.yield.duration"; +const char *Configure::nifi_server_name = "nifi.server.name"; +const char *Configure::nifi_server_port = "nifi.server.port"; +const char *Configure::nifi_server_report_interval= "nifi.server.report.interval"; + //! Get the config value bool Configure::get(std::string key, std::string &value) http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/7956696e/src/Connection.cpp ---------------------------------------------------------------------- diff --git a/src/Connection.cpp b/src/Connection.cpp index 2befdfd..e036b89 100644 --- a/src/Connection.cpp +++ b/src/Connection.cpp @@ -144,3 +144,17 @@ FlowFileRecord* Connection::poll(std::set<FlowFileRecord *> &expiredFlowRecords) return NULL; } + +void Connection::drain() +{ + std::lock_guard<std::mutex> lock(_mtx); + + while (!_queue.empty()) + { + FlowFileRecord *item = _queue.front(); + _queue.pop(); + delete item; + } + + _logger->log_debug("Drain connection %s", _name.c_str()); +}
