It seems reasonable to me to add a `ExecutionNode getExecutionNode()` method to ProcessContext. This enum already exists in nifi-api, but I don't believe that it's exposed anywhere to the Processor itself.
> On Aug 16, 2019, at 11:32 AM, Peter Wicks (pwicks) <pwi...@micron.com> wrote: > > Bryan, > > I'm familiar with the getNodeTypeProvider method. Unfortunately, this does > not differentiate between processors that are scheduled to run only on the > Primary node and those that are scheduled to run on all of them. > > So you're saying, a better fix would be to properly call > scheduled/unscheduled, and when a processor is unscheduled make sure it then > handles this; but that it's complicated. I can believe hat. > > But, in the meantime, there probably isn't a problem with exposing this piece > of scheduling information in the ProcessContext? > > Thanks, > Peter > > -----Original Message----- > From: Bryan Bende <bbe...@gmail.com> > Sent: Friday, August 16, 2019 9:19 AM > To: dev@nifi.apache.org > Subject: [EXT] Re: OnPrimaryNodeStateChange vs Primary Only configuration > > AbstractSessionFactoryProcessor has a method > > getNodeTypeProvider().isPrimary() > > The ultimate fix for your problem is that a processor shouldn't have it's > onScheduled called at all unless it is actually schedule to run on that node. > Currently it calls onScheduled on all nodes, but then never calls onTrigger > on the ones where it isn't scheduled. There is a long standing JIRA for this, > but it's a complex fix. > > On Fri, Aug 16, 2019 at 11:07 AM Peter Wicks (pwicks) <pwi...@micron.com> > wrote: >> >> I'm working on a bug fix for HandleHttpRequest and need to check if a >> processor is configured to run only on primary node (and not if a processor >> has the attribute that ONLY allows it to run on primary node). >> Here is the scenario for background: >> >> * NiFi cluster, but all nodes are on the same physical machine; we do >> this to let developers develop/test in a cluster without needing a lot of >> infrastructure before deploying to the real prod cluster. >> * To avoid Port conflicts, HandleHttpRequest is setup to run only on >> master. But, if there is a master node change then the Http server is not >> properly shutdown and we get a port conflict when the new master node starts >> up the new instance of the processor. >> >> The problem is I don't think the Primary Only scheduling configuration is >> exposed to the processor. I'd like to do something like the code below: >> >> @OnPrimaryNodeStateChange >> public void onPrimaryNodeChange(final PrimaryNodeState newState) { >> // If this processor is running in Primary Only >> // and this is processor is not master, shutdown the http server. >> If(this.isMasterOnlyScheduled) shutdown(); >> } >> >> I can do some work to expose this, but I thought I'd ask in case I'm missing >> it. >> >> Thanks, >> Peter