Hi Qiufang, authors, I was reviewing the latest draft and thinking about the immutability of lists/leaf-lists again.
Foe me at least, I think that the default (and most obvious) behaviour is that if the parent container of a list (or leaf-list) is marked as immutable then the list element itself is immutable (cannot add, remove, or reorder entries), and all entries within that list are immutable as well. I.e., the whole subtree is immutable. I think that this is the same way that Kent is thinking about it. In an example similar to the one you gave below, if you want to have a container with a couple of immutable fields, and a list that has some immutable elements (but more could be added), then could the solution be to mark the container as being mutable, but for the fields within the container and each list entry be marked as immutable? > Throughout this section, the word "change" refers to creating, or > deleting a node, along with, where applicable, changing its value. I would like to better understand the aspect of how deletes are handled in two cases: 1. Section 5 effectively states that you cannot delete a node with an immutable annotation. Do you mean that a client cannot delete the node from running (i.e., the server would reject the config change if you tried), or that a client can delete the node from running (which I think should be the allowed), but the immutable value would be merged back in from system and hence the net effect is that the data node would still exist in <intended>. 2. If a parent node is mutable, and a child node is immutable, then I presume that you effectively cannot delete the parent node. I.e., depending on the answer to my question above then either the server should reject the change because it is implicitly deleting an immutable child node, or it should accept the change, but the node would be merged back into intended, so the net effect is that the node still exists. I think that clarifying these two points in the draft would be helpful. Kind regards, Rob From: maqiufang (A) <[email protected]> Date: Friday, 25 April 2025 at 04:40 To: Kent Watsen <[email protected]>, [email protected] <[email protected]> Subject: [netmod] Re: 2nd WGLC on immutable-flag Hi, Kent, Thanks for the good comments, please see my reply below inline. From: Kent Watsen [mailto:[email protected]] Sent: Wednesday, April 16, 2025 11:20 PM To: [email protected] Subject: [netmod] Re: 2nd WGLC on immutable-flag Hi Authors, Reading the -03 diffs, some things caught my attention: Section 4.2.2 contains the sentence: "To enable a RESTCONF client to discover if the "with-immutability" query parameter is supported by the server, the following capability URI is defined: urn:ietf:params:restconf:capability:with-immutability:1.0". Is this capability RESTCONF specific? [Qiufang] Yes, this capability is RESTCONF specific. Note there is a “restconf” in the middle of the URI, and this aligns with the other capability URIs defined in 8040 and 8527. Should this sentence be moved to the common-with-NETCONF Section 4.2? [Qiufang] Since this is intended to be RESTCONF specific, I don’t feel it should be moved to sec.4.2. A side comment is that I never find any existing capability URIs that works for both NC and RC, it seems that the consistent style is to have the protocol name in the middle of the URI for specific protocol. Isn't searching YANG Library an equally valid way to discover if the server supports the flag? [Qiufang] Yes for the NETCONF protocol. But for RESTCONF, it might be good to be consistent with the definition of “with-defaults” and “with-origin” query parameter. A RESTCONF server implementing the yang module (searching YANG library) indicates that it supports the get-data RPC operation with the flag; while the flag defined as the query parameter is added to the GET method, so I don’t feel they are the same. Note 8527 does require the usage of the YANG library, but it also defines the query parameter and related capability URI for “with-defaults” and “with-origin” parameters. 2) s/creating, or deleting a node/creating or deleting a node/ (remove comma) [Qiufang] Fixed. 3) Sections 5.2 (leaf-list) and Section 5.4 (list) contain the text "... as a whole can only inherit immutability from a parent node (e.g., container). It might be helpful to state that this limitation is from RFC 7952. [Qiufang] Take sec.5.2 leaf-list for example, would the following update work? OLD: A leaf-list as a whole can only inherit immutability from a parent node (e.g., container)… NEW: As per the restrictions in RFC 7952, annotations cannot be attached to an entire leaf-list instance and only to individual leaf-list entries, which implies a leaf-list as a whole can only inherit immutability from a parent node (e.g., container)… 4) Sections 5.2 (leaf-list) and Section 5.4 (list) contain the text: "but that is identical to each individual leaf-list entry being annotated and has no bearing on the entry ordering and addition of new entries. Mechanisms for declaring the immutability of leaf-list entry ordering and addition of new leaf-list entries may be defined in future documents." Some of this text is from before, but some is new. After reviewing the conversation for Rob's review, I'm unsure what prompted the new text. For lists, I don't agree with the immutability of a list is the same as each entry being immutable. Of course, each list-entry may also be immutable, but these are distinct things. IMO, an immutable list is one that cannot have entries added, removed, or reordered (for "ordered-by user" lists), where each "entry" is solely defined by its keys. This implies that the list entry's keys are immutable (toggling to mutable has no affect) but also that non-key parts of the list-entry may be *changed*, assuming the list-entry is toggled to be immutable. For leaf-lists, since the entries are scalar, I agree that an immutable leaf-list implies that the leaf-list entries are also immutable (toggling to mutable has no affect). Again, for "ordered-by user" leaf-lists, immutability should mean that the order cannot change either. [Qiufang] Maybe this needs more discussion, but I recall at the interim we had before when discussing this work, we kind of agree that we don’t want the immutable flag to have bearing on the ordering/entries-adding/deleting. A case that was similar to our previous discussion is, suppose there is an immutable container with a couple of list entries inside it, so the list as a whole is immutable as well, but there might be some other list entries that were actually immutable=”false” and just deleted thus not appearing, the clients should be able to add them back to the list. Maybe a better way to specify the immutability of leaf-list/list is to define an YANG extension for this, but currently we leave this out of scope in the draft. Also see some minutes from https://datatracker.ietf.org/doc/minutes-interim-2024-netmod-02-202402061400/: Annotation for a list or leaf-list overall: · not possible in XML encoding, so perhaps we should avoid it for all encodings · annotation for individual list entries or leaf-list entries is fine · a parent container of the list may have the annotation, but that should mean the same thing as each individual list entry being annotated · in theory it could be done at the schema level with an extension 5) Section 5.3 (container) and 5.4 (list) contain the text: "Descendant nodes of the container recursively inherit the immutability of the container, unless the immutability is overridden by an immutable="false" annotation on a descendant node." This text regards toggling immutability one direction, though the statement is true for both directions. I suggest this instead: Descendant nodes of the container recursively inherit the immutability of the container, unless the immutability is overridden by an "immutable" annotation on a descendant node. [Qiufang] Sure, fixed. 6) Section 9 (YANG Module) contains new "description" text: The 'with-immutability' parameter is only valid for a system, intended, or operational datastore. If 'with-immutability' is used with an invalid datastore, then the server MUST return an <rpc-error> element with an <error-tag> value of 'invalid-value'."; Is this text needed, given the "when" statement would cause a protocol error otherwise? [Qiufang] But there is no harm here, right? I think there might be some merit for the second sentence to be kept, which gives the error-tag information and aligns with the “with-origin” and “with-defaults” definition in 8526. Perhaps remove this paragraph in YANG module and move the second sentence into the normative section? 7) Section A.4 (LNE) The reference to RFC 8530 seems out of place. Maybe this? OLD: A logical network element (LNE) is an independently managed virtual network device made up of resources allocated to it from its host or parent network device [RFC8530]. NEW: A logical network element (LNE), as described in [RFC8530], is an independently managed virtual network device made up of resources allocated to it from its host or parent network device. [Qiufang] Fixed. Thanks a lot. Kent // contributor Best Regards, Qiufang On Apr 16, 2025, at 10:09 AM, Kent Watsen <[email protected]<mailto:[email protected]>> wrote: This email begins a 2nd two-week WGLC on: YANG Metadata Annotation for Immutable Flag https://datatracker.ietf.org/doc/draft-ietf-netmod-immutable-flag/03/ The first WGLC didn't succeed due to insufficient responses. For those that responded before, there is no need to respond again. For others, please take time to review this draft and post comments by Apr 30. Both favorable comments and objections are welcomed. FWIW, all authors (there are no contributors) have responded to being unaware of any IPR that applies to this document: https://mailarchive.ietf.org/arch/msg/netmod/jh5JXtvraZozmZCEcQr1zL-Y0HQ/ Kent (and Lou) _______________________________________________ netmod mailing list -- [email protected]<mailto:[email protected]> To unsubscribe send an email to [email protected]<mailto:[email protected]>
_______________________________________________ netmod mailing list -- [email protected] To unsubscribe send an email to [email protected]
