Re: [Rtg-yang-coord] Operational State Modeling

Anees Shaikh <aashaikh@google.com> Wed, 13 May 2015 07:51 UTC

Return-Path: <aashaikh@google.com>
X-Original-To: rtg-yang-coord@ietfa.amsl.com
Delivered-To: rtg-yang-coord@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C3FD11A1A76 for <rtg-yang-coord@ietfa.amsl.com>; Wed, 13 May 2015 00:51:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.388
X-Spam-Level:
X-Spam-Status: No, score=-1.388 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=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 ywHnajv69QiD for <rtg-yang-coord@ietfa.amsl.com>; Wed, 13 May 2015 00:51:42 -0700 (PDT)
Received: from mail-ob0-x236.google.com (mail-ob0-x236.google.com [IPv6:2607:f8b0:4003:c01::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3312C1A1A6E for <Rtg-yang-coord@ietf.org>; Wed, 13 May 2015 00:51:42 -0700 (PDT)
Received: by obblk2 with SMTP id lk2so23911645obb.0 for <Rtg-yang-coord@ietf.org>; Wed, 13 May 2015 00:51:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=jJGAfsgMtwrHuMaJ2YDlb3gdoujTchM0VrzIKKtCvZs=; b=ptuja1voFRpOJPaQq7mQ211GMq1Tlv6bVPd7fC40Fn/HjPokn9TnZz2hBMde4v1kFR AI8I6MAaAq+tBcmaMGEUgNESbzZMtXOOom8zRvbWWFTeQz81GpoJ9q7TdprL67RnZKWh /oMP5D+PwkqzEF8YDvSRU0VdgaPCD+aRFNGFbcGVpBQ6aHU5QUJ94S6PMOBEiUYbj1qJ htK4BQqwSFF0F+ubQKa0MOq0hWhABDfH3Kjuho6yk5l37hw4qeLXRa64ukOHrKknzOgF rsVIZjJCGFRmgyxhwDg3QY6OZIh57alPU7dzO+IfcZy1p0Gt9Q8HoJ98cBsjn0SyW+Mg yrCg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=jJGAfsgMtwrHuMaJ2YDlb3gdoujTchM0VrzIKKtCvZs=; b=CKL9C73q+NIdPMyXKmcTjENvYLuB7sYXxxEJTrw8n47Bahb2KORq9hTl9lVf1Zs7Va yxQHQppQd1LCZYByDTAcEdykKxJl0jQv6eHjD5T44rrpxZz2nhEcp4SAar5YXSDIKnlj yBNSPCxEBbjM6kFuc3AvIYNgqFInBEnTKZH6Ll8YcDVhBXXWAg0gJ8e5endFdAEV3H+3 CK3/8omLo0o5fWfCUgREVYGRK+KiLjccjhH+DunglHdcUzBxu98aHUmCcoBm6xndCKz5 6rQu22V9sSlOPWKhnLsKdmr+5gVf7M29c/QxMyihZFuEPQ9Qw+03lRydaTLDhIDkTU0/ GA3Q==
X-Gm-Message-State: ALoCoQl1CfHbSjqzsld28m1yAAu4Exn6Cw0Umm4Thqgxp6dL4U2IVI65ui5zc5wsGjAH6AJ11h/l
MIME-Version: 1.0
X-Received: by 10.202.201.3 with SMTP id z3mr14282385oif.130.1431503501558; Wed, 13 May 2015 00:51:41 -0700 (PDT)
Received: by 10.182.220.200 with HTTP; Wed, 13 May 2015 00:51:41 -0700 (PDT)
In-Reply-To: <D177E7E1.1AC4C%acee@cisco.com>
References: <D177E7E1.1AC4C%acee@cisco.com>
Date: Wed, 13 May 2015 00:51:41 -0700
Message-ID: <CAJK7ZqLp4_dOVMcSMXP3juZHHeQJ6iLGkryJ8t6gs2Mcn=Ez5Q@mail.gmail.com>
From: Anees Shaikh <aashaikh@google.com>
To: "Acee Lindem (acee)" <acee@cisco.com>
Content-Type: multipart/alternative; boundary=001a1134e9a0b4bd780515f1e1d6
Archived-At: <http://mailarchive.ietf.org/arch/msg/rtg-yang-coord/vPvY7aahBu-cW6H55ieoHGwK7c8>
Cc: "Rtg-yang-coord@ietf.org" <Rtg-yang-coord@ietf.org>, Xufeng Liu <xufeng.liu@ericsson.com>
Subject: Re: [Rtg-yang-coord] Operational State Modeling
X-BeenThere: rtg-yang-coord@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "\"List to discuss coordination between the Routing related YANG models\"" <rtg-yang-coord.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtg-yang-coord>, <mailto:rtg-yang-coord-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtg-yang-coord/>
List-Post: <mailto:rtg-yang-coord@ietf.org>
List-Help: <mailto:rtg-yang-coord-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtg-yang-coord>, <mailto:rtg-yang-coord-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2015 07:51:47 -0000

Xufeng, thanks very much for taking the time to do this systematic analysis
-- much appreciated.   We've also talked to a subset of the MPLS/TE DT just
today about opstate to reiterate the reasons for the OpenConfig proposal.
I will just comment on your rationale section.

1.1 Performance requirements

Implementations today already support the retrieval of operational state
and configuration data together.  In fact, platforms that support NETCONF
would need to handle both simultaneously in a <get> request.  The
<get-config> request does not return opstate at all.  There is no option
today for <get-operational> to retrieve only state (though our draft
proposes, or more accurately, re-proposes it).  The performance
implications may be due to the datastore design for the different types of
data, but where the data lives in the *schema* should not have a major
impact on the performance to read it.  In other words, if you accept the
requirement that configuration needs to be part of state (which you seem to
in the beginning of the note), then the location in the schema really
shouldn't matter.  It does matter for other reasons (see below).

1.2 Data type requirements -- agree with your conclusions

1.3 Operation requirements

You mention, "*For option 2, to check the state value for a specific
configuration attribute, the client software can simply add the “-state”
suffix to the name of the top container*"

The question that this doesn't answer is what is the top container?  It may
be clear in an individual model, but I don't manage a device using just
routing, or just interfaces.  I want to compose a set of models into a
coherent whole and be able to access config and corresponding state in a
consistent way.  When I compose the models, what I thought was the "top"
container is no longer top -- it shows up somewhere in the middle, and my
paths are now totally dependent on how modelers have decided to combine or
separate their individual models and modules.  From our perspective, option
2 doesn't meet this requirement.  Rather than debate what the real top of a
usable model is, we take the approach of pushing the separation to leaves
of the tree, which works no matter how models are composed structurally.

1.4 Other requirements

Regarding system-created tunnels, why is it necessary to consider them part
of read-only state?  I can just as well consider them as configured, only
they are configured by some agent on the system -- they should in fact be
configured using the same mechanism as a tunnel configured by an operator.
  If they are not writable, *and you want to enforce this in the model*,
they could show up in only the state part of the tree -- I agree this does
raise the issue with list keys that you mention.  But list keys (and lists
in general) are a bit broken in YANG 1.0/1.1 as we explain briefly in the
draft.  We can discuss the issues with lists in a separate thread given
more time.

Regarding compatibility with existing models, I really don't agree at all
that the existing RFC models should constrain what we do when trying to
meet the requirements of people trying to build real systems that use YANG
models.    With all respect to the authors of those few models (which we
leverage considerably in our models), YANG models are software code, and
should be treated as such IMO.  We don't say that software is "done" and
can't change -- it evolves and improves over time, sometimes in
non-backward-compatible ways.  And we don't issue a final version of
software without considerable experience using and testing it in production.

thanks.
-- Anees


On Tue, May 12, 2015 at 2:26 PM, Acee Lindem (acee) <acee@cisco.com> wrote:

>  Hi Xufeng,
>
>  My interpretation of the OpenConfig draft is that it recommends option
> 1. Actually, option 3 seems like a variation of 1 with some superfluous
> levels.
>
>  Thanks,
> Acee
>
>   From: Xufeng Liu <xufeng.liu@ericsson.com>
> Date: Tuesday, May 12, 2015 at 4:56 PM
> To: Routing YANG <rtg-yang-coord@ietf.org>
> Subject: [Rtg-yang-coord] Operational State Modeling
>
>    During the YANG MPLS/TE design team discussions, the topic of
> operational state modeling was brought up. We discussed the proposal
> presented in http://www.ietf.org/id/draft-openconfig-netmod-opstate-00.txt
> and some various approaches. Here are some thoughts and questions.
> 1.    Requirements
>
> We agree with the requirements presented in
> draft-openconfig-netmod-opstate. These requirements are summarized as
> followings.
> 1.1.Performance Requirement
>
> ·            Operational state access is much more frequent than
> configuration
>
> ·            State data is generally higher volume than configuration data
> 1.2.Data Type Requirements
>
> ·            Representing intended configuration (actual vs. configured)
>
> ·            Derived, negotiated, and system assigned data
>
> ·            Counters or statistics
> 1.3.Operation Requirements
>
> ·            Separate configuration and operational state data
>
> ·            Retrieve configuration and operational state data
> independently
>
> ·            Retrieve derived state and statistics state independently
>
> ·            Consistent schema locations for configuration and
> corresponding operational state data
> 2.    Some Options 2.1.Option 1
>
>
>
> /routing/routing-instance:
>
>    +--rw te!
>
>       +--rw globals
>
>       +--rw interfaces
>
>       |  +--rw interface* [interface]
>
>       |     +--rw interface                 if:interface-ref
>
>             +--rw config
>
>       |        +--rw switching-capabilities* [switching-capability]
>
>                   +--rw config
>
>       |           |  +--rw capability?   identityref
>
>       |          |  +--rw encoding?     identityref
>
>                   *+--ro state*
>
> *      |              +--ro capability?   identityref*
>
> *      |             +--ro encoding?     identityref*
>
>       |        +--rw te-metric?                ietf-te-types:te-metric
>
>             *+--ro state*
>
> *      |        +--ro te-metric?                ietf-te-types:te-metric*
>
>                +--ro oper-status?            enumeration
>
>                +--ro counters
>
>                      +--ro pkts-sent?              yang:counter32
>
>       +--rw tunnels
>
>          +--rw tunnel* [name type]
>
>             +--rw name                    string
>
>             +--rw config
>
>                |  +--rw admin-status?           identityref
>
>             |  +--rw forwarding
>
>                   +--rw config
>
>             |        +--rw load-share?   uint32
>
> *                  +--ro state*
>
> *            |        +--ro load-share?   uint32*
>
> *            +--ro state*
>
> *                  +--ro admin-status?           identityref*
>
>                +--ro oper-status?            enumeration
>
>                +--ro counters
>
>                   +--ro events?              yang:counter32
> 2.2.Option 2
>
>
>
> /routing/routing-instance:
>
>    +--rw te!
>
>       +--rw globals
>
>       +--rw interfaces
>
>       |  +--rw interface* [interface]
>
>       |     +--rw interface                 if:interface-ref
>
>       |     +--rw switching-capabilities* [switching-capability]
>
>       |     |  +--rw capability?   identityref
>
>       |     |  +--rw encoding?     identityref
>
>       |     +--rw te-metric?                ietf-te-types:te-metric
>
>       +--rw tunnels
>
>          +--rw tunnel* [name type]
>
>             +--rw name                    string
>
>             +--rw admin-status?           identityref
>
>             +--rw forwarding
>
>                +--rw load-share?   uint32
>
> /routing-state/routing-instance:
>
>    +--ro te!
>
>       +--ro globals
>
>       +--ro interfaces
>
>       |  +--ro interface* [interface]
>
>       |     +--ro interface                 if:interface-ref
>
> *      |     +--ro switching-capabilities* [switching-capability]*
>
> *      |     |  +--ro capability?   identityref*
>
> *      |     |  +--ro encoding?     identityref*
>
> *      |     +--ro te-metric?                ietf-te-types:te-metric*
>
>             +--ro oper-status?            enumeration
>
>             +--ro counters
>
>                +--ro pkts-sent?              yang:counter32
>
>       +--ro tunnels
>
>          +--ro tunnel* [name type]
>
>             +--ro name                    string
>
> *            +--ro admin-status?           identityref*
>
> *            +--ro forwarding*
>
> *               +--ro load-share?   uint32*
>
>             +--ro oper-status?            enumeration
>
>             +--ro counters
>
>                +--ro events?              yang:counter32
>
>
> 2.3.Option 3
>
>
>
> /routing/routing-instance:
>
>    +--rw te!
>
>       +--rw globals
>
>       +--rw interfaces
>
>       |  +--rw interface* [interface]
>
>       |     +--rw interface                 if:interface-ref
>
>             +--rw config
>
>       |        +--rw switching-capabilities* [switching-capability]
>
>                   +--rw config
>
>       |           |  +--rw capability?   identityref
>
>       |          |  +--rw encoding?     identityref
>
> *                  +--ro state*
>
> *      |              +--ro capability?   identityref*
>
> *      |             +--ro encoding?     identityref*
>
>       |        +--rw te-metric?                ietf-te-types:te-metric
>
> *            +--ro state*
>
> *      |        +--ro te-metric?                ietf-te-types:te-metric*
>
>       +--rw tunnels
>
>          +--rw tunnel* [name type]
>
>             +--rw name                    string
>
>             +--rw config
>
>                |  +--rw admin-status?           identityref
>
>             |  +--rw forwarding
>
>                   +--rw config
>
>             |        +--rw load-share?   uint32
>
> *                  +--ro state*
>
> *            |        +--ro load-share?   uint32*
>
>             *+--ro state*
>
> *               +--ro admin-status?           identityref*
>
>
>
> /routing-state/routing-instance:
>
>    +--ro te!
>
>       +--ro globals
>
>       +--ro interfaces
>
>       |  +--ro interface* [interface]
>
>       |     +--ro interface                 if:interface-ref
>
>             +--ro oper-status?            enumeration
>
>             +--ro counters
>
>                +--ro pkts-sent?              yang:counter32
>
>       +--ro tunnels
>
>          +--ro tunnel* [name type]
>
>             +--ro name                    string
>
>             +--ro oper-status?            enumeration
>
>             +--ro counters
>
>                +--ro events?              yang:counter32
>
>
> 3.    Approach Rationales 1.1.Performance Requirement
>
> ·            Separating configuration and state branches allows
> implementing state data through a separate fast channel to deliver high
> frequent and high volume data.
>
> ·            In this aspect, Option 2 has a clearer separation between
> configuration and state data, and easier to achieve better performance by
> using separate channels.
> 1.2.Data Type Requirements
>
> ·            Duplicating all configuration attributes makes actual
> configuration settings available
>
> ·            Derived, negotiated, and system assigned data are added to
> the state branch
>
> ·            Counters or statistics are added to the state branch
>
> ·            All three options satisfy these requirements
> 1.3.Operation Requirements
>
> ·            Separating configuration and operational state data allows
> retrieving configuration and operational state data independently.
>
> ·            Separating derived state and statistics state allows
> retrieving them independently
>
> ·            The state branch is an exact mirror of the configuration
> branch, so the schema locations are consistent.
>
> ·            In this aspect, all three options satisfy the requirements.
> For option 1, to check the state value for a specific configuration
> attribute, the client software can simply add the “state” to the end of the
> schema node path. For option 2, to check the state value for a specific
> configuration attribute, the client software can simply add the “-state”
> suffix to the name of the top container. Option 1 seems to be easiest in
> this regard, but others are acceptable?
> 1.4.Other Requirements
>
> ·             Model system created read-only objects (e.g. TE tunnels).
> When state data and config data share the same parent, they share the same
> key for the parent list. Even though that the state branch is read-only,
> its parent is not and the key of the parent is not. Therefore, we will have
> difficulty to achieve this in Option 1.
>
> ·             Compatible with the existing models. The related models
> include RFC7223, RFC7277 and draft-ietf-netmod-routing-cfg-18. In this
> aspect, Option 2 seems to do better.
>
> Your comments and preferences are appreciated.
>
> Thanks,
>
>
>
> - Xufeng
>
>
>
>
> _______________________________________________
> Rtg-yang-coord mailing list
> Rtg-yang-coord@ietf.org
> https://www.ietf.org/mailman/listinfo/rtg-yang-coord
>
>