Wow, thanks for this information! Just last week I saw code that modified attributes in a stream:
flowFile.getAttributes().entrySet().stream().filter(e -> e.getKey().startsWith("foo")) .forEach(e -> session.putAttribute(flowFile, "original-" + e.getKey, e.getValue())); and I wondered how that could possibly work since the return value of session.putAttribute is ignored! Now I know. -- Mike On Tue, May 7, 2024 at 3:02 PM Russell Bateman <r...@windofkeltia.com> wrote: > Yes, what you described is what was happening, Mark. I didn't display > all of the code to the session methods, and I did re-read the in-coming > flowfile for different purposes than I had already read and written it. > So, I wasn't helpful enough. In the end, however, I had forgotten, > immediately after the call to session.putAllAttributes(), to update the > resulting flowfile for passing to session.transfer(). That solved it for > 1.1.2 which wasn't necessary for 1.13.2 or later versions. Being > helpful, the newer versions made me a spoiled, entitled child and I will > repent immediately. > > Thanks, guys! DevOps are happy they don't have to upgrade the customers > to NiFi 1.13.2. (In a way, I'm unhappy about that, but...). > > Best regards, > > Russ > > On 5/7/24 11:53, Mark Payne wrote: > > The call to session.putAttribute would throw an Exception because you > > provided an outdated version of the flowFile (did not capturing the > > result of calling session.write) > > > > Now, as NiFi matured, we found that: > > (a) for more complex processors that aren’t just a series of sequential > > steps it becomes difficult to manage all of that bookkeeping. > > (b) it was not intuitive to require this > > (c) the ProcessSession already had more or less what it needed in order > > to determine what the most up-to-date version of the FlowFile was. > > > > So we updated the ProcessSession to automatically grab the latest > > version of the FlowFile for these methods. But since you’re trying to > > run an old version, you’ll need to make sure that you capture all of > > those outputs and always keep track of the most recent version of a > > FlowFile. >