[
https://issues.apache.org/jira/browse/NIFI-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mark Payne updated NIFI-2159:
-----------------------------
Priority: Blocker (was: Critical)
> 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: Blocker
> 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)