Support Questions

Find answers, ask questions, and share your expertise
Announcements
Celebrating as our community reaches 100,000 members! Thank you!

Nifi autoload custom nar - how to reload the nar with changes

avatar
Master Collaborator

Hello Experts,

I have a requirement where I need to re-load my custom processors nar without restarting Nifi.

I tried with nifi.nar.library.autoload.directory option, If I freshly place new nar first time in autoload directory it loads automatically.

But if I replace the nar in autoload directory again with some enhancements, it does not get reloaded in nifi.

I tried with changing nar version, with that nifi loaded that new version nar but that resulted in 2 different versions processors in Nifi (it does not unload the pre version nar)

image (5).png

Is there any any "auto reload" feature for custom nar or something like unload prev version and load new version automatically without restart?

Any help/suggestion is much appreciated.

Thanks

Mahendra

1 ACCEPTED SOLUTION

avatar
Super Mentor

@hegdemahendra 
The autoload capability in NiFi can only auto-load new nars added to the directory.  It does not handle unload or reload.  

The reason for this is because a reload would require the upgrade of existing components using a previously uploaded nar.  This process would require the stopping of all components added to canvas from that nar, upgrading all those components to the new nar version, and then starting the components again.  You also have the issue with the fact that the flow.json.gz has already been loaded in to memory with a different component version. Then you also have the issue of when someone adds a new nar version and does not remove the old nar version first.  You should be able to click on a component on the canvas once multiple version of same class are loaded and switch to the other version.   

With the way NiFi is designed, NiFi will allow multiple versions of the same components to be loaded (always been that way).  So there has never been the capability when multiple versions of the same component are loaded to trigger an upgrade of any components from those duplicate component classes on the canvas.

NiFi can only change a component's version on startup and only if only one version of the component class exists on startup.  On startup, NiFi loads the NiFi lib nars and any nars found in custom lib folders or autoload directory.  These nars get unpacked in to a work directory.  NiFi then starts loading the dataflow from the flow.json.gz file.  The flow.json.gz contains each components class, version, and configuration.  When loading a component where version is not found but ONLY one different version of that same component class is found, NiFi will switch that component that version of the class (could be older version or newer).  If any component versions changed on startup a new flow.json.gz is written out to match what is loaded in to memory.

If you found any of the suggestions/solutions provided helped you with your issue, please take a moment to login and click "Accept as Solution" on one or more of them that helped.

Thank you,
Matt

View solution in original post

1 REPLY 1

avatar
Super Mentor

@hegdemahendra 
The autoload capability in NiFi can only auto-load new nars added to the directory.  It does not handle unload or reload.  

The reason for this is because a reload would require the upgrade of existing components using a previously uploaded nar.  This process would require the stopping of all components added to canvas from that nar, upgrading all those components to the new nar version, and then starting the components again.  You also have the issue with the fact that the flow.json.gz has already been loaded in to memory with a different component version. Then you also have the issue of when someone adds a new nar version and does not remove the old nar version first.  You should be able to click on a component on the canvas once multiple version of same class are loaded and switch to the other version.   

With the way NiFi is designed, NiFi will allow multiple versions of the same components to be loaded (always been that way).  So there has never been the capability when multiple versions of the same component are loaded to trigger an upgrade of any components from those duplicate component classes on the canvas.

NiFi can only change a component's version on startup and only if only one version of the component class exists on startup.  On startup, NiFi loads the NiFi lib nars and any nars found in custom lib folders or autoload directory.  These nars get unpacked in to a work directory.  NiFi then starts loading the dataflow from the flow.json.gz file.  The flow.json.gz contains each components class, version, and configuration.  When loading a component where version is not found but ONLY one different version of that same component class is found, NiFi will switch that component that version of the class (could be older version or newer).  If any component versions changed on startup a new flow.json.gz is written out to match what is loaded in to memory.

If you found any of the suggestions/solutions provided helped you with your issue, please take a moment to login and click "Accept as Solution" on one or more of them that helped.

Thank you,
Matt