Subject: Re: [Insipid] draft-ietf-insipid-session-id-14: comments and questions

From: "Paul Giralt (pgiralt)" <[email-masked]>
Date: Tue, 2 Feb 2016 21:33:44 +0000

Brett,

After thinking through this a bit more, reverting to the previous UUID if a mid-dialog transaction fails on both endpoints and intermediaries is the cleanest approach to solve this issue and should address your concerns. The text will make it clear what needs to happen in all scenarios and will ensure RFC 3261 Section 8.2 is not violated. I will be updating the draft with these changes and starting a new thread for comments. As always, thanks for the feedback.

-Paul

> On Jan 6, 2016, at 4:01 PM, Brett Tate <[email-masked]> wrote:
> 
> Hi,
> 
> Thanks for the response; reply is inline.
> 
> 
>>> The proposal currently appears to violate (or alter)
>>> RFC 3261 section 8.2: "If it is rejected, all state
>>> changes MUST NOT be performed".  Similarly it also
>>> appears to impact the following RFC 6141 section 3.3
>>> SHOULD: "If any of the changes requested in a re-INVITE
>>> or in any transaction within it have already been
>>> executed, the UAS SHOULD return a 2xx response”.
>> 
>> You could argue that the intermediary is not the one
>> actually rejecting the request bur merely relaying the
>> rejection. The proposal says that the device that is
>> actually doing the rejection of the request is not storing
>> the UUID.  For troubleshooting purposes, which is the
>> desired objective of the Session-ID, it makes sense to
>> do as I proposed.
> 
> The argument is weak.  You are basically saying that an intermediary should
> remember the changed uuid even though the re-INVITE to connect a different
> session failed.
> 
> The proposal appears to cause intermediaries (e.g. B2BUAs) to violate RFC
> 3261 section 8.2.  Similarly it also appears to impact the following RFC
> 6141 section 3.3 SHOULD: "If any of the changes requested in a re-INVITE or
> in any transaction within it have already been executed, the UAS SHOULD
> return a 2xx response”.
> 
> 
>>> You might want to exclude CANCEL and its 2xx response
>>> from the algorithm (although decision might be
>>> influenced by decision concerning 100 response).
>>> CANCEL and related 2xx response are not end-to-end (even
>>> if using proxies instead of B2BUAs).
>> 
>> Is there any situation where including CANCEL could cause
>> a problem?
> 
> It depends upon what you mean by problem.  It can cause more inconsistencies
> because of race conditions and not being end-to-end.  I'm not sure how
> vendors typically handle CANCEL in relation to RFC 3261 section 8.2's "all
> state changes MUST NOT be performed" if the CANCEL causes a 487 for
> re-INVITE; however based upon RFC 6141, it looks like the CANCEL changes (if
> anyone actually allows them) should be undone when sending the 487 response
> similar to what it mentions concerning UPDATE.  Similarly depending upon how
> long the transaction being cancelled is remembered, the CANCEL might be
> received after final response is sent and still result in 200 response for
> CANCEL.
> 
> 
>>>> The only additional rule for stateful intermediaries
>>>> is that if they accept a request and then forward that
>>>> request to another destination (therefore there was no
>>>> error found with the message), this will also trigger
>>>> the intermediary to update the retained UUID.
>>> 
>>> The proposal means that not all of the devices will
>>> necessarily agree if a uuid changed during failure
>>> situation.
>>> 
>>> Concerning "therefore there was no error found" statement,
>>> be aware that forwarding a request does not necessarily mean
>>> that no error was found (i.e. device can be lenient) or that
>>> the request won't eventually be rejected (with 400 or other
>>> failure response).
>> 
>> Yes, I totally understand that the request might be eventually
>> rejected by some other device down the line, but as an
>> intermediary, it seems like this is the best we can do.
> 
> No comment since currently unsure if the proposal is better than the draft
> or other potential mechanisms.
> 
> 
>>>> There will always be feature interactions that result in
>>>> temporarily mismatched Session IDs when intermediaries are
>>>> involved, but I don’t think the above proposal makes this
>>>> any worse of a problem in real-world applications.
>>> 
>>> I'm currently not sure if the proposal is better or worse
>>> than draft version 16.
>>> 
>>> From the rejecting device perspective, the proposal appears
>>> to be better.  The proposal currently appears to leave partial
>>> changes up to rejecting device (i.e. intermediaries allowed
>>> change but rejecting device did not) without any indication
>>> to modifier to know if change was successful at the remote
>>> endpoint.  This is about the same as changing some of the MUST
>>> to SHOULD (or MAY) within the current draft which would allow
>>> the rejecting device to make the decision concerning which is
>>> better for the situation.
>>> 
>> 
>> Changing MUSTs to SHOULDs would certainly address many of these
>> issues as well, but leave us with the issues you pointed out
>> with RFC 3261 section 8.2.
> 
> Yes; however the proposal also violates RFC 3261 section 8.2 since not
> always rolling back (on the intermediaries) or after 101-199 (on the
> rejecter).  And not allowing the first rejecter to potentially also violate
> it within the specific situation mandates inconsistency concerning the uuid
> values.