# Atomic processing of multiple nodes

**URL:** <https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668>\
**Category:** General\
**Created:** [14 May 2021 20:30 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668 "2021-05-14T20:30:06Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [19 June 2021 07:19 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/21 "2021-06-19T07:19:29Z")

</div>

> [@augjoh](#):
>
> Not all messages reach the debug node at the end.

Is that by design?

> [@augjoh](#):
>
> How can I determine that all (that is sometimes 1 and sometimes 2) messages have reached the debug node in the end?

If you have an else/otherwise clause you could set some flag in the "missing message" and send it anyway - at the end of the flow, you can then check this flag and discard the message.

Note: I am assuming I understood your requirement. If I'm way off, please add a bit more detail to your question.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [22 June 2021 03:16 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/22 "2021-06-22T03:16:10Z")

</div>

In this simplified example this is possible, but the real flow is too complex to flag all messages and introduce alternative paths for empty accounting messages. Wouldn't that impose extra work?

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [22 June 2021 06:03 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/23 "2021-06-22T06:03:18Z")

</div>

However you do locking there must be defined entry and exit points to lock and unlock the code. You started by suggesting using the group feature for locking and this would suffer from exactly the same problem.  
However complex the flow it should not be difficult to accomplish with the semaphore node, you just have to make sure that you don't have anywhere in the flow where the flow terminates without releasing the semaphore. Is there a particular situation where this is not possible?

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [2 August 2021 05:06 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/24 "2021-08-02T05:06:17Z")

</div>

Dear @Colin, you see the difficulties here, you're placing on an ordinary user 🙂. I want to use a low-code platform, because I don't want to take care of all this implementation details. Checking a box to get everything synchronized seems to be doable for me, though. I suppose, that the node-red code, does have a single place, where messages enter/exit nodes or groups. It would be much more easy to place a WeakSet here and take care of passing messages.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [2 August 2021 08:14 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/25 "2021-08-02T08:14:11Z")

</div>

> [@augjoh](#):
>
> you see the difficulties here, you're placing on an ordinary user

If you want to enact a complex process, a low-code solution will not help you. Because you still have to represent the logic which itself is complex. No computer system can reliably do that, and certainly not one that you do not contribute to financially.

My advice would be to hire someone to create the logic for you, wrap it into a custom node if needed and then you will be good to go.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [2 August 2021 10:02 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/26 "2021-08-02T10:02:19Z")

</div>

> [@augjoh](#):
>
> I want to use a low-code platform

The Semaphore node is a no code solution. Just add them around the section you want to protect. What is the problem?

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [2 August 2021 12:55 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/27 "2021-08-02T12:55:30Z")

</div>

The latest version (2.x)of the delay node may also help. You can configure it to rate limit mode. With the time interval set to some long timeout interval ( in case your process never completes). Then when your process does complete send just a msg.flush set to 1 back to the delay node to release the next message.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [14 August 2021 08:27 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/28 "2021-08-14T08:27:49Z")

</div>

@Colin : I've tried to describe the problem with my last example flow above. The solution with a semaphore node needs a start and _one_ endpoint inside the flow. Within my flows it is not possible to determine the endpoint reliable. Sometimes it isn't reached and the semaphore stays locked forever.

@dceejay : The delay node, seems to provide the same functionality as the semaphore node. Without the ability to specify an exit node, it is not possible to call the flush node.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [14 August 2021 08:31 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/29 "2021-08-14T08:31:14Z")

</div>

> [@augjoh](#):
>
> Sometimes it isn't reached and the semaphore stays locked forever.

Is that due to an error? You can use a catch node to clear the semaphore.

Alternatively, you could set away a trigger node to clear the semaphore (reset the trigger if your msg reaches the end)

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [14 August 2021 08:54 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/30 "2021-08-14T08:54:10Z")

</div>

> [@augjoh](#):
>
> The solution with a semaphore node needs a start and _one_ endpoint

No it doesn't, you can have as many leave nodes as you like, provided one and only one of them is triggered. Though personally I wouldn't do that, if I have multiple exit points I would just link them all the same leave node.

> [@augjoh](#):
>
> Sometimes it isn't reached and the semaphore stays locked forever.

That is an unsolvable problem. Any sort of locking requires that you know when to unlock it. Your original suggestion was to allow locking by putting the nodes in a group. In that context how would the group know when to let the next message in if no message flows out?  
If you know that messages get lost sometimes then perhaps you can use a Catch node as @Steve-Mcl suggests, or add a timeout function (using a Trigger node) such that if nothing happens within a particular time then the timeout triggers the unlock.

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [14 August 2021 10:48 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/31 "2021-08-14T10:48:18Z")

</div>

The delay node must be configured with a timeout, so in the worst case that event could be used to flush/trigger the next event.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [21 August 2021 06:41 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/32 "2021-08-21T06:41:52Z")

</div>

@Colin The conditions to lock/unlock are quite clear. Take the following example:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/7/17d7a3a3646c92a617bbdef0fd0fbb19cbdadc12.png)

- **Lock** : When the first message is entering a node within the box, or the first message emerges from a node inside the box.
- **Unlock** : When no messages are processed by nodes inside the box.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [21 August 2021 06:52 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/33 "2021-08-21T06:52:17Z")

</div>

Can you export that demo flow (CTRL+E) and paste it in a reply

Please use the `</>` code button and paste flow between the backticks.

I will take a look at it and propose a solution to your requirement for atomic processing.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [21 August 2021 10:08 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/35 "2021-08-21T10:08:08Z")

</div>

I have just realised what you have been trying to say. You want the system to keep track of whether there are still any messages active inside the box. I suppose that could potentially be done if all the nodes implemented the Complete action. Currently not all nodes do that, as it was only recently introduced.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [22 August 2021 10:08 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/36 "2021-08-22T10:08:49Z")

</div>

@colin: As I've said previously, perhaps it is possible to place all relevant messages in a [WeakSet](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) and do not rely on a potentially missing `complete` action.

@Steve-Mcl Here's the sample flow:

```auto
[{"id":"f542fe9c.732af","type":"tab","label":"Flow 11","disabled":false,"info":""},{"id":"819633a4b4b672e7","type":"group","z":"f542fe9c.732af","name":"Serialize me","style":{"stroke":"#ff0000","fill":"#ffffbf","label":true},"nodes":["80749176.dab0c","269f16d2.b9e1ba","ba539239.b63a3","66effb54.4725e4","b2a178e7ae426431"],"x":234,"y":59,"w":312,"h":322},{"id":"ce1be0dc.d9c39","type":"inject","z":"f542fe9c.732af","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":100,"wires":[["80749176.dab0c","66effb54.4725e4"]]},{"id":"80749176.dab0c","type":"function","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":100,"wires":[["ae192530.d5a898"]]},{"id":"269f16d2.b9e1ba","type":"function","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":340,"wires":[["ae192530.d5a898"]]},{"id":"ba539239.b63a3","type":"switch","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"50 %","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"0.5","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":370,"y":280,"wires":[["269f16d2.b9e1ba"]]},{"id":"66effb54.4725e4","type":"change","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"Random","rules":[{"t":"set","p":"payload","pt":"msg","to":"$random()","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":220,"wires":[["ba539239.b63a3"]]},{"id":"ae192530.d5a898","type":"debug","z":"f542fe9c.732af","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":200,"wires":[]},{"id":"b2a178e7ae426431","type":"inject","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":390,"y":160,"wires":[["80749176.dab0c"]]}]

```

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [22 August 2021 12:13 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/37 "2021-08-22T12:13:34Z")

</div>

This works...

```auto
[{"id":"ce1be0dc.d9c39","type":"inject","z":"f542fe9c.732af","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":180,"wires":[["272aca98d76d7bf4","40acda1f8ef2ae5c"]]},{"id":"ae192530.d5a898","type":"debug","z":"f542fe9c.732af","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1650,"y":340,"wires":[]},{"id":"1657046985ddb193","type":"status","z":"f542fe9c.732af","name":"","scope":["272aca98d76d7bf4","151fdc9a359343a0"],"x":580,"y":500,"wires":[["883c18f1881ff21d"]]},{"id":"75552836b99d60e6","type":"debug","z":"f542fe9c.732af","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1210,"y":500,"wires":[]},{"id":"883c18f1881ff21d","type":"switch","z":"f542fe9c.732af","name":"semaphore active?","property":"status.text","propertyType":"msg","rules":[{"t":"nempty"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":750,"y":500,"wires":[["04f984463b6b12fd"],["9d4969d173d43939"]]},{"id":"04f984463b6b12fd","type":"trigger","z":"f542fe9c.732af","name":"","op1":"","op2":"true","op1type":"nul","op2type":"bool","duration":"10","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":990,"y":520,"wires":[["e9ac5f7c48456ed4"]]},{"id":"9d4969d173d43939","type":"change","z":"f542fe9c.732af","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":560,"wires":[["04f984463b6b12fd"]]},{"id":"214564d761b2015c","type":"catch","z":"f542fe9c.732af","name":"","scope":["80749176.dab0c","269f16d2.b9e1ba","ba539239.b63a3","66effb54.4725e4"],"uncaught":false,"x":570,"y":440,"wires":[["e9ac5f7c48456ed4"]]},{"id":"e9ac5f7c48456ed4","type":"semaphore-leave","z":"f542fe9c.732af","config":"78bba808ba5995c5","name":"","x":1190,"y":440,"wires":[["75552836b99d60e6"]]},{"id":"151fdc9a359343a0","type":"semaphore-leave","z":"f542fe9c.732af","config":"78bba808ba5995c5","name":"","x":1450,"y":340,"wires":[["ae192530.d5a898"]]},{"id":"819633a4b4b672e7","type":"group","z":"f542fe9c.732af","name":"Serialize me","style":{"stroke":"#ff0000","fill":"#ffffbf","label":true},"nodes":["80749176.dab0c","269f16d2.b9e1ba","ba539239.b63a3","66effb54.4725e4","b2a178e7ae426431","272aca98d76d7bf4","40acda1f8ef2ae5c","1aa613a64937c127","304ed7f874953707"],"x":494,"y":139,"w":792,"h":242},{"id":"80749176.dab0c","type":"function","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1200,"y":180,"wires":[["151fdc9a359343a0"]]},{"id":"269f16d2.b9e1ba","type":"function","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","func":"if (msg.payload > 0.8) {\n throw new Error(\"Number too high\")\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1200,"y":300,"wires":[["151fdc9a359343a0"]]},{"id":"ba539239.b63a3","type":"switch","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"50 %","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"0.5","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1050,"y":340,"wires":[["269f16d2.b9e1ba"],["151fdc9a359343a0"]]},{"id":"66effb54.4725e4","type":"change","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"Random","rules":[{"t":"set","p":"payload","pt":"msg","to":"$random()","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":300,"wires":[["ba539239.b63a3"]]},{"id":"b2a178e7ae426431","type":"inject","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":610,"y":220,"wires":[["272aca98d76d7bf4"]]},{"id":"272aca98d76d7bf4","type":"semaphore-take","z":"f542fe9c.732af","g":"819633a4b4b672e7","config":"78bba808ba5995c5","name":"","x":820,"y":180,"wires":[["1aa613a64937c127"]]},{"id":"40acda1f8ef2ae5c","type":"semaphore-take","z":"f542fe9c.732af","g":"819633a4b4b672e7","config":"78bba808ba5995c5","name":"","x":600,"y":300,"wires":[["304ed7f874953707"]]},{"id":"1aa613a64937c127","type":"delay","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"x":980,"y":180,"wires":[["80749176.dab0c"]]},{"id":"304ed7f874953707","type":"delay","z":"f542fe9c.732af","g":"819633a4b4b672e7","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"x":760,"y":300,"wires":[["66effb54.4725e4"]]},{"id":"78bba808ba5995c5","type":"semaphore-config","name":"MAX-2","capacity":"2"}]

```

however i am not 100% happy with it. Gonna take another look later.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [2 October 2021 05:00 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/38 "2021-10-02T05:00:26Z")

</div>

Thanks for posting this flow, got some error when running nrlint:

```auto
TypeError: Cannot read property 'insert' of undefined
    at Object.node (/home/augjoh/.node-red/projects/atomic/node_modules/nrlint/lib/rules/no-overlapping-nodes.js:183:39)
    at /home/augjoh/.node-red/projects/atomic/node_modules/nrlint/lib/linter.js:119:35
    at Array.forEach (<anonymous>)
    at dispatchVisitors (/home/augjoh/.node-red/projects/atomic/node_modules/nrlint/lib/linter.js:115:26)
    at /home/augjoh/.node-red/projects/atomic/node_modules/nrlint/lib/linter.js:158:17
    at NRNode.walk (/home/augjoh/.node-red/projects/atomic/node_modules/@node-red/flow-parser/lib/NRObject.js:65:13)
    at /home/augjoh/.node-red/projects/atomic/node_modules/@node-red/flow-parser/lib/NRContainer.js:37:35
    at Map.forEach (<anonymous>)
    at NRFlow.walkContents (/home/augjoh/.node-red/projects/atomic/node_modules/@node-red/flow-parser/lib/NRContainer.js:37:20)
    at NRFlow.walk (/home/augjoh/.node-red/projects/atomic/node_modules/@node-red/flow-parser/lib/NRFlow.js:88:15)

```

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [2 October 2021 07:18 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/39 "2021-10-02T07:18:20Z")

</div>

At a guess, you have found a bug in nrlint. You should raise an issue on the repository.

---

<div class="post-metadata">

**Author:** ![augjoh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/augjoh/32/26464_2.png) [@augjoh](https://discourse.nodered.org/u/augjoh)\
**Post date:** [1 November 2021 06:06 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/40 "2021-11-01T06:06:18Z")

</div>

@Steve-Mcl If your flow triggers a bug in nrlint, I think you should file the issue, because you're the only one who can provide more details here.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [1 November 2021 07:53 UTC](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668/41 "2021-11-01T07:53:51Z")

</div>

@augjoh I evaluated all the info in the thread and "guessed" it might be a bug. I dont have nrlink installed and I dont have the information necessary to file an issue. You on the other hand (who started this thread) do have and it is you seeing this issue.

It is pretty simple to raise an issue - just go to the issues page and fill out the details.

[Previous page](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668.md?page=1)

[Next page](https://discourse.nodered.org/t/atomic-processing-of-multiple-nodes/45668.md?page=3)
