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]

Reply via email to