[OpenAFS-devel] Discarding tokens -- is this good?

Robert Banz banz@umbc.edu
Sun, 12 Nov 2006 13:12:25 -0500


On Nov 12, 2006, at 10:48 AM, Jeffrey Altman wrote:

> Robert Banz wrote:
>>             if ((acode == VICETOKENDEAD) || (acode == RXKADEXPIRED))
>>
>> Leads to the same message, I've added an extra bit to the  
>> "...expired"
>> error message to tell me *which* of these is the case -- but I'm  
>> pretty
>> sure that from the client's perspective it's tokens shouldn't be
>> expiring for quite awhile.
>
> VICETOKENDEAD does not mean that the client's tokens are expired.
> It means that the token's associated with the RX connection are  
> expired.
> The file server sends this error when the last call received by the
> file server was so long ago that the tokens associated with the
> connection are no longer good.  Its meant to trigger the use of a new
> RX connection.  It should not trigger the destruction of the tokens
> held by the client.
>
> Only an RXKADEXPIRED or RXKADBADTICKET should do that.

Thanks for the better explanation of the error codes.

According to the code in the client, all three of these states lead  
to the same result -- getting UTokensBad set in user->states, with  
the only difference in handling being that VICETOKENDEAD &  
RXKADEXPIRED printing the "...expired" error message, and  any other  
RXK error gets it's error code printed.  Check out afs/afs_analyze.c...

The intended behavior that you describe above makes sense, however,  
the current way the error handling is coded doesn't follow.  My only  
"fear" in fixing this a lack of understanding of some of the  
ramifications.  While it looks relatively simple to ask for a retry  
of the call, and initiate a new RX connection, there doesn't seem to  
currently be a way to put a limit on how many times something would  
be retried.  I think that would require adding a counter to vrequest  
to track how many times this request may have been retried as I don't  
think it should be unbounded -- at some point it should end up  
throwing an IO error back up the stack...  Or are there already  
limits in-place for this?

Thoughts?