You would probably want to use the replace method in StateManager [1]
to perform a compare-and-set which would make sure what you are
sending back is accurate based on the previous state you retrieved.

The compare and set operation is implemented by the underlying
provider - write ahead log for local, and ZooKeeper for cluster (or
Redis).

[1] 
https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/components/state/StateManager.java#L92

On Fri, Aug 9, 2019 at 2:11 PM Joe Witt <[email protected]> wrote:
>
> Russell
>
> As I understand it the state is specific to an instance of a processor on
> the flow.  Your safety ends there.  If you allow that processor to have
> multiple tasks running concurrently then you'll need to protect usage of
> that state mechanism just as you would with any other variable in the scope
> of the processor.  If the scope is local then the above is really all you
> need to think about.  If the scope is cluster wide then generally speaking
> I think the intent of usage for that often is associated with a primary
> node only thing like a ListX processor (ListFile) with the idea being that
> the state can be restored by some other node if that could get assigned
> that role.  I'm not clear on the role of cluster wide state otherwise.
> Others will have to comment on that.
>
> Thanks
>
> On Fri, Aug 9, 2019 at 1:54 PM Russell Bateman <[email protected]>
> wrote:
>
> > I'm assuming that the StateManagerprotects itself against race
> > conditions for the consuming (custom) processor, but I'd like
> > confirmation on that. Let's say something simple like we get an integer
> > out of state to which we can add one to get the next (piece of work to
> > do), then immediately bump and write that value plus 1 for the next
> > thread to get. In the time it took us to get the value back, bump it by
> > 1, then put it out (I'm assuming Scope.LOCAL), I don't see that the
> > StateManageris prevented from handing out that same value to another
> > instance or task of my processor.
> >
> > How does StateManager Scopeaffect this? (By whether the instance of
> > state is per host or per cluster?)
> > How does processor behavior annotation affect this?
> > How does processor scheduling configuration (concurrent task count)
> > affect this?
> >
> > Thanks for any comments.
> >

Reply via email to