Hi Per,

This is a good news, but, please, help us out. 
Consider, we have a node - "te-tunnel" - which among other attributes has two 
key leafref lists:
1) each member of the 1st list points to a "connection" supporting the 
te-tunnel. All connections supporting all te-tunnels are stored in a single 
list of connections. 
2) each member of the 2nd list points to a supporting "te-tunnel" - the 
te-tunnel in question depends on. All te=tunnels including the te-tunnel in 
question, are stored in a single list of te-tunnels.

The question: how the client can retrieve via a single request all attributes 
of the te-tunnel in question along with all parameters of all connections 
supporting the te-tunnel, but with just pointers to supporting te-tunnels (so 
that the interested client can use the pointers to retrieve full data via 
subsequent separate requests) ?

Likewise, how the client can ask for full data of the te-tunnel and all 
supporting te-tunnels and just pointers for supporting connections?

I really appreciate your help,

Igor   

 
-----Original Message-----
From: Per Hedeland [mailto:[email protected]] 
Sent: Monday, October 09, 2017 5:21 PM
To: Igor Bryskin
Cc: [email protected]; [email protected]; [email protected]; 
[email protected]
Subject: Re: [Netconf] [netmod] Retrieving Information Pointed by leafref

Just to be clear: what we're suggesting is that you can use the
already-existing standard NETCONF XPath capability to achieve the desired
result - see https://tools.ietf.org/html/rfc6241#section-8.9

--Per

On 2017-10-09 21:52, Igor Bryskin wrote:
> I agree. For example, a leafref may point not to a singls entity, but to a 
> list of entities, and the client might want to expand all of them into the 
> joint get response.
> 
> Igor
> 
> *From:*Per Hedeland
> *To:*Martin Bjorklund,
> *Cc:*Igor Bryskin,[email protected],[email protected],[email protected],
> *Date:*2017-10-09 15:12:22
> *Subject:*Re: [Netconf] [netmod] Retrieving Information Pointed by leafref
> 
> On 2017-10-09 19:13, Martin Bjorklund wrote:
>> Igor Bryskin <[email protected]> wrote:
>>>
>>> Hi Per,
>>>
>>> Basically, what we need is a way for a client to request something
>>> like this:
>>>
>>> get <XPath> joint with <XPath1, XPath2, ..., XPathn>
>> 
>> ... which is what Per's expression does!  Note that "|" in XPath means
>> "union".
>> 
>> But as Per explained, it only works in some cases (when the leafref
>> acts a "single pointer").
> 
> Well, that particular expression works only in that case - but since it
> is effectively the client that (perhaps based on the data model) decides
> what the leafref-leafs "mean" (in this case the single key of a single
> list), other cases can be handled the same way. E.g. multiple
> leafref-to-key leafs that together give the keys of a multi-key list
> just amounts to a slightly hairier XPath filter...
> 
> --Per
> 
>>> with a server interpreting the request as follows:
>>> if a node pointed by XPath contains a pointer (e.g. key leafref)
>>> matching one of the XPath from the "joint with" list, then the server
>>> must provide the entire body of the node pointed by the pointer,
>>> otherwise, just the pointer (as it happens today, that is, when no
>>> "joint with" list specified).
>>>
>>> We think that this would allow for the client to optimize the number
>>> of request-response iterations depending on application/use case.
>>>
>>> Regards,
>>> Igor
>> 
>> 
>> 
>> /martin
>> 
>> 
>>>
>>>
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Per Hedeland [mailto:[email protected]]
>>> Sent: Monday, October 09, 2017 12:06 PM
>>> To: Xufeng Liu
>>> Cc: Igor Bryskin; [email protected]; [email protected]
>>> Subject: Re: [Netconf] [netmod] Retrieving Information Pointed by
>>> leafref
>>>
>>> I understand your use case, but a leaf of type leafref does not in
>>> general identify a single node in the data tree - the leafref path
>>> could
>>> be for a non-key leaf, and/or the path could traverse list nodes,
>>> and/or
>>> the "target" list could have multiple keys and thus multiple
>>> leafref-leafs be required to identify a specific list entry.
>>>
>>> Thus it seems to me that your use case is not a reasonable basis for a
>>> new protocol operation. My XPath foo isn't very good either, but I do
>>> believe Robert's suggestion of using an XPath filter could be a way
>>> forward. I *think* the filter expression would be something along the
>>> lines of
>>>
>>>   /te/tunnels/tunnel[name='foo'] |
>>>   
>>> /te/explicit-paths/explicit-path[name=/te/tunnels/tunnel[name='foo']/paths/path/explicit-path]
>>>
>>> --Per
>>>
>>> On 2017-10-09 15:42, Xufeng Liu wrote:
>>>> Hi Per,
>>>>
>>>>   
>>>>
>>>> *From:* Igor Bryskin [mailto:[email protected]]
>>>> *Sent:* Sunday, October 8, 2017 7:04 PM
>>>> *To:* Igor Bryskin <[email protected]>; [email protected];
>>>> *[email protected]
>>>> *Cc:* [email protected]; [email protected]
>>>> *Subject:* Re: [Netconf] [netmod] Retrieving Information Pointed by
>>>> *leafref
>>>>
>>>>   
>>>>
>>>>
>>>> Hi Joel,
>>>>
>>>> Thanks, I think I didnt explain our problem correctly.
>>>>
>>>> In our case we have a leafref pointing to a te tunnel name, which
>>>> happens to be a key to lookup the (axilary) tunnel.  We need a way to
>>>> include the entire tunnel body (not just a name) into the get
>>>> response. This is to optimize the number of iterations between the
>>>> client and the server. As Xufeng put it something similar to SQL join,
>>>>
>>>> Igor
>>>>
>>>> *From:*Igor Bryskin
>>>>
>>>> *To:*[email protected],[email protected],
>>>>
>>>> *Cc:*[email protected],[email protected],
>>>>
>>>> *Date:*2017-10-08 17:36:47
>>>>
>>>> *Subject:*Re: [Netconf] [netmod] Retrieving Information Pointed by
>>>> *leafref
>>>>
>>>>   
>>>>
>>>> Hi Per,
>>>>
>>>> In a nutshell we would lika for a netconf client to have a way to
>>>> instruct the server on whether in response to the get request the
>>>> server needs to provide the entire body of a datastore node pointed
>>>> to by a leafref or just a pointer to said node, so that the node's
>>>> body could be retrieved by a subsequent separate request. This is
>>>> requested by implementors who want to optimise rhe number of
>>>> interactions between a client and its server.
>>>>
>>>> Cheers,
>>>> Igor
>>>>
>>>> *From:*Per Hedeland
>>>>
>>>> *To:*Xufeng Liu,
>>>>
>>>> *Cc:*[email protected],'NetMod WG',
>>>>
>>>> *Date:*2017-10-08 14:01:27
>>>>
>>>> *Subject:*Re: [Netconf] [netmod] Retrieving Information Pointed by
>>>> *leafref
>>>>
>>>>   
>>>>
>>>> On 2017-10-06 23:11, Xufeng Liu wrote:
>>>>> During the design team discussion for TE and MPLS YANG modeling, we
>>>>> have received a request from implementers: How to minimize the number
>>>>> of NETCONF/RESTCONF RPCs to improve operation efficiency?
>>>>> Especially for the case when the operator or client software needs to
>>>>> retrieve the object contents pointed by a leafref.
>>>>>
>>>>> For example, given the following simplified TE tunnel model,
>>>>>
>>>>> +--rw te
>>>>>
>>>>>       +--rw explicit-paths
>>>>>
>>>>>       |  +--rw explicit-path* [name]
>>>>>
>>>>>       |     +--rw name                      string
>>>>>
>>>>>       |        +--rw explicit-route-object* [index]
>>>>>
>>>>>       |           +--rw index                   uint32
>>>>>
>>>>>       |           +--rw explicit-route-usage?   identityref
>>>>>
>>>>>       +--rw tunnels
>>>>>
>>>>>       |  +--rw tunnel* [name]
>>>>>
>>>>>       |  |  +--rw name                   string
>>>>>
>>>>>       |  |  +--rw paths
>>>>>
>>>>>       |  |  |  +--rw path* [name]
>>>>>
>>>>> |  |  |     +--rw explicit-path?  ->
>>>>> |  |  |     ../../../../../explicit-paths/explicit-path/name
>>>>>
>>>>> when the client tries to retrieve a tunnels information based on the
>>>>> tunnel name, the get operation returns a list of leafrefs pointing
>>>>> to the paths of the tunnel.
>>>>
>>>> Sorry, I'm afraid I don't follow. Can you explain exactly what your
>>>> "get" request is (protocol and payload), and where the "list of
>>>> leafref's" (whatever that may be) occurs in the reply?
>>>>
>>>> */[Xufeng] The get operation is the NETCONF/RESTCON <get> protocol
>>>> *operation, or the <get-data> operation described in
>>>> *https://tools.ietf.org/html/draft-dsdt-nmda-netconf-01 and the GET
>>>> *operations
>>>> on {+restconf}/ds/<datastore> described in
>>>> https://tools.ietf.org/html/draft-ietf-netconf-nmda-restconf-00./*
>>>>
>>>> */ /*
>>>>
>>>> */We have a list of leafref values because in this example model, each
>>>> *tunnel contains a list of paths, each of them contains a leafref. The
>>>> *get returns a value for each instance of such a leafref,
>>>> which (as a string value) will be used as a constraint (foreign key)
>>>> to retrieve the instance of an explicit-path in the model above./*
>>>>
>>>>
>>>>
>>>> JFYI, in case there is some fundamental misunderstanding here: a leaf
>>>> of
>>>> type leafref has a single value - *one* of those that satisfy the
>>>> leafref
>>>> constraint, in case there are multiple "candidates".
>>>>
>>>> --Per
>>>>
>>>>> The client needs to issue at
>>>>> least one more get operation to retrieve the path information about
>>>>> the given tunnel. The request is to combine these two operations into
>>>>> one.
>>>>>
>>>>> In the RDBMS SQL world, join can be used when SQL select is
>>>>> performed, but NETCONF/YANG currently does not have this capability.
>>>>>
>>>>> Wed like to ask whether such a request is considered reasonable.
>>>>>
>>>>> If the request is reasonable, the next question is how to
>>>>> proceed. This seems to be a protocol issue rather than YANG modeling
>>>>> issue. Is it acceptable to add a new operation to achieve such a
>>>>> <get-data> operation with expanded leafrefs?
>>>>>
>>>>> Comments and suggestions are appreciated.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> - Xufeng
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> netmod mailing list
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://www.ietf.org/mailman/listinfo/netmod
>>>>>
>>>>
>>>> _______________________________________________
>>>> Netconf mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://www.ietf.org/mailman/listinfo/netconf
>>>>
>>>
>>> _______________________________________________
>>> Netconf mailing list
>>> [email protected]
>>> https://www.ietf.org/mailman/listinfo/netconf
>>>
> 

_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to