[ 
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)

Reply via email to