There is an edge case that can cause a NodeExists exception. If a task completes and writes its completed node to ZK and in the next instance the system goes down, The DistributedQueue recipe won't have a chance to remove the queued message. On the next restart the queued message will get processed and the task will re-execute. When it tries to write its completed node, it will fail. I've added two checks. First, before the task executes, check to see if the completed node is already there. Lastly, ignore NodeExists