Re: [netmod] comments on revised-datastores-00

Ladislav Lhotka <lhotka@nic.cz> Thu, 17 November 2016 03:52 UTC

Return-Path: <lhotka@nic.cz>
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 1CC9512957F for <netmod@ietfa.amsl.com>; Wed, 16 Nov 2016 19:52:49 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] 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 JOLmSc4i8-Vq for <netmod@ietfa.amsl.com>; Wed, 16 Nov 2016 19:52:46 -0800 (PST)
Received: from trail.lhotka.name (trail.lhotka.name [77.48.224.143]) by ietfa.amsl.com (Postfix) with ESMTP id 0F519129484 for <netmod@ietf.org>; Wed, 16 Nov 2016 19:52:46 -0800 (PST)
Received: from localhost (dhcp-8ee8.meeting.ietf.org [31.133.142.232]) by trail.lhotka.name (Postfix) with ESMTPSA id 0569F1CC0218; Thu, 17 Nov 2016 04:52:47 +0100 (CET)
From: Ladislav Lhotka <lhotka@nic.cz>
To: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <20161116.092657.1863684993696157894.mbj@tail-f.com>
References: <m2eg2d600s.fsf@dhcp-8ee8.meeting.ietf.org> <20161115061450.GA48891@elstar.local> <m2oa1gqer7.fsf@dhcp-8ee8.meeting.ietf.org> <20161116.092657.1863684993696157894.mbj@tail-f.com>
Date: Thu, 17 Nov 2016 12:52:37 +0900
Message-ID: <m2r36an4oq.fsf@dhcp-8ee8.meeting.ietf.org>
MIME-Version: 1.0
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/HLp1IoOk-VinP4DmksPACwcH36E>
Cc: netmod@ietf.org
Subject: Re: [netmod] comments on revised-datastores-00
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.17
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: Thu, 17 Nov 2016 03:52:49 -0000

Martin Bjorklund <mbj@tail-f.com> writes:

> Ladislav Lhotka <lhotka@nic.cz> wrote:
>> Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de> writes:
>> 
>> > On Tue, Nov 15, 2016 at 09:48:35AM +0900, Ladislav Lhotka wrote:
>> >> Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de> writes:
>> >> 
>> >> > On Mon, Nov 14, 2016 at 11:23:04AM +0900, Ladislav Lhotka wrote:
>> >> >> Hi,
>> >> >> 
>> >> >> I've read the revised-datastores-00 document, in general I like it, here
>> >> >> are my initial comments and questions:
>> >> >> 
>> >> >> 1. Even if <intended> is valid, it can still be in conflict with the
>> >> >>    actual content of <applied> that may come from e.g. dynamic
>> >> >>    configuration protocols. How are such cases supposed to be resolved?
>> >> >
>> >> > Yes. The whole idea is to expose these potential differences instead
>> >> > of hiding them behind a curtain.
>> >> 
>> >> That's fine but it doesn't answer my question.
>> >>
>> >
>> > Then I do not understand the question. What does it mean for a
>> > datastore to be in conflict with a different datastore?
>> 
>> For example:
>> 
>> - the data model has a choice with caseA and caseB. A NC/RC client
>>   configures caseA, <intended> is valid, but <applied> already contains
>>   caseB configured by a "dynamic configuration protocol"; or
>> 
>> - a leafref refers to a leaf that exists in <intended> but not in
>>   <applied>.
>
> An open issue is what to do with semantic constrains.  For now, let's
> assume they do not have to be valid.  This implies that you can have
> leafrefs in <applied> that refer to non-existing leafs.
>
> However, for choices, I don't think two cases can exist at the same
> time even in operational state.  If we allow this, where do we draw
> the line - can a container or leaf exist in multiple instances?  can
> a leaf of type int32 contain a string?

Certainly not. Rather than validate <intended>, it may be better to
first merge <intended> with current content of <applied> to get the tentative
future content of <applied>, and apply validation on it. 

>
>> >> >> 2. What is the distinction between dynamic configuration protocols and
>> >> >>    control-plane protocols?
>> >> >
>> >> > Good question. I believe this to be at the end implementation specific.
>> >> > The question I think really is whether a control-plane protocol interacts
>> >> > with the configuration management component or not.
>> >> 
>> >> OK, perhaps it can be said that dynamic configuration protocols modify
>> >> "config true" data. Maybe a term like "configuration interface" may be
>> >> better because it needn't be a communication protocol, and it needn't be
>> >> any more dynamic than NETCONF/RESTCONF is.
>> >
>> > Yes, we know that 'dynamic' is potentially misleading.
>> 
>> My take from yesterday's discussion is that in fact the classification
>> is implementation-dependent.
>
> Yes it probably is.  But I'm not sure it is actually a problem.

It isn't, but you could base the classification on where each
contribution comes in instead of using fuzzy terms like dynamic
configuration protocol.

>
>> For example, if I use standard Linux
>> command-line tools such as "ip", their result can be seen only in
>> operational state, so they are like control-plane protocols. However, if
>> an implementation patches these tools so as to write to <applied>, then
>> they are dynamic configuration protocols.
>> 
>> >
>> >> >> 5. Is it necessary that "<operational-state> datastore contains all
>> >> >>    configuration data actually used by the system"? For example, static
>> >> >>    routes should appear in RIBs, so having them separately in operational
>> >> >>    state seems redundant.
>> >> >
>> >> > I do not understand your question. Is the RIB exposed or not? Anyway,
>> >> > we need a general model and not a model for specific aspects such as
>> >> > routing. Yes, there can be redundancy but there can also be semantic
>> >> > differences. The <operational-state> datastore tells me what is
>> >> > actually used (regardless of what has happened with the statically
>> >> > configured values). In other words, if I want to debug what my box is
>> >> > actually doing, looking at the <operational-state> datastore is
>> >> > probably a good idea.
>> >> 
>> >> But could this part of operational state be possibly different from
>> >> what's already in <applied>?
>> >
>> > This is subtle since we are not really able to define precisely what
>> > the boundaries of a datastore are. Is something applied if the
>> > responsible daemon accepted information? Or is it applied if the
>> > daemon communicated information to the kernel? Or is it applied if the
>> > linecard accepted the information from the kernel? Or is it applied if
>> > the specific registers of the linecard have been programmed?
>> 
>> In my view, at some point the configuration system hands over the data
>> to the backend that's responsible for performing the changes, and the
>> data passed to the backend should be the content of <applied>.
>
> The data passed to the backends is <intended>.  The backend then tries
> to apply it, and the result is <applied>/<operational-state>.

Hmm, but dynamic configuration protocols contribute to <applied>, and
their contributions also have to be passed to the backend, right?

It would make more sense to me if <applied> contained the data (from all sources)
that the configuration system considers valid and passes it to the
backend. Whether or not (and when) the system makes the data effective
then wouldn't be an issue.

Lada

>
>
>
> /martin
>
>> Whether
>> the changes take effect in the system or not may be discovered from
>> operational state data but the configuration processing should be
>> already over.  
>> 
>> > Similarily, how is operational state obtained? It is likely that an
>> > implementation does not read linecard registers on every operational
>> > state request. As a consequence, we might have systems where applied
>> > really is just a subset of operational state and this may be true for
>> > a large number of systems but I would not rule out the possibility of
>> > having differences between applied and operational state.
>> 
>> We don't currently have static routes in routing-state, despite all
>> criticism about duplication of config and state values, so it seems
>> rather backwards to duplicate it in the new datastore model. What's
>> important for an operator is to see whether a static route appears in a
>> RIB or not.
>> 
>> Lada
>> 
>> >
>> > /js
>> >
>> > -- 
>> > Juergen Schoenwaelder           Jacobs University Bremen gGmbH
>> > Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
>> > Fax:   +49 421 200 3103         <http://www.jacobs-university.de/>
>> 
>> -- 
>> Ladislav Lhotka, CZ.NIC Labs
>> PGP Key ID: E74E8C0C
>> 
>> _______________________________________________
>> netmod mailing list
>> netmod@ietf.org
>> https://www.ietf.org/mailman/listinfo/netmod
>> 

-- 
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C