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 <rwil...@cisco.com <mailto:rwil...@cisco.com>> wrote:



    On 14/12/2016 14:09, Andy Bierman wrote:


    On Wed, Dec 14, 2016 at 3:07 AM, Martin Bjorklund <m...@tail-f.com
    <mailto:m...@tail-f.com>> wrote:

        Andy Bierman <a...@yumaworks.com <mailto:a...@yumaworks.com>>
        wrote:
        > On Tue, Dec 13, 2016 at 1:41 PM, Mehmet Ersue
        <mer...@gmail.com <mailto:mer...@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

_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to