Re: [Netconf] Comments on draft-lhotka-netconf-restconf-transactions-00

Ladislav Lhotka <lhotka@nic.cz> Thu, 12 July 2018 17:22 UTC

Return-Path: <lhotka@nic.cz>
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 255C9130F50 for <netconf@ietfa.amsl.com>; Thu, 12 Jul 2018 10:22:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, URIBL_BLOCKED=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 H9DeIaa2SQ01 for <netconf@ietfa.amsl.com>; Thu, 12 Jul 2018 10:22:08 -0700 (PDT)
Received: from trail.lhotka.name (trail.lhotka.name [77.48.224.143]) by ietfa.amsl.com (Postfix) with ESMTP id A3C17130F5F for <netconf@ietf.org>; Thu, 12 Jul 2018 10:22:06 -0700 (PDT)
Received: by trail.lhotka.name (Postfix, from userid 109) id 3E83E1820CC0; Thu, 12 Jul 2018 19:28:46 +0200 (CEST)
Received: from localhost (unknown [172.29.2.111]) by trail.lhotka.name (Postfix) with ESMTPSA id BFA4B1820053; Thu, 12 Jul 2018 19:28:43 +0200 (CEST)
From: Ladislav Lhotka <lhotka@nic.cz>
To: Robert Wilton <rwilton@cisco.com>, "netconf@ietf.org" <netconf@ietf.org>
In-Reply-To: <b26d88fe-2797-a8f8-a2e3-a5aed2fae6d7@cisco.com>
References: <b26d88fe-2797-a8f8-a2e3-a5aed2fae6d7@cisco.com>
Date: Thu, 12 Jul 2018 19:22:02 +0200
Message-ID: <87sh4ofjyd.fsf@nic.cz>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/vIAa_jhEblv1HcMYcI1SnmyD4QA>
Subject: Re: [Netconf] Comments on draft-lhotka-netconf-restconf-transactions-00
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.27
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, 12 Jul 2018 17:22:12 -0000

Hi Rob,

thanks for your comments, please see inline.

Robert Wilton <rwilton@cisco.com> writes:

> Hi Lada,
>
> I've had a read of this draft, and have provided some comments below.
>
> So, my top level comment is that I don't know whether or not RESTCONF 
> needs this functionality or not.  I've heard some operators state that 
> they think that clients can just construct an "atomic" change, and hence 
> don't have the need for a server side staging area.  Perhaps a good 
> question to ask in Montreal?

I think what you mean is an analogy to git, where all changes are
applied on the client's side and then new commits are pushed to the
server. However, git was designed for this mode of operation - I think
with RESTCONF it wouldn't be so efficient. And also, the client
functionality would be probably difficult to implement in a plain
browser whereas browser-based clients can be easily used with RESTCONF
extended according to my draft.

>
> The rest of my comments below, apply to the proposed technical solution, 
> and obviously only apply if this is a needed enhancement. :-)
>
> 1) Generally, I definitely prefer the idea of per session staging areas 
> (aka private candidates) described in this draft over a shared lockable 
> candidate datastore.  This follows my belief that loosely coupled 
> concurrent systems are more robust than tightly coupled ones (e.g. with 
> shared locking).
>
> 2) I don't think that this draft needs to mention <intended> at all.  
> Instead, everywhere you mention <intended> then you should be saying 
> <running>.  I.e. your staging datastores should update <running> on a 
> commit operation, just like a commit of <candidate> updates <running>.  
> <intended> is always just updated as a side effect of a write to 
> <running>, and as such is a tangential consideration.

The main reason for using <intended> is that the target datastore into
which staging datastores are merged has to be valid at all
times. <running> has somewhat fuzzy semantics both in NETCONF and under
NMDA. But yes, the text also says that essentially we have <running> and
<intended> being the same. NMDA explicitly permits this simplification.

>
> 3) Rather than having clients interact via {+restconf}/data, I think 
> that it would be much better to require NMDA and then have clients 
> interact via {+restconf}/ds/ietf-restconf-transactions:staging, as per 
> draft-ietf-netconf-nmda-restconf-04 section 3.1.  The new staging 
> datastore identity should also be defined in your module to inherit from 
> ietf-datastores:datastore identity.  I think that this probably also 
> more closely aligns to restful principals.

Again, in RESTCONF it is unclear what the "unified" datastore really
is. We wanted to make the semantics clear and explicit and, in
particular, permit configuration edits only via the staging
datastore. With your suggestion, it is not clear to me whether the
client could also interact with {+restconf}/data.

>
> 4) So, I think that the <staging> datastore itself only contains the 
> proposed changes (additions, modifications, and deletes) to <running> 
> when they are committed.  I think that clients may also want to see the 
> combined configuration of the current contents of <running> with the 
> delta held in <staging> applied.  This could be exposed either as (i) a 
> new RPC, (ii) as an extra query parameter or (iii) As another read-only 
> datastore.  A new RPC has the disadvantage that it probably wouldn't 
> support all the query parameters, so my instinctive preference would be 
> to one of the other two latter options.

Do you mean to be able to see the result of a "dry run" of a commit?
This would be certainly possible and, in fact, in our implementation it
is pretty trivial.

>
> 5) If private candidate datastores are being added to RESTCONF, then 
> should they also be added to NETCONF?  If they are added to both then I 
> think that they should be added in the same way, as much as possible, 
> perhaps both could be updated in a single draft to save repetitive 
> text?  In general, I like (Kent's?) idea of NETCONF WG writing a RFC 
> that describes all the common parts of NETCONF and RESTCONF that the 
> individual protocol docs can then reference rather than writing similar 
> or equivalent text in two places.

But private candidates are already an option in NETCONF, right? One
possibility would be to make it the ONLY option, because shared candidates
have known problems.

Thanks, Lada

>
> But otherwise, I think that it is an interesting idea, and certainly 
> warrants some WG discussion.
>
> Thanks,
> Rob
>

-- 
Ladislav Lhotka
Head, CZ.NIC Labs
PGP Key ID: 0xB8F92B08A9F76C67