Re: [netconf] get-data origin filters

Andy Bierman <andy@yumaworks.com> Mon, 07 October 2019 14:52 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8A0EC12006A for <netconf@ietfa.amsl.com>; Mon, 7 Oct 2019 07:52:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.789
X-Spam-Level:
X-Spam-Status: No, score=-1.789 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, MIME_BOUND_DIGITS_15=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_FILL_THIS_FORM_SHORT=0.01] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=yumaworks-com.20150623.gappssmtp.com
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 PVi_YPCFfl-c for <netconf@ietfa.amsl.com>; Mon, 7 Oct 2019 07:52:01 -0700 (PDT)
Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 40AFC120058 for <netconf@ietf.org>; Mon, 7 Oct 2019 07:52:01 -0700 (PDT)
Received: by mail-lf1-x12f.google.com with SMTP id x80so9507295lff.3 for <netconf@ietf.org>; Mon, 07 Oct 2019 07:52:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=tmRXmybQ/o96XhU6QRN5XjR8d3GSDIfIrU6+ihuKXic=; b=VVl02wnRECLdDXGgofvB5ugCUSr5YL5vL3FBgJXg7ga0TpQLrfryuYcLR9poeKJdIP yXvPoYyVf4vBv63rSKpPaiH1n6IrpOqqQo13nhc3wN/x3ZeWFdYFmqd/zREcyjTp9Z2M ZpCQ7A/PDud1ueTP7TqpBrWw98fiOmKF6x/VJVIb7JkG8Zk3wX+/nNc3SNH0rForC2Ee SRsCYvOv7VtFrosnDOgyiBLMyLLhgI4Ph7r+FwVz8zIbawam3xsjeNFTbSZI7gQuE0fX BhgN8dDqFGCd+Nxh5xYW7vjfJ6eEc+6IEh3oZsHFHRAPiq33K9vR5t4C8LIGt2CUBYxP mMEg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=tmRXmybQ/o96XhU6QRN5XjR8d3GSDIfIrU6+ihuKXic=; b=PKURuOL+kV9JCBRes9VIhpIIp4ksXSorVx+xAeZh9wHdu7e1MGRO3WO5+GrwI3RM7+ J2XnfHgn1cTEPk0Y7YCegkJmBBtAVMb5EnFLnUTnXWDbypnjNUGa/JLTAmMlLpGEwtnN sUs3ALdCd+H5chagHNjVZD9LSbBxjj9kcwElw3++VjEC3OSjEiske4BQYPkTe4L8cb6A frg0LcH24seqf/71sTo3cIt5P1rwOGkFpzhpXHCsGaPsJVgS2g92LkdBQrmLh58j9QSz A/mylX5/fi2iJiUCMd4EL0GZqQTpPQDyZrm1pKd7C1cjHfBvbVX9Nwf2y61Yikbb6pvU XwmA==
X-Gm-Message-State: APjAAAVJU7PcBAC+rfU0CA5tXx96lXxMHladfMI2rV/GI4IfpAJb7TKU yNU0wWAROhIpTzp2CxXDBWzfhah7BKUZ/GtmZYbMtA==
X-Google-Smtp-Source: APXvYqxzP4jX0aZhMGLn8exVHWcLP15G21joQKBjYv+kVVDia52wHsBV2Ng7Xzg1xDmIDloAKd01OixLg4zBiyYeFCo=
X-Received: by 2002:ac2:44b9:: with SMTP id c25mr18017261lfm.112.1570459918477; Mon, 07 Oct 2019 07:51:58 -0700 (PDT)
MIME-Version: 1.0
References: <CABCOCHSM0XO2tRDw44=jp3eaBxnhJciWOVvp8QJ+SgACjRZkEg@mail.gmail.com> <20191006.173256.1788347482117819951.mbj@tail-f.com> <CABCOCHRQDfprmHoMBBWK36DZH6-QQS1SkPu+V805XN3dBHW_FQ@mail.gmail.com> <20191007.094327.1923088106819713441.mbj@tail-f.com> <CABCOCHSMRrL4VR7eR8sQCtMnmg5=EE0d8g37Vr956vkUtVTBQA@mail.gmail.com> <MN2PR11MB4366BB8F556DE7DC866FE27BB59B0@MN2PR11MB4366.namprd11.prod.outlook.com>
In-Reply-To: <MN2PR11MB4366BB8F556DE7DC866FE27BB59B0@MN2PR11MB4366.namprd11.prod.outlook.com>
From: Andy Bierman <andy@yumaworks.com>
Date: Mon, 07 Oct 2019 07:51:47 -0700
Message-ID: <CABCOCHRS=J24hFth=OS2RNrE6WErSovpaCyQ9KP1Q3J_HYn7aw@mail.gmail.com>
To: "Rob Wilton (rwilton)" <rwilton@cisco.com>
Cc: Martin Bjorklund <mbj@tail-f.com>, Netconf <netconf@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000009341760594533127"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/xV95xztXsH2mMCJtVLVnnz7SvZE>
Subject: Re: [netconf] get-data origin filters
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETCONF WG list <netconf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netconf>, <mailto:netconf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netconf/>
List-Post: <mailto:netconf@ietf.org>
List-Help: <mailto:netconf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netconf>, <mailto:netconf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 07 Oct 2019 14:52:05 -0000

On Mon, Oct 7, 2019 at 7:36 AM Rob Wilton (rwilton) <rwilton@cisco.com>
wrote:

> Hi Andy,
>
>
>
> Don’t all the filters effectively work this way?
>


I do not see the text that explains origin-filter and negated-origin-filter
working the way Martin
describes it.  These filters do not say anywhere to select a node because
it has descendants
that match the origin filters.  It says very clearly that the filter test
is on the specified node.
It also says the origin is derived from the origin annotation for that node.
Since only 1 instance of the origin annotation is allowed per node, there
is no way to tag
a node with multiple origins.

If implementation is too complex then people will just leave it out (w/ a
deviation).
It is unlikely that the instrumentation knows at any given instant all the
origin values
of all the descendant dynamic data at the instant the <get-data> request is
processed.




>
> They select a subset of the nodes to include in the response, and must
> also include all ancestor nodes and required list keys to the selected
> nodes, regardless of whether those ancestor/key nodes were also selected by
> the query.
>
>
>

Yes. Understood.
Still does not explain how a filter for the list node selects descendant
nodes that match the origin filters.



> E.g. a “config false” filter will still return “config true” nodes if they
> are ancestors or list keys to a descendant config false node.  The same
> logic applies for xpath and origin filters as well.
>
>
>

No they won't.
Where is that text?

    get-data config=filter=false

This starts from top-level YANG nodes.
If the top-level YANG node is not config=false then the server will not
keep looking for descendants that match.



> Thanks,
> Rob
>
>

Andy



>
>
>
>
> *From:* netconf <netconf-bounces@ietf.org> *On Behalf Of *Andy Bierman
> *Sent:* 07 October 2019 15:12
> *To:* Martin Bjorklund <mbj@tail-f.com>
> *Cc:* Netconf <netconf@ietf.org>
> *Subject:* Re: [netconf] get-data origin filters
>
>
>
>
>
>
>
> On Mon, Oct 7, 2019 at 12:43 AM Martin Bjorklund <mbj@tail-f.com> wrote:
>
> Andy Bierman <andy@yumaworks.com> wrote:
> > On Sun, Oct 6, 2019 at 8:32 AM Martin Bjorklund <mbj@tail-f.com> wrote:
> >
> > > Hi,
> > >
> > > Andy Bierman <andy@yumaworks.com> wrote:
> > > > Hi,
> > > >
> > > > I am trying to figure out how to use the origin-filter and
> > > > negated-origin-filter
> > > > in the <get-data> operation in RFC 8526.
> > > >
> > > >
> > > >           leaf-list origin-filter {
> > > >              type or:origin-ref;
> > > >              description
> > > >                "Filter based on the 'origin' annotation.  A
> > > >                 configuration node matches the filter if its 'origin'
> > > >                 annotation is derived from or equal to any of the
> given
> > > >                 filter values.";
> > > >            }
> > > >
> > > >
> > > > These filters seem kind of worthless if implemented according to the
> > > text.
> > > > Consider a simple example where there is 1 learned leaf within a
> list:
> > > >
> > > > module: address
> > > >   +--rw addresses
> > > >      +--rw address* [last-name first-name]
> > > >         +--rw last-name     string
> > > >         +--rw first-name    string
> > > >         +--rw street?       string
> > > >         +--rw city?         string
> > > >         +--rw zipcode?      string
> > > >         +--rw phone* [phone-type]
> > > >            +--rw phone-type      enumeration
> > > >            +--rw phone-number    string
> > > >
> > > > Let's say the "zipcode" field is learned in <operational>
> > > > (e.g. ZIP code lookup expands missing or 5 digit zipcode to full 9
> digit
> > > > zipcode).
> > > > So /addresses and /addresses/address have origin "intended".
> > > > Only the /addresses/address/zipcode leaf has origin "learned".
> > > >
> > > > So how does origin-filter=learned find all the learned leafs?
> > >
> > > Perhaps I don't understand your question; IMO you give the answer to
> > > this question below:
> > >
> > > > What filters are required to return only the learned entries +
> ancestors
> > > +
> > > > ancestor-or-self keys?  Seems like this filter mechanism has to be
> used
> > > > to retrieve the exact leaf that might be learned, and the client
> > > > needs to know in advance all the possible nodes that might be
> learned.
> > > >
> > > > Want to be able to retrieve an ancestor that is intended and still
> find
> > > the
> > > > learned entries
> > > >
> > > >    get-data xpath-filter=/addresses/address origin-filtter=learned
> > >
> > > ... here.  So this request will return:
> > >
> > >    <addresses or:origin="or:intended">
> > >      <address>
> > >        <last-name>...</last-name>
> > >        <first-name>...</first-name>
> > >        <zipcode or:origin="or:learned">...</zipcode>
> > >      </address>
> > >      ...
> > >    </addresses>
> > >
> > >
> > I do not interpret the text the same way as you.
>
> Does this mean that you think that the reply is different from what I
> show above?  If so, what would it be, and why?
>
>
>
>
>
>
>
> Explain how the list address node has origin "learned".
>
>
>
> The filter is for /addresses/address and only origin=learned.
>
> How does the list node have origin=learned?
>
> It can only have 1 value.
>
> It has child nodes with both intended and learned as origin.
>
> I do no understand how the origin=learned matched this node.
>
>
>
>
>
>
>
>
>
> >
> >                      The content returned
> >
> >           by get-data must satisfy all filters, i.e., the filter
> >           criteria are logically ANDed.
> >
> >
> >           leaf-list origin-filter {
> >              type or:origin-ref;
> >              description
> >                "Filter based on the 'origin' annotation.  A
> >                 configuration node matches the filter if its 'origin'
> >                 annotation is derived from or equal to any of the given
> >                 filter values.";
> >            }
> >
> >
> >               Configuration nodes that do not have an
> >               'origin' annotation are treated as if they have the
> >               'origin' annotation 'or:unknown'.
> >
> >
> >
> > > The draft shows an example where both "intended" and "system" are given
> > > > as filters.  This will work but will include all the "intended"
> leafs as
> > > > well.
> > > > What if a "learned" node is within a "system" node within an
> "intended"
> > > > node?
> > >
> > > This works as well.  Note that the get-data description says:
> > >
> > >           Any ancestor nodes (including list keys) of nodes selected by
> > >           the filters are included in the response.
> > >
> > >
> > >
> >
> > The issue is how the /iaddresses and /addresses/address nodes match the
> > origin "learned".
>
> They don't, but they are included b/c of the quoted text above (i.e.:
>       Any ancestor nodes (including list keys) of nodes selected by
>       the filters are included in the response.)
>
>
>
>
>
> No.
>
>
>
> If the filter was for /addresses/address/zipcode then maybe that text
> applies.
>
> It is still unclear that the XPath is fully processed and then the
> origin-filter is processed.
>
> The RFC just says they are ANDed together.
>
>
>
>
>
>
> > The leafs in list "address" are a mixture of "intended" and "learned"
> > origin.
> > The text clearly says that a node has a single origin property, coupled
> to
> > the annotation.
> >
> > Issue 1: mixed origin descendant nodes
> > So how does a search on /addresses/address match origin-filter=learned?
> > I cannot find any text that says what the origin of a list or P-container
> > is if it
> > contains nodes of mixed origin.
>
> See above.
>
>
>
> No text above explains how the list origin is tagged if it has multiple
> types of child nodes.
>
>
>
>
>
>
> > Issue 2: NP-containers
> >
> > Also from RFC 8342:
> >
> >    The origin applies to all configuration nodes except non-presence
> >    containers.
> >
> >
> > What if the top-level node is an NP-container in this case.
> > I thought the top-level node MUST have an origin attribute.
> >
> > The text is not clear how NP-containers are handled.
> > Do they have an origin attribute? If not then RFC 8526 says they have
> > origin "unknown".
> > Is the intent that NP-containers always pass the origin-filter tests
> (test
> > skipped)?
>
> No, since they don't have an origin value they will not be selected by
> the filter.  But an NP-container will be included in the reply if it
> is the ancestor of a node that is selected by the filter.
>
>
>
> The RFC text does not really say that.
>
> Since it is very difficult to know if a data node 5 layers deep is going
> to match,
>
> implementing these filters according to this vague interpretation is
> unlikely.
>
>
>
>
> /martin
>
>
>
> Andy
>
>
>
>
>
> >
> >
> >
> > /martin
> > >
> > >
> > Andy
> >
> >
> > >
> > > > Seems like the client needs to know a lot about the server
> implementation
> > > > details
> > > > in order to use the origin filters.
> > > >
> > > >
> > > > Andy
> > >
>
>