BUG: AbstractListProcessor stops to call performListing after primary node reelection to same node

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG: AbstractListProcessor stops to call performListing after primary node reelection to same node

Max Viazovskyi
Hi all,

I've encountered the bug when AbstractListProcessor stops performing listing
of entities when after reelection the same node become Primary. I'm using
dokerized NiFi 1.6.0 (Docker Version: 18.03.0-ce) and external Zookeeper.

STEPS TO REPRODUCE:
1. Download  docker-compose.yml
<http://apache-nifi-developer-list.39713.n7.nabble.com/file/t949/docker-compose.yml>  
and  PutAndListSFTP.xml
<http://apache-nifi-developer-list.39713.n7.nabble.com/file/t949/PutAndListSFTP.xml>  
2. Run /docker-compose up -d/ in the folder where you downloaded
docker-compose.yml. This command will run 3 containers - Zookeeper, NiFi
1.6.0 in Cluster Mode with 1 node, SFTPs server
3. After NiFi is up and running (check http://localhost:8080/nifi) upload
PutAndListSFTP.xml template and place it on NiFi canvas. It has simple logic
- generate flow file each 10 seconds and put it on SFTP, in parallel
ListSFTP processor "listens" for the new files and pushes data about them to
NiFi log with LogAttribute processor
4. Update PutSFTP and ListSFTP processors with password admin (to check SFTP
container use following credentials SFTP://admin:admin@localhost:2222)
5. Run the flow
6. Check the NiFi log (/docker logs -f --tail 100 nifi/) - you should see
attributes for the uploaded files on SFTP
7. Check that generated each 10 seconds files appear on SFTP /upload folder
8. Run following command to restart Zookeeper to put NiFi in reelection
state: /docker restart zookeeper/
9. After reelection phase finished check that new files appears on SFTP, but
NO new files info appears in NiFi log

I did remote debug and see when it happens AbstractListProcessor.onTrigger
method always gets to return at  line 377
<https://github.com/apache/nifi/blob/rel/nifi-1.6.0/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/list/AbstractListProcessor.java#L377>
.

To prevent it I suggest to update justElectedPrimaryNode to false just after
entering to the first if-body like here -
https://www.diffchecker.com/LcqetmMO

What do you think?

Thanks,
Max




--
Sent from: http://apache-nifi-developer-list.39713.n7.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: BUG: AbstractListProcessor stops to call performListing after primary node reelection to same node

Bryan Bende
Max,

Thanks for reporting this. I've only glanced at the code quickly, but
I see what you are saying about the boolean never getting set to false
when it hits the context.yield().

I would recommend creating a JIRA with all of this info, and then you
could submit your proposed fix as a pull request against that JIRA.

-Bryan


On Sat, Apr 21, 2018 at 7:06 PM, Max Viazovskyi <[hidden email]> wrote:

> Hi all,
>
> I've encountered the bug when AbstractListProcessor stops performing listing
> of entities when after reelection the same node become Primary. I'm using
> dokerized NiFi 1.6.0 (Docker Version: 18.03.0-ce) and external Zookeeper.
>
> STEPS TO REPRODUCE:
> 1. Download  docker-compose.yml
> <http://apache-nifi-developer-list.39713.n7.nabble.com/file/t949/docker-compose.yml>
> and  PutAndListSFTP.xml
> <http://apache-nifi-developer-list.39713.n7.nabble.com/file/t949/PutAndListSFTP.xml>
> 2. Run /docker-compose up -d/ in the folder where you downloaded
> docker-compose.yml. This command will run 3 containers - Zookeeper, NiFi
> 1.6.0 in Cluster Mode with 1 node, SFTPs server
> 3. After NiFi is up and running (check http://localhost:8080/nifi) upload
> PutAndListSFTP.xml template and place it on NiFi canvas. It has simple logic
> - generate flow file each 10 seconds and put it on SFTP, in parallel
> ListSFTP processor "listens" for the new files and pushes data about them to
> NiFi log with LogAttribute processor
> 4. Update PutSFTP and ListSFTP processors with password admin (to check SFTP
> container use following credentials SFTP://admin:admin@localhost:2222)
> 5. Run the flow
> 6. Check the NiFi log (/docker logs -f --tail 100 nifi/) - you should see
> attributes for the uploaded files on SFTP
> 7. Check that generated each 10 seconds files appear on SFTP /upload folder
> 8. Run following command to restart Zookeeper to put NiFi in reelection
> state: /docker restart zookeeper/
> 9. After reelection phase finished check that new files appears on SFTP, but
> NO new files info appears in NiFi log
>
> I did remote debug and see when it happens AbstractListProcessor.onTrigger
> method always gets to return at  line 377
> <https://github.com/apache/nifi/blob/rel/nifi-1.6.0/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/list/AbstractListProcessor.java#L377>
> .
>
> To prevent it I suggest to update justElectedPrimaryNode to false just after
> entering to the first if-body like here -
> https://www.diffchecker.com/LcqetmMO
>
> What do you think?
>
> Thanks,
> Max
>
>
>
>
> --
> Sent from: http://apache-nifi-developer-list.39713.n7.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: BUG: AbstractListProcessor stops to call performListing after primary node reelection to same node

Max Viazovskyi
Thanks Bryan. Will do it a bit later.



--
Sent from: http://apache-nifi-developer-list.39713.n7.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: BUG: AbstractListProcessor stops to call performListing after primary node reelection to same node

Max Viazovskyi