Re: [Netconf] [netmod] WG adoption poll draft-nmdsdt-netmod-revised-datastores-00

Robert Wilton <rwilton@cisco.com> Wed, 14 December 2016 16:27 UTC

Return-Path: <rwilton@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 50F8E129EB8; Wed, 14 Dec 2016 08:27:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.417
X-Spam-Level:
X-Spam-Status: No, score=-17.417 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_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.896, SPF_HELO_PASS=-0.001, SPF_PASS=-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 N07g-Y1jFznD; Wed, 14 Dec 2016 08:26:58 -0800 (PST)
Received: from aer-iport-3.cisco.com (aer-iport-3.cisco.com [173.38.203.53]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5C61D129EC9; Wed, 14 Dec 2016 08:25:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=22753; q=dns/txt; s=iport; t=1481732721; x=1482942321; h=subject:to:references:cc:from:message-id:date: mime-version:in-reply-to; bh=morGy4Zph6ezyjwWbqptsIhHCq62mCO8tx+9xRTRA74=; b=b/jgFG/LbTK/AT024gPyJamzsjzNxgnFzo/rPzP0LgrnGPccWcPQj3rx KrmWwtly0pbqRsv0yE1Liitn23t5sdAejTpzHWPF7/B0Td4QHpKGug88c k1F9D0gqYn8tTFNW7aTeBL+vFX6kKwfuPSXQ1HrwSqs4VUr/ERP0ri5Qq w=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0CBAwABclFY/xbLJq1dGQEBAQEBAQEBAQEBBwEBAQEBgzcBAQEBAYEnBFSNTnKWKYd2jRGCCYYiAoI1FAECAQEBAQEBAWIohGgBAQEDASNWBQsLGCcDAgIhJREGDQYCAQEXiDYDDwiqJYIoL4cLDYNJAQEBAQEBAQECAQEBAQEBAQEBAR6GPoF9CIJWgkiBUxeDGoJdBZo2NY1Ag22BdIUBgycjhgyJXVKDZYQPHzeBARMOg3kcGIFFPjSFdYI8AQEB
X-IronPort-AV: E=Sophos;i="5.33,347,1477958400"; d="scan'208,217";a="648903740"
Received: from aer-iport-nat.cisco.com (HELO aer-core-3.cisco.com) ([173.38.203.22]) by aer-iport-3.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Dec 2016 16:25:13 +0000
Received: from [10.63.23.74] (dhcp-ensft1-uk-vla370-10-63-23-74.cisco.com [10.63.23.74]) by aer-core-3.cisco.com (8.14.5/8.14.5) with ESMTP id uBEGPDsb032166; Wed, 14 Dec 2016 16:25:13 GMT
To: Andy Bierman <andy@yumaworks.com>
References: <CABCOCHToDs98tr3o5Np1vjvKa9uMS_MWKJZHo8GQtNj_1xXEiQ@mail.gmail.com> <004101d25589$a0cd5f20$e2681d60$@gmail.com> <CABCOCHTnCu4uE=da2Z+rOArGBoMXcicsofgLQP8LPLGkR-ho5Q@mail.gmail.com> <20161214.120754.915451205380944115.mbj@tail-f.com> <CABCOCHQ3a5i=51Kn0N6Daao5FBfF6N003Wb=0GsoQW45eYJR7A@mail.gmail.com> <372fdb96-295c-1a3e-de12-6693d3560de7@cisco.com> <CABCOCHTN0OmAS+bhgCRsU1sUdySaYQg9MnXjmcp_FFhoC8si_A@mail.gmail.com>
From: Robert Wilton <rwilton@cisco.com>
Message-ID: <f4ab8202-e83b-012a-7196-691d5a6e1130@cisco.com>
Date: Wed, 14 Dec 2016 16:25:13 +0000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0
MIME-Version: 1.0
In-Reply-To: <CABCOCHTN0OmAS+bhgCRsU1sUdySaYQg9MnXjmcp_FFhoC8si_A@mail.gmail.com>
Content-Type: multipart/alternative; boundary="------------07658C88751289A7C49D0F14"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/gOTH4iNXQ_lmOoBHqXprSYzI-9A>
Cc: NetMod WG Chairs <netmod-chairs@ietf.org>, NETCONF Working Group <netconf-chairs@ietf.org>, "netmod@ietf.org" <netmod@ietf.org>, Netconf <netconf@ietf.org>
Subject: Re: [Netconf] [netmod] WG adoption poll draft-nmdsdt-netmod-revised-datastores-00
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.17
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: Wed, 14 Dec 2016 16:27:01 -0000

Hi Andy,

Thanks for you comments, please see inline.


On 14/12/2016 15:41, Andy Bierman wrote:
>
>
> On Wed, Dec 14, 2016 at 6:42 AM, Robert Wilton <rwilton@cisco.com 
> <mailto:rwilton@cisco.com>> wrote:
>
>
>
>     On 14/12/2016 14:09, Andy Bierman wrote:
>>
>>
>>     On Wed, Dec 14, 2016 at 3:07 AM, Martin Bjorklund <mbj@tail-f.com
>>     <mailto:mbj@tail-f.com>> wrote:
>>
>>         Andy Bierman <andy@yumaworks.com <mailto:andy@yumaworks.com>>
>>         wrote:
>>         > On Tue, Dec 13, 2016 at 1:41 PM, Mehmet Ersue
>>         <mersue@gmail.com <mailto:mersue@gmail.com>> wrote:
>>         >
>>         > > Hi Andy,
>>         > >
>>         > >
>>         > >
>>         > > > This architectural change needs to be implemented in
>>         various protocols.
>>         > >
>>         > > > I am not sure a 6241bis is the best approach because it
>>         is not clear
>>         > > which
>>         > >
>>         > > > servers really need to implement the revised datastores.
>>         > >
>>         > >
>>         > >
>>         > > I agree fully. This is the reason why I wrote in my mail:
>>         > >
>>         > >
>>         > >
>>         > > >> - a new protocol- and language-independent standard
>>         document (RFC XYZ)
>>         > > defining the generic datastore concept and framework and
>>         describing its use
>>         > > (based on and following the DT solution draft),
>>         > >
>>         > > >> - a RFC6241bis draft removing the current datasore concept
>>         > > specification, and getting rid of well-known issues e.g.
>>         with the <get>
>>         > > operation,
>>         > >
>>         > >
>>         > I do not agree with the text you wrote.
>>         > I do not want to remove candidate, running, and startup
>>         from RFC 6241.
>>         > IMO the new datastores can be defined in a new document
>>         that does not
>>         > redefine the existing datastores.
>>         >
>>         > I also do not want to get rid of <get>,  It works as intended.
>>         > It is not a problem on small devices.
>>
>>         Andy, the problem with <get> has nothing to do with the size
>>         of the
>>         device.  The problem is that <get> returns two things
>>         (running config
>>         + operational state) in one merged output document.  This forces
>>         people to split data models so that config and state are mutually
>>         exclusive (/interfaces and /interfaces-state).  This draft
>>         proposes a
>>         fix for this, which makes <get> less useful.
>>
>>
>>     This "problem" exists for some new overloaded use of <get> that
>>     did not exist before.
>>     The <get> operation only mixes config=true and config=false. It
>>     never had anything
>>     to do with intended vs. applied.  IMO your proposed solution is
>>     not very backward compatible
>>     with simple systems that do not have delays between intended and
>>     applied.
>
>     I've been informed (repeatedly ;-) that <running> has always only
>     ever meant intended configuration.  I.e. that it is reasonable
>     behaviour for a system to accept config into <running> and then
>     fail to apply that configuration for some reason (daemon is
>     unavailable, linecards is down, resources have been exceeded,
>     programming error, etc).  If this interpretation is correct then
>     the NETCONF <get> operation is poorly defined because it is mixing
>     "intended configuration of the system" along with "actual running
>     state".
>
>     What NETCONF <get> should really be providing is "actual
>     configuration in use by the system" along with "actual running
>     state".  Of course this is effectively what the new operational
>     state datastore is defined as containing.
>
>     If I understand it correctly, I think that Andy's point is that
>     for lots of systems "intended configuration of the system" and
>     "actual configuration of the system" are effectively one and the
>     same thing.  If this is the case then it should be easy for
>     clients/servers to migrate from an existing <get> request to a
>     <get-data> request that just returns the data from the operational
>     state datastore.  It sounds like the actual data returned in both
>     cases should be the same?
>
>
>
> I do not understand the new solution because it has not been well-defined.
>
> In the old solution, I have 2 leafs /foo and /foo-state.
> I can retrieve both of these leafs at once with <get>.
> I can decide if /foo and /foo-state are the values I expect.
Yes, this is true. But to be a programmatically easily consumable 
solution it requires that the structure under /foo is also exactly 
replicated under /foo-state.  This probably means that most config needs 
to be put into groupings, and IMO, I think that it makes the models hard 
to read, and also harder to maintain.


>
> But if I overload /foo such that it represents different semantics in
> different datastores, now a retrieval operation can only get 1 at a time.
Yes, this is true.  Although it should be possible to define RPC 
operations that fetch more than one datastore in the same message if 
required, although I'm not convinced that is truly needed.


> If I set /foo, then get-state(/foo), how do I know the config value 
> for /foo
> has not changed in the meantime?
You don't, unless you also do a get on the running config datastore as well.

But I also don't see why this is a problem.  Either the client knows 
what the config should be, in which case it probably doesn't need to 
explicitly ask the device, but can infer it from the operational state.  
Alternatively, if another client may also be modifying the configuration 
at the same time then the client needs to be designed to expect and 
handle this.

Even with the existing <get> request, I don't think that any non trivial 
device can guarantee that all the data returned in that get request is 
atomically consistent with itself.


>   If the server returns 2 /foo leafs in the same
> message body, then it is no longer YANG schema-valid (only 1 /foo node 
> is allowed)
The message body would need to return two separate data trees, one for 
each datastore that is being returned.

>
> The  <get> operation does not overload objects with different semantics.
> Only a new server that eliminates /foo-state is overloading the 
> semantics of /foo.
The new server doesn't overload the same object with different 
semantics, it is really just saying that the value of an object depends 
on what datastore it is being read from, which is true in NETCONF even 
today.  I.e. the value for a given config leaf could already differ 
between candidate, running, startup.  What is being proposed doesn't 
seem to fundamentally change the meaning of the config leaves in a new 
and different way, it is just defining new datastores with associated 
more tightly specified semantics.


> The ability to retrieve /foo-state is lost for a client that only 
> knows <get> (and not <get-state).
> This does not mean <get> is broken.  It just means the ability to 
> access /foo-state is removed.
I think that <get> is broken in the sense that it is combining together 
two sets of data that cannot always be combined in a meaningful way.  
For me the bigger problem is that it is only under rare conditions that 
the problem scenarios arise, meaning that clients may not be coded to be 
robust under those scenarios devaluing the YANG automation proposition.

Thanks,
Rob