Re: [netmod] [Netconf] Retrieving Information Pointed by leafref

Per Hedeland <per@tail-f.com> Mon, 09 October 2017 19:12 UTC

Return-Path: <per@tail-f.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 655F2126DFE; Mon, 9 Oct 2017 12:12:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id opEIxg5M_dvi; Mon, 9 Oct 2017 12:12:09 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 9E7831286C7; Mon, 9 Oct 2017 12:12:09 -0700 (PDT)
Received: from pluto.hedeland.org (81-228-155-109-no289.tbcn.telia.com [81.228.155.109]) by mail.tail-f.com (Postfix) with ESMTPSA id B48A91AE0402; Mon, 9 Oct 2017 21:12:07 +0200 (CEST)
To: Martin Bjorklund <mbj@tail-f.com>
Cc: Igor.Bryskin@huawei.com, xufeng.liu.ietf@gmail.com, netconf@ietf.org, netmod@ietf.org
References: <049501d34104$6aa46670$3fed3350$@gmail.com> <59DB9E54.8080805@tail-f.com> <0C72C38E7EBC34499E8A9E7DD007863909CDB234@SJCEML702-CHM.china.huawei.com> <20171009.191347.1897981146275128665.mbj@tail-f.com>
From: Per Hedeland <per@tail-f.com>
Message-ID: <6f8eb6ff-8fc5-4be3-d582-b188bd2337a6@tail-f.com>
Date: Mon, 9 Oct 2017 21:12:07 +0200
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1
MIME-Version: 1.0
In-Reply-To: <20171009.191347.1897981146275128665.mbj@tail-f.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/LTMCIvgSEuQeENnDskGTDkFrLZc>
Subject: Re: [netmod] [Netconf] Retrieving Information Pointed by leafref
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 09 Oct 2017 19:12:12 -0000

On 2017-10-09 19:13, Martin Bjorklund wrote:
> Igor Bryskin <Igor.Bryskin@huawei.com> 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:per@tail-f.com]
>> Sent: Monday, October 09, 2017 12:06 PM
>> To: Xufeng Liu
>> Cc: Igor Bryskin; netconf@ietf.org; netmod@ietf.org
>> 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:Igor.Bryskin@huawei.com]
>>> *Sent:* Sunday, October 8, 2017 7:04 PM
>>> *To:* Igor Bryskin <Igor.Bryskin@huawei.com>om>; per@tail-f.com;
>>> *xufeng.liu.ietf@gmail.com
>>> *Cc:* netconf@ietf.org; netmod@ietf.org
>>> *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:*per@tail-f.com,xufeng.liu.ietf@gmail.com,
>>>
>>> *Cc:*netconf@ietf.org,netmod@ietf.org,
>>>
>>> *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:*netconf@ietf.org,'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
>>>> netmod@ietf.org <mailto:netmod@ietf.org>
>>>> https://www.ietf.org/mailman/listinfo/netmod
>>>>
>>>
>>> _______________________________________________
>>> Netconf mailing list
>>> Netconf@ietf.org <mailto:Netconf@ietf.org>
>>> https://www.ietf.org/mailman/listinfo/netconf
>>>
>>
>> _______________________________________________
>> Netconf mailing list
>> Netconf@ietf.org
>> https://www.ietf.org/mailman/listinfo/netconf
>>