Re: [Netconf] In an update, when is a delete a delete?

Alexander Clemm <alexander.clemm@huawei.com> Tue, 23 May 2017 17:56 UTC

Return-Path: <alexander.clemm@huawei.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 60C96129C3D for <netconf@ietfa.amsl.com>; Tue, 23 May 2017 10:56:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.222
X-Spam-Level:
X-Spam-Status: No, score=-4.222 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, 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 AOKcsBpsvIFo for <netconf@ietfa.amsl.com>; Tue, 23 May 2017 10:56:48 -0700 (PDT)
Received: from lhrrgout.huawei.com (lhrrgout.huawei.com [194.213.3.17]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id F189B129C5E for <netconf@ietf.org>; Tue, 23 May 2017 10:56:46 -0700 (PDT)
Received: from 172.18.7.190 (EHLO lhreml701-cah.china.huawei.com) ([172.18.7.190]) by lhrrg01-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id DNQ35003; Tue, 23 May 2017 17:56:44 +0000 (GMT)
Received: from SJCEML703-CHM.china.huawei.com (10.208.112.39) by lhreml701-cah.china.huawei.com (10.201.108.42) with Microsoft SMTP Server (TLS) id 14.3.301.0; Tue, 23 May 2017 18:56:44 +0100
Received: from SJCEML701-CHM.china.huawei.com ([169.254.3.56]) by SJCEML703-CHM.china.huawei.com ([169.254.5.229]) with mapi id 14.03.0235.001; Tue, 23 May 2017 10:56:38 -0700
From: Alexander Clemm <alexander.clemm@huawei.com>
To: "Eric Voit (evoit)" <evoit@cisco.com>, Martin Bjorklund <mbj@tail-f.com>
CC: "netconf@ietf.org" <netconf@ietf.org>
Thread-Topic: [Netconf] In an update, when is a delete a delete?
Thread-Index: AdLPVDqN5ppCqKOrQVCrK5qvBNQM2AAiVy4AANCNThAAEyk7AAArGsKAAAscYHA=
Date: Tue, 23 May 2017 17:56:37 +0000
Message-ID: <644DA50AFA8C314EA9BDDAC83BD38A2E0DFAFF9D@SJCEML701-CHM.china.huawei.com>
References: <644DA50AFA8C314EA9BDDAC83BD38A2E0DFAE8C1@SJCEML701-CHM.china.huawei.com> <20170518.084938.2164174821851630928.mbj@tail-f.com> <644DA50AFA8C314EA9BDDAC83BD38A2E0DFAFB43@SJCEML701-CHM.china.huawei.com> <20170522.212946.153811938714116755.mbj@tail-f.com> <adbaf2b697434bf4b44a1910af6e677c@XCH-RTP-013.cisco.com>
In-Reply-To: <adbaf2b697434bf4b44a1910af6e677c@XCH-RTP-013.cisco.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.213.48.89]
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-CFilter-Loop: Reflected
X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090201.592477DD.00C4, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=169.254.3.56, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32
X-Mirapoint-Loop-Id: 25bfcf1ca944722db31fa77b3fd049f5
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/2Qb52l4Cortp56e8F3xCECu6pG4>
Subject: Re: [Netconf] In an update, when is a delete a delete?
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Network Configuration WG mailing 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: Tue, 23 May 2017 17:56:50 -0000

Hi Martin, 
Thank you for your response.  
Two more comments inline, <ALEX> (including a response to Eric)
--- Alex

-----Original Message-----
From: Eric Voit (evoit) [mailto:evoit@cisco.com] 
Sent: Tuesday, May 23, 2017 9:04 AM
To: Martin Bjorklund <mbj@tail-f.com>; Alexander Clemm <alexander.clemm@huawei.com>
Cc: netconf@ietf.org
Subject: RE: [Netconf] In an update, when is a delete a delete?

> Martin Bjorklund, May 22, 2017 3:30 PM
> 
> Alexander Clemm <alexander.clemm@huawei.com> wrote:
> > Hi Martin,
> >
> > Almost overlooked your question below.  What is meant by the filter 
> > is specified in section 3.5 of the YANG-Push document.
> >
> > "Only a single filter can be applied to a subscription at a time.  
> > The following filter types are included in the yang-push data model:
> > [subtree] [xpath]"
> 
> Actually, only "subtree" is defined in yang-push, "xpath" is defined 
> in subscribed-notifications.

At the top of yang-push page 7, xpath selection is described.  Is there something you feel missing?

>  [Side note - I think this is wrong, subscribed-notifications should 
> also define "subtree".]
>
> But these filters are used by the server to decide if a certain 
> notification that has been generated will be sent to the client or not.

Yes, the filters in subscribed-notification are supposed to give a boolean indication as to whether a specific event should traverse the filter in its entirety. RFC6241 section 6 subtree filters are written to provide a subset of content.   I suppose it would be possible to define an event-based subtree-filter-type where a non-null result of the subtree filter means that a particular event should traverse that filter.  Is this what you are suggesting?

> If you want to define filters to specifify which nodes to subscribe 
> to, I think you need to define new filters, not try to reuese these notification filters.

Filtering syntax is hard, so we have been trying to adopt whatever is available for GET.  This way we don't have to educate users on a new universe of what is possible.  I fully expect that lots of learnings are going to come in the industry here over time, and this will be revisited in the future.

<ALEX> I think the difference in semantics between a filter that filters on the contents that is included in a notification (and applies to the notification as a whole), and a filter that specifies updates of which data nodes to include in an update notification, is actually key.  (Arguably, the second filter defines which content to generate in the first place.)  

We will review the text to make sure the distinction is clear.  That said, we do want to use the same filter syntax constructs for both, even if they are used slightly differently when used as a notification filter vs a filter that specifies which updates to include. 
</ALEX>

> As for your question, I think such a filter should be defined to 
> return a node- set to which the client subscribe to changes.  If any 
> node (or subnode to) in this node-set changes, the notif will be sent.  
> Then the question about value comparision is not relevant anymore.

Excellent, on-change should only send an update if the results of the subscription filter have changed since the previous push.   It is quite possible that an object has been created and then deleted since the last push.  Representing this was the genesis of Alex's question.

<ALEX>I interpret the statement differently:  It is not about whether the results of the subscription filter have changed, but if any nodes in the node-set that had been subscribed to changed.   In other words, I take it as an endorsement of option 3, not of option 1.  
--- Alex
</ALEX>

Eric

> /martin
> 
> 
> 
> 
> 
> >
> > In effect, the filter specifies which data nodes to consider when 
> > sending updates.
> >
> > ---Alex
> >
> >
> > -----Original Message-----
> > From: Martin Bjorklund [mailto:mbj@tail-f.com]
> > Sent: Wednesday, May 17, 2017 11:50 PM
> > To: Alexander Clemm <alexander.clemm@huawei.com>
> > Cc: netconf@ietf.org
> > Subject: Re: [Netconf] In an update, when is a delete a delete?
> >
> > Hi,
> >
> > Alexander Clemm <alexander.clemm@huawei.com> wrote:
> > > Hello all,
> > >
> > > In updating the YANG-Push document (draft-ietf-netconf-yang-push), 
> > > we have come across one issue that we wanted to raise with the 
> > > working group.
> > >
> > > As part of an on-change subscription, update records reflect the 
> > > type of change (e.g. whether the value of an object has changed, 
> > > or whether an object was created or deleted); a subscription 
> > > allows also to specify whether interested only in specific types 
> > > of changes (for example, only creates and deleted but no value changes).
> > >
> > > At the same time, a subscription filter specifies which objects to 
> > > include as part of a subscription and which not.
> >
> > Hmm, which filter are you talking about?  The only XPath filter I 
> > find in the current set of documents is the 
> > "ietf-subscribed-notifications:xpath" filter type (which btw is 
> > sorely underspecified).  Section 2.2 of
> > draft-ietf-netconf-subscribed-notifications-02 says:
> >
> >    Events which evaluate to "true" as a
> >    result of the evaluation by the filter must traverse the filter in
> >    their entirety.
> >
> > It's not clear what this means, but my guess is that this is 
> > supposed to work like the old RFC 5277 filters, where the filter 
> > expression is evaluated on the notification contents, and if the 
> > expression returns "true" (for XPath filters this means converting 
> > the results to a boolean), then the notification is sent, otherwise not.
> >
> > But it seems you are referring to some other filter which would be 
> > used to select a node set for which changes are reported?
> >
> > I would like to understand which filter mechanism you mean before 
> > having an opinion in this matter.
> >
> >
> > /martin
> >
> >
> >
> >
> > > (Really, it is not
> > > so much of a "filter" on a stream that is generated independently 
> > > of the filter, than it is a policy of which objects to include as 
> > > part of subscribed update records.)  However, a subscription 
> > > filter (such as
> > > XPath) can be used to also specify a value filter, which will 
> > > include or exclude objects based on their current value. This 
> > > makes it possible to e.g. subscribe to an object "foo" but only if 
> > > its value is 5.
> > >
> > > Now, this means that the same object could be included in one 
> > > update, but excluded in another update, due to its value no longer 
> > > meeting the filter criteria.  For example, if foo's value changes 
> > > from 5 to 3 in one cycle, a periodic subscription will no longer 
> > > include foo in its next update.  The question now concerns how to 
> > > properly handle this in the case of an on-change subscription.
> > >
> > > One possibility concerns reporting the fact that "foo" no longer 
> > > meets the subscription criteria and is no longer included in the 
> > > update record as a "delete" event.  If foo's value again becomes "5"
> > > at a later point in time, that would be reported as a "create"
> > > event.  If foo's value changes again from 5 at a later point in 
> > > time and then changes back to 3 before the time of the update 
> > > (perhaps because the value changed during the dampening interval), 
> > > it would be reported as another "delete" event (without ever 
> > > reporting a create event).  On the other hand, if foo's value 
> > > changed from 3 to
> > > 6 and back again, nothing would be reported because it did not 
> > > meet the filter criteria at any point in time.
> > >
> > > >From the perspective of the receiver this may make sense if it is 
> > > >synching its copy of the state.  However, from the perspective of 
> > > >the publisher, the object was never created or deleted - only its 
> > > >value changed, and the case when the object was truly created or 
> > > >deleted can no longer be distinguished from the case when its 
> > > >value
> changed.
> > > >A "create" simply means "an object now meets a filter criteria, 
> > > >that was not reported in the previous cycle" (which does not mean 
> > > >that the object was actually created - it may have been created, 
> > > >or it may have simply undergone a value change).
> > >
> > > An alternative (let's call it alternative 2) is therefore to make 
> > > a distinction between whether an object was created or deleted, or 
> > > whether its value fell in or out of a filter range.  This appears 
> > > semantically cleaner.  However, it will require modifying the 
> > > encoding to allow for distinction between those cases (currently, 
> > > just plain patch encoding is used).
> > >
> > > A third alternative is to let filters select only data nodes to 
> > > subscribe to, and separate out the value filter (or disallow it as 
> > > a feature altogether).  This alternative has the drawback of being 
> > > less conceptually powerful, even if it may be easier to implement.
> > >
> > > Thoughts?  Any preferences between 1, 2, and 3?
> > > --- Alex
> > >
> >
> 
> _______________________________________________
> Netconf mailing list
> Netconf@ietf.org
> https://www.ietf.org/mailman/listinfo/netconf