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

"Eric Voit (evoit)" <evoit@cisco.com> Thu, 18 May 2017 20:24 UTC

Return-Path: <evoit@cisco.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 F15671294A6 for <netconf@ietfa.amsl.com>; Thu, 18 May 2017 13:24:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.521
X-Spam-Level:
X-Spam-Status: No, score=-14.521 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.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 wcgysOitSiTA for <netconf@ietfa.amsl.com>; Thu, 18 May 2017 13:24:08 -0700 (PDT)
Received: from alln-iport-4.cisco.com (alln-iport-4.cisco.com [173.37.142.91]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6FDA012EB2B for <netconf@ietf.org>; Thu, 18 May 2017 13:18:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=23078; q=dns/txt; s=iport; t=1495138697; x=1496348297; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=n+jEv482VM9VJC081JZ8MPabNOOo7r7Ow8zU4nItG4A=; b=Jtllv0HkSE6fsuAKl0Dpnt6W7k+TrepAblVN0xm/RNDyFxLcsKSkCNBv QZuRYb58vthvgkD7mBf4Ko3JEAbXS1YkmCWhkZJPOwkqTlj7nWyRwH7Bi Pkx8B/l0T5t//P7q0p5SOwVSGIDDsPYe4+GnCfUD6kz8HT3x24E2zh9Ou s=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0CsAQAsAR5Z/5FdJa1dGQEBAQEBAQEBAQEBBwEBAQEBgm5nYjJaB4NmihiRbpA+hTiCDyEBCoUuSgIahVY/GAECAQEBAQEBAWsohRgBAQEBAwEBIQpBCxACAQYCFQ8BGgMCAgIlCxQRAQEEAQ0FCIobDpEunWCCJosZAQEBAQEBAQEBAQEBAQEBAQEBAQEBGAWGX4FegxuEM0cfglyCYAWWdIcfAZMRgg2PaokBi0QBHzg/S3AVRoR3HIFjdoclgQ0BAQE
X-IronPort-AV: E=Sophos;i="5.38,360,1491264000"; d="scan'208,217";a="426342191"
Received: from rcdn-core-9.cisco.com ([173.37.93.145]) by alln-iport-4.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 May 2017 20:18:16 +0000
Received: from XCH-RTP-012.cisco.com (xch-rtp-012.cisco.com [64.101.220.152]) by rcdn-core-9.cisco.com (8.14.5/8.14.5) with ESMTP id v4IKIFRU026785 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=FAIL); Thu, 18 May 2017 20:18:16 GMT
Received: from xch-rtp-013.cisco.com (64.101.220.153) by XCH-RTP-012.cisco.com (64.101.220.152) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Thu, 18 May 2017 16:18:15 -0400
Received: from xch-rtp-013.cisco.com ([64.101.220.153]) by XCH-RTP-013.cisco.com ([64.101.220.153]) with mapi id 15.00.1210.000; Thu, 18 May 2017 16:18:15 -0400
From: "Eric Voit (evoit)" <evoit@cisco.com>
To: Andy Bierman <andy@yumaworks.com>, Alexander Clemm <alexander.clemm@huawei.com>
CC: Netconf <netconf@ietf.org>
Thread-Topic: [Netconf] In an update, when is a delete a delete?
Thread-Index: AdLPVDqN5ppCqKOrQVCrK5qvBNQM2AAwTwOAAAHgW9A=
Date: Thu, 18 May 2017 20:18:15 +0000
Message-ID: <28ae2c3002994e71890fc690fadf254a@XCH-RTP-013.cisco.com>
References: <644DA50AFA8C314EA9BDDAC83BD38A2E0DFAE8C1@SJCEML701-CHM.china.huawei.com> <CABCOCHSrZAPbF6VNF1R2-6+CPeQOi51U9KOcSXu_P0_5nbit2A@mail.gmail.com>
In-Reply-To: <CABCOCHSrZAPbF6VNF1R2-6+CPeQOi51U9KOcSXu_P0_5nbit2A@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: [10.82.247.169]
Content-Type: multipart/alternative; boundary="_000_28ae2c3002994e71890fc690fadf254aXCHRTP013ciscocom_"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/zIAId7qfkUMOJodwxSx9U2SO4nA>
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: Thu, 18 May 2017 20:24:11 -0000

My belief is that we should enable the same capabilities with subscribe that a platform would support with a get.  And the filter syntax supported need not diverge between the two.  Based on that, Option 2 is my preference.

As we have not been specifying filter syntax command ‘MUST’, property/value filtering would become something vendors could choose to support or not.  (I.e., codifying an explicit “MAY NOT” for filtering seems premature.)

Eric

From: Netconf, May 18, 2017 12:30 PM

Hi,

I wonder why we really need the client to choose to subscribe to "micro-events".
It makes sense to me for subscriptions to instance data using keys and static leafs like if:type.
Subscribing to "foo=5" does not seem that useful for replicating state or anything else.
YANG Push should not include RMON Alarms & Events type of functionality.

The trick to good standards writing is to support the use-cases in a way that
does not introduce massive implementation complexity for functionality
outside those use-cases.

So I would pick (3) and add a warning about avoiding filters for volatile data nodes
such as counters.


Andy


On Wed, May 17, 2017 at 2:29 PM, Alexander Clemm <alexander.clemm@huawei.com<mailto: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.  (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<mailto:Netconf@ietf.org>
https://www.ietf.org/mailman/listinfo/netconf