[ https://issues.apache.org/jira/browse/NIFI-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15364849#comment-15364849 ]
ASF GitHub Bot commented on NIFI-2159: -------------------------------------- GitHub user markap14 opened a pull request: https://github.com/apache/nifi/pull/612 NIFI-2159: Fixed bug that caused relationship names not to get added to fingerprint You can merge this pull request into a Git repository by running: $ git pull https://github.com/markap14/nifi NIFI-2159 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/612.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #612 ---- commit 6063c7df62d4e9f5216a67d6e981a2fe710c2f19 Author: Mark Payne <marka...@hotmail.com> Date: 2016-07-06T18:35:51Z NIFI-2159: Fixed bug that caused relationship names not to get added to fingerprint ---- > 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)