[ https://issues.apache.org/jira/browse/NIFI-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15362765#comment-15362765 ]
Brandon DeVries commented on NIFI-2159: --------------------------------------- I think it needs to be a blocker. Basically, as we attempt to actually use Apache NiFi in non-trivial production environments, we're seeing a state in which NiFi is unaware that anything is wrong, yet nodes in the cluster have different flow.xml configurations. I can't think of anything (possibly including data loss) that is a more serious issue (i.e. data is being processed, but not in the way the graph would make you think it is being processed). Again, we are not 100% sure that this issue is the one causing the bad state... however, it definitely could be, and it is definitely a Very Bad Thing™. I don't think it would be good to put out a release knowing that this is an issue, especially given that the solution seems relatively straightforward. > Fingerprint not detecting flow.xml differences > ---------------------------------------------- > > Key: NIFI-2159 > URL: https://issues.apache.org/jira/browse/NIFI-2159 > Project: Apache NiFi > Issue Type: Bug > Affects Versions: 0.6.1 > Reporter: Brandon DeVries > Priority: Critical > Fix For: 1.0.0, 0.7.0 > > > We have very occasionally observed situations where the flow.xml across a > cluster was able to become inconsistent, resulting in unexpected behavior. > While investigating, the following issue was found. While we are not 100% > that this problem is the one we were looking for, it is definitely an issue... > Within the FingerprintFactory, the text values from <relationship> tags were > always being appended to the fingerprint as a default value of "NO_VALUE" > regardless of whether or not they actually contained a value. This can > manifest as two different flow.xml files being considered the same when they > have the same number of relationship tags, even though those tags contain > different values. Here is a suggested fix: > Change the following in FingerprintFactory.java\[1\]: > {code} > final List<Element> sortedRelationshipElems = sortElements(relationshipElems, > getConnectionRelationshipsComparator()); > for (final Element relationshipElem : sortedRelationshipElems) { > addConnectionRelationshipFingerprint(builder, relationshipElem); > } > {code} > To: > {code} > for (int i = 0;i<relationshipElems.getLength();i++) { > builder.append(getValue(relationshipElems.item(i),"NO_VALUE")); > } > {code} > The following unit test will show that the value of the relationship is now > being used in the fingerprint: > {code} > @Test > public void testResourceValueInFingerprint() throws IOException{ > final String fp1 = > fingerprinter.createFingerprint(getResourceBytes("/nifi/fingerprint/flow1a.xml"),null); > assertEquals(3,StringUtils.countMatches(fp1,"success")); > } > {code} > Additionally, the <name> tag isn't being included in the fingerprint either. > While the following solution has not been tested, it is possible that this > could be fixed by adding the following line to the addConnectionFingerprint() > method \[2\]: > {code} > appendFirstValue(builder, DomUtils.getChildNodesByTagName(connectionElem, > "name")); > {code} > \[1\] > https://github.com/apache/nifi/blob/270944ec692e12c221cdff202bdab56309dfcfd7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java#L861-864 > \[2\] > https://github.com/apache/nifi/blob/270944ec692e12c221cdff202bdab56309dfcfd7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java#L857 -- This message was sent by Atlassian JIRA (v6.3.4#6332)