Specifically in this case it's not in a shutdown flow, and even if it was and my example is bad, it doesn't prove my point is wrong. There are obviously many examples where this permissive mode is bad, and this is why the default should behave as of today. I'm trying to argue that there are situations where permissive mode is wanted. For example let's say I have a node (switch), inside the node I have a openflow table and inside the openflow table I have a flow. I can *theoretically* write a code in Interface-Delete that deletes all the flows related to this interface, and in Switch-Delete a code that deletes all the tables of the node, or even the node itself. Now if the switch is deleted, all the Interface delete listeners are triggered too right ? In this case the flow deletions will happen concurrently with the node delete, and I can step on this exception, even though I don't really care it logically failed.
> To solve what you are asking for is to prove that the two deletes were > deleting the same data Not really, I'm specifically talking about cases that the entity you are trying to delete is not there anymore for any reason (Maybe its father was deleted, maybe the entity itself was deleted, etc.). I'm saying that in these specific situations, we will keep the same logic and result for the operation, just not throw an exception to the user. My suggestion is focused on the higher layer (API to user), this is why I specifically talked about ModifiedNodeDoesNotExistException. -----Original Message----- From: Robert Varga [mailto:n...@hq.sk] Sent: Monday, January 23, 2017 12:10 AM To: Sela, Guy <guy.s...@hpe.com>; controller-dev@lists.opendaylight.org; mdsal-...@lists.opendaylight.org; Tom Pantelis <tompante...@gmail.com> Subject: Re: Deleting a node from MD-SAL that doesn't exist / already deleted On 01/22/2017 09:16 AM, Sela, Guy wrote: > Hi > I totally agree with you that it might indicate there is a cleanup code that > runs in an un-coordinated fashion. > There is no value in explaining what causes this problem in this specific > case, because it is probably solvable. > My point was the bigger picture, should we even solve this ? Is this even a > problem that a developer needs to think of? > If you allow "permissive" mode to delete operations, you basically allow the > developer to say - I don't care if someone else is concurrently cleaning up > the same part I'm cleaning, it's doesn't matter to me. As long as it will be > deleted in the end, that's fine by me. > This will not be the default mode, default mode would behave as today. Hello, If the shutdown is uncoordinated, you can have a situation where that other component starts up, and your cleanup will delete its state. It is not a question of 'default mode' or a 'flag'. To solve what you are asking for is to prove that the two deletes were deleting the same data -- and that means we would have to retain complete version history (for as long as there is any snapshots can reference it). This particular call site does not cover deletes only, but rather any subtree overlaps, including unattached subtrees (you are writing /a/b/c/d, /a/b was deleted, what is the result?). See code surrounding https://github.com/opendaylight/yangtools/blob/master/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModificationApplyOperation.java for details. Regards, Robert _______________________________________________ controller-dev mailing list controller-dev@lists.opendaylight.org https://lists.opendaylight.org/mailman/listinfo/controller-dev