nifi-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benjamin Garrett <benjamingarret...@gmail.com>
Subject errors while importing templates of process groups created from templates of other process groups
Date Wed, 22 Mar 2017 19:56:29 GMT
Today I tried to export a fairly complicated nifi template (several layers
deep of process groups within process groups).  I imported it on a
different nifi host/instance, and encountered two issues.
1. When importing the template, no errors messages are encountered, however
an entire subProcessGroup was missing from the flow.  Also a connection was
drawn to the wrong subProcessGroup.
2. I then made some modifications to the original flow, exported a new
template, and this time during template import there was an error message
pop-up: "Cannot add Connection to Process Group because its destination
does not belong to this Process Group".  After the error message pop-up,
the root process group still shows up in the UI, however all connections
(between all processors/groups, and within all process groups) are now
missing.

I have encountered the problem(s) on both nifi 1.1.1 and 1.1.2 (on CentOS 6
and 7).  The problem(s) may be related to:
https://issues.apache.org/jira/browse/NIFI-3509

I was able to reproduce both of the issues above with a much simpler flow
than my original flow.  I would be able to share any of the xml files for
this simpler flow upon request.  Here are the steps to reproduce:

1. Create Process Group 'Test'
2. Within the 'Test' process group, define another process group
'InnerGroupA'.  Within 'InnerGroupA', define a simple flow: 'Input' input
port -> an UpdateAttribute processor -> and an 'Output' output port.
3. Within the 'Test' process group, define a simple flow such as GetFile ->
InnerGroupA -> LogAttribute.
4. Select the 'InnerGroupA' process group.  Create a Template using only
the 'InnerGroupA' process group and name the template
'InnerGroupATemplate'.
5. Within the 'Test' process group, import the 'InnerGroupATemplate'.
Notice how by default it is named 'Copy of InnerGroupA'.  Rename it to
'InnerGroupB'.
6. Within the 'Test' process group, make sure that 'InnerGroupB' has its
Output connected to LogAttribute.
7. Within the 'Test' process group, for GetFile, make sure that its output
is MOVED/CHANGED to 'InnerGroupB'.  After this, GetFile should be pointing
to InnerGroupB only (instead of InnerGroupA).
8. Select the 'Test' process group.  Create a template using only the
'Test' process group and name the template
'GetFileShouldPointToInnerGroupBTemplate'.
9. Now try to import the 'GetFileShouldPointToInnerGroupBTemplate' (on a
different nifi instance, or the same nifi instance, it doesn't matter).
Notice how there are no errors while importing this template.  However,
once you place the template on the canvas, notice how the InnerGroupB group
has completely disappeared from within the Test process group.  Moreover,
the connection from GetFile is erroneously pointing to InnerGroupA (instead
of InnerGroupB, which is missing anyway).
10. Now, return to the original 'Test' process group that you started
with.  Within 'InnerGroupB', import the 'InnerGroupATemplate' template.  By
default it will be called 'InnerGroupA', so rename it to 'SubInnerGroupC'
just so we don't get it confused with the other process groups.
11. Within 'InnerGroupB', change UpdateAttribute's output to point to
SubInnerGroupC.
12. Within 'InnerGroupB', make SubInnerGroupC's output point to the port
called 'Output'.
13. Return to the original 'Test' process group, and delete the
'InnerGroupA' group (it will require you to delete the output connection to
LogAttribute).
14. Select the original 'Test' process group.  Create a template using only
the 'Test' process group and name the template
'ReproducesErrorMessagePopupTemplate'.
15. Now try to import the 'ReproducesErrorMessagePopupTemplate' (on a
different nifi instance, or the same nifi instance, it doesn't matter).
There will be an error message pop-up: "Cannot add Connection to Process
Group because its destination does not belong to this Process Group".

In summary, you can encounter these erors if you have a parent/root process
group that contains multiple subProcessGroups, and either:
(1) some of those subProcessGroups were created via a template of a first
subProcessGroup that still lives in the parent/root process group, or
(2) there is a deep hierarchy of subProcessGroups within other
subProcessGroups, and you created some of these from templates of a first
subProcessGroup. Subsequently you delete that first subProcessGroup that
was used as a basis of the template.

Let me know if you need any further info.

Thanks!
Ben Garrett

Mime
View raw message