Hi Rob,

See below ...

--Gert

From: Robert Wilton [mailto:rwil...@cisco.com]
Sent: 05 January 2016 16:05
To: Gert Grammel
Cc: netmod@ietf.org
Subject: Re: [netmod] netmod-opstate-reqs and error option terms (rollback on 
error)

Hi Gert,

Considering a rollback-on-error request that failed:

If you leave the configuration in intended config then what happens if a 
separate config request comes in from another client?  Should that request be 
processed in the context of the failed intended config, or the last successful 
config change, or must it wait for the original client to decide how to process 
the failure that occurred?
Gert> If a client is has the intention to update/change a config, its decision 
is based on the present state of the configuration when the decision is taken. 
Ideally the present configuration is in a state where intended == applied 
config, so there is stable ground upon which a change is applied. However there 
is also the case where intended != applied config and there are two reasons for 
that.

a)      a previous intended config is in the process of being applied

b)      a previous configuration failed due to an error
In case a) the following config just needs to wait, or if it can be applied 
without interfering with the previous intended config *may* be executed in 
parallel (up to the server to implement)
Case b) is just about the same as stop-on-error or continue-on-error. If there 
is an error in configuring a node and the new intended config uses 
stop-on-error, then it should not be executed. In contrast, a continue-on-error 
configuration can be applied independently.

Also what would happen if the client disconnects from the server when a 
rollback-on-error request has failed, and the server is waiting for the client 
to tell it what to do?
Gert> the previous (rolled-back) configuration is applied and the intended 
config remains different from the applied config. It will stay like that until 
the Client figured out what to do. E.g. one option is to re-apply the intended 
config with a continue-on-error semantic. If a second client, despite the 
server calamities, decides to change the config, it can try to do so in a 
continue-on-error mode as well.

I think that what you describe sounds more like a config request to a candidate 
configuration datastore.  I.e. write the config to candidate, and then commit.  
If the commit fails, the configuration in the running datastore is rolled back 
but the configuration remains in the candidate datastore.  But note that in 
this scenario both the intended and applied configuration have both been 
reverted to the state before the commit operation was attempted.
Gert> bear with me but I don't parse the two sentences as they seem 
contradictory. Perhaps you could spend a few more words.
I am advocating for a case with a consistent behavior in case of failures in 
all execution models. Irrespective of stop-on-error, continue-on-error or 
rollback-on-error, the non-performing configuration is the diff between 
intended and applied configuration that can conveniently be reported by the 
server. In any of those cases, the server is rightfully in an errored state 
with respect to configuration and it is risky to attempt a new configuration 
unless the client resolves the misalignment. It appears to me that we have 
broadly 3 failure cases to deal with:

1)      The client did a poor job in figuring out which configuration to push 
on a server

2)      The server did a poor job in reporting its own state to the client (see 
cheating synchronous), which in turn can lead to 1)

3)      Something unexpected happens in between the client figuring out the 
intended config and the server applying it.
Case 1) can only be dealt by the Client. 2) is often dealt with re-applying the 
same intended config a bit later, hoping the server is in a better mood now (by 
experience it often works). If it still doesn't, it's again up to the client to 
figure out what's best now. Since the event in 3) may impact the state of the 
node quite a bit, also here it is the job of the client to figure out which 
config to apply based on the new state.

Thanks,
Rob

On 28/12/2015 17:40, Gert Grammel wrote:
Rob,

>From a client perspective there should be no difference in the intended state 
>behavior depending on error conditions, if continue-on-error leaves the 
>intended state, a rollback-on-error should keep it as well. Moreover, a client 
>reaction on a unsuccessful application of intended state could be to a) 
>re-try, b) retry with continue-on-error or c) retry wit stop-on-error. Those 
>actions would not require any change of intended state.
It shouldn't be the server to decide what the intended state is supposed to be 
or hoe long it should last.

Gert


Sent from my Apple ][

On 23 Dec 2015, at 22:25, Robert Wilton 
<robert.pub...@wilton.org.uk<mailto:robert.pub...@wilton.org.uk>> wrote:
Hi Gert,

Please see one comment inline ...

On 23/12/2015 10:24, Gert Grammel wrote:
Rob, Kent,

Adding to Rob's comments:



From: netmod <netmod-boun...@ietf.org<mailto:netmod-boun...@ietf.org>> on 
behalf of Robert Wilton 
<robert.pub...@wilton.org.uk<mailto:robert.pub...@wilton.org.uk>>
Date: Wednesday 23 December 2015 09:28
To: Kent Watsen <kwat...@juniper.net<mailto:kwat...@juniper.net>>, 
"netmod@ietf.org<mailto:netmod@ietf.org>" 
<netmod@ietf.org<mailto:netmod@ietf.org>>
Subject: Re: [netmod] netmod-opstate-reqs and error option terms (rollback on 
error)

Hi Kent,

Yes, I think that we are in agreement.

I've one further comment inline below ...

On 23/12/2015 02:41, Kent Watsen wrote:
[As a contributor]

Hi Robert, I want to go back to Jason's original questions.  I think we're 
aligned on this, but please check my answers below.

Quoting Jason's original text now:


Is there some intention in the opstate requirements to add some sort
of all-or-nothing behavior to transition (C)?
Yes
+1 (if rollback-on-error has been requested)



i.e. if some part of
an edit fails during the transition from intended->applied we should
"rollback" the other parts that may have already been applied ?
Yes
+1 (if rollback-on-error has been requested)


Would we then remove it all from intended as well ?
IMO, yes.  This is more easily understood when thinking about Synchronous 
Configuration Operations (defined in opstate-reqs), but I believe that it 
equally applies to Asynchronous Configuration Operations, so long as the client 
explicitly ops-in for the behavior.
IMO no. The intended config is imposed by the client to the server and other 
than performing some syntax check, the server has no choice to accept it as-is. 
If the server can't apply the intended config, obviously the mismatch between 
intended and applied config needs to be notified. As a result, it is up to the 
client to decide what to do. Actions can vary according to the situation naming 
a few: 1) retry intended config, 2) retry intended config with 
continue-on-error, 3) re-apply the previous intended config, ...
In other words:

  1.  the client shall not touch the applied config directly,
  2.  the server shall not touch the intended config,
  3.  it's up to the server to align the intended with the applied config in a 
way requested by the client (i.e. rollback-on-error, ...)
  4.  Once applied, the server notifies the client about success or failure to 
do so
I think that it cleaner just to fail and roll back the entire request (both 
intended and applied), i.e. effectively implementing default transaction 
semantics.  The client still has full control as to what to do after the 
failure has occurred.  I'm not sure how leaving it in intended config would 
pragmatically work with subsequent requests that may have been queued up.

Thanks,
Rob




_______________________________________________

netmod mailing list

netmod@ietf.org<mailto:netmod@ietf.org>

https://www.ietf.org/mailman/listinfo/netmod

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

Reply via email to