Thanks for pointing that out, Mark.
The net result of what I wrote is just that: numeric arguments in order
of N, then whatever else is there, unsorted. I did nothing, however, to
handle conflicting values of N. I don't claim the code I attached to the
JIRA to be the best solution, only an illustration of a solution. In my
opinion, except for respecting the value of N, this is all using a 3lb
hammer to crack a peanut, but it has to be done and it's up to the real
committers to decide how far to run with this. Personally, I'd just use
the code I wrote, with added handling for duplicate values of N, then
add the non-numeric arguments and call it good.
For most folk, it will never make any difference.
Russ
P.S. I'm promising a wiki-exposé on how to use the Java Flight Recorder
and Java Mission Control as soon as I gain authorization and someone
explains to me how to create the page in the wiki.
On 01/18/2017 08:31 AM, Mark Payne wrote:
Russ,
Sorry - I didn't see this sooner. That is accurate, that 'N' can be non-numeric. By
default, in bootstrap.conf, there is actually a property named
"java.arg.debug=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
but it is commented out.
I think that if we want to guarantee ordering, we need to do some sort of
sorting on the keys. For example, first comes all numbers in numeric ordering
(i.e., - not lexigraphical ordering - so java.arg.1, java.arg.2, java.arg.3,
..., java.arg.10, java.arg.11, ...), followed by non-numeric values in
lexigraphical ordering. This would make it much easier to guarantee ordering by
simply using numbers but doesn't enforce numbers to be used. We didn't enforce
numbers to be used because historically we've found that people are inclined to
always use a one-up number. So when they want to add a new property, they go
searching through the file looking for the latest number used and then use the
next number; then, if they un-comment a line, that one may conflict resulting
in two arguments with the same numbers and one of them is overridden.
Thanks
-Mark
On Jan 18, 2017, at 10:22 AM, Russell Bateman <r...@windofkeltia.com> wrote:
For my own purposes, I fixed this in 0.7.1
/nifi-bootstrap///src/main/java/org/////apache/nifi/bootstrap/RunNiFi.java/,
but at Joe's suggestion, I created JIRA NIFI-3364 hoping some committer will
get to it for all code branches-forward. The solution I used was made to be as
little disruptive to the existing code as possible. To that JIRA I attached the
solution pinched between comments in a larger test demonstrating it.
I had found that I could trick the order in my local environment by trial and
error, however, moving to another host and with the additional need to dominate
the order of JMX remote definitions as well (in order to reach NiFi remote from
Java Mission Control), it just became impossible to achieve it.
The code I wrote isn't the only way to fix nor even necessarily the best, but
it works supporting both the ordering of /N/in java.arg.Nas well as (did you
know this?) the use of non-numeric options for the position of /N/.
Russ
On 12/14/2016 11:05 AM, Russell Bateman wrote:
I've doctored /conf/bootstrap.conf/ to contain these additional lines:
java.arg.15=-XX:+UnlockCommercialFeatures
java.arg.16=-XX:+FlightRecorder
java.arg.17=-XX:StartFlightRecording=duration=120m,filename=recording.jfr
In the end, NiFi's grumpy about this and won't start (from
/logs/nifi-bootstrap.log/):
2016-12-14 10:39:36,489 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Error: *To use 'FlightRecorder', first unlock using
-XX:+UnlockCommercialFeatures.*
2016-12-14 10:39:36,489 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Error: Could not create the Java Virtual Machine.
2016-12-14 10:39:36,489 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Error: A fatal exception has occurred. Program will exit.
2016-12-14 10:39:36,507 INFO [main] org.apache.nifi.bootstrap.RunNiFi NiFi
never started. Will not restart NiFi
I tried using all options as one (in case the order is disturbed, which it was):
java.arg.15=-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:StartFlightRecording=duration=120m,filename=recording.jfr
and then I get:
*2016-12-14 10:50:07,574 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Unrecognized VM option 'UnlockCommercialFeatures -XX:+FlightRecorder
-XX:StartFlightRecording=duration=120m,filename=recording.jfr'*
2016-12-14 10:50:07,574 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Error: Could not create the Java Virtual Machine.
2016-12-14 10:50:07,574 ERROR [NiFi logging handler] org.apache.nifi.StdErr
Error: A fatal exception has occurred. Program will exit.
2016-12-14 10:50:07,598 INFO [main] org.apache.nifi.bootstrap.RunNiFi NiFi
never started. Will not restart NiFi
Here's the second command line from /logs/nifi-bootstrap.log/, which I've
wrapped for convenience in reading (see JVM version here too):
2016-12-14 10:56:40,526 INFO [main] org.apache.nifi.bootstrap.Command Working
Directory: /home/russ/dev/nifi/nifi-1.1.0
2016-12-14 10:56:40,526 INFO [main] org.apache.nifi.bootstrap.Command Command:
*/home/russ/dev/jdk1.8.0_112/bin/java*
-classpath
/home/russ/dev/nifi/nifi-1.1.0/./conf:/home/russ/dev/nifi/nifi-1.1.0/./lib/jcl-over-slf4j-1.7.12.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/logback-core-1.1.3.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-documentation-1.1.0.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-nar-utils-1.1.0.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/logback-classic-1.1.3.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/jul-to-slf4j-1.7.12.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-runtime-1.1.0.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/slf4j-api-1.7.12.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-api-1.1.0.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-framework-api-1.1.0.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/log4j-over-slf4j-1.7.12.jar:/home/russ/dev/nifi/nifi-1.1.0/./lib/nifi-properties-1.1.0.jar
-Dorg.apache.jasper.compiler.disablejsr199=true
-Xmx512m
-Xms512m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9191
*-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording=duration=120m,filename=recording.jfr*
-Dsun.net.http.allowRestrictedHeaders=true
-Djava.net.preferIPv4Stack=true
-Djava.awt.headless=true
-XX:+UseG1GC
-Djava.protocol.handler.pkgs=sun.net.www.protocol
-Dnifi.properties.file.path=/home/russ/dev/nifi/nifi-1.1.0/./conf/nifi.properties
-Dnifi.bootstrap.listen.port=41736
-Dapp=NiFi
-Dorg.apache.nifi.bootstrap.config.log.dir=/home/russ/dev/nifi/nifi-1.1.0/logs
org.apache.nifi.NiFi
Last, I frantically tried this:
java.arg.15="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:StartFlightRecording=duration=120m,filename=recording.jfr"
and then got:
*2016-12-14 11:01:36,659 ERROR [NiFi logging handler] org.apache.nifi.StdErr Error: Could
not find or load main class "-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:StartFlightRecording=duration=120m,filename=recording.jfr"*
What's the canonical way of adding/inserting my own JVM commands?
Alternatively, is NiFi analyzing and blocking -XX:arguments to the JVM as
illegal or unrecognized?
Thanks,
Russ