Re: SETCLIENTID issues (long)

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: cburnett@us.ibm.com
Date: 07/22/02-11:02:23 AM Z


From: cburnett@us.ibm.com
Subject: Re: SETCLIENTID issues (long)
Message-ID: <OF25545644.0C0186BF-ON85256BFE.0056E1B6@us.ibm.com>
Date: Mon, 22 Jul 2002 11:02:23 -0500

Mike,

This is good information, thanks for posting it.
Just a couple of remarks on some of the sections below.

.
.

> - The inclusion of the callback and callback_ident fields
>   in hindsight, may have been a mistake. The reason is that
>   SETCLIENTID ought to be focused on the tricky problem
>   of safely establishing the clientid4 value. There should
>   have been a separate, SETCALLBACK operation. This way, we
>   would not issues with how to change callback information
>   without perturbing our hard won clientid4 value. I am
>   not proposing adding the SETCALLBACK operation though,
>   because it is not necessary (IMHO) to make the protocol
>   work.
>

This is essentially the idea I suggested by adding
the clientid4 into the SETCLIENTID args. A clientid4 of 0,
means the client is doing its initial SETCLIENTID call in
order to get its clientid created at the server. If the client
wants to update its callback information, it makes the
SETCLIENTID call with its assigned clientid4 value. So a
SETCLIENTID call with clientid4 == 0, is the classic SETCLIENTID
call. When clientid4 is non-zero (the server created clientid),
its effectively your suggested SETCALLBACK operation.
Of course, this implies that 0 is not a valid clientid4 value for a
server to assign.

I obviously was not clear enough in my earlier suggestion, since you
concluded that I was suggesting new persistent state at the server. That
was not my intent. It really is the concept you have described with your
SETCALLBACK op where the client uses its established clientid4 to update
its attributes. I like your idea of a separate operation better.
.
.
.

** On July 8, Rick asks

> > How is the server supposed to distinguish between a client
> > doing a retry of setclientid and different clients doing
>
> Let x be the "id" field of the nfs_client_id4 struct,
> v be the verifier, and c be the clientid4 value.
>
> A client that does a retry of a SETCLIENTID { v, x }
> gets the following result depending on the following cases:
>
.
.
.
.
>
> - DRC miss and server has recorded a confirmed { u, x, c }
>   such that v != u and has not recorded any unconfirmed
>   { *, x, * } record for x.  The server records an
>   unconfirmed { v, x, d } (d != c). The server awaits
>   confirmation of d via SETCLIENTID_CONFIRM.
>

 Is this really true given x (the nfs_client_id4.id value)
 is the same? I thought this case represents a rebooted client
 with a new verifier (assuming auth is the same). Isn't the
 server supposed to return clientid4 c so the following
 SETCLIENTID_CONFIRM call causes the server to release the
 state for the previous life of x. If the server creates
 a new record with clientid4 d, what is going to reclaim the
 record and associated state for {u, x, c}? Where did I get
 confused?
.
.
.
.
> That said, there will inevitably be NFS4ERR_CLID_INUSE
> errors reported whether due to server or client bugs, or the
> improbable occurring.  As Spencer wrote on July 18, the
> client that has done its level best to pick a collision
> free id string that still gets NFS4ERR_CLID_INUSE can use
> this algorithm: "have it [the client] wait a server lease
> period and retry the operation". I would add, that if the
> client still gets NFS4ERR_CLID_INUSE, we can assume that
> another client has usurped the id string. This is why
> the SETCLIENTID4 results look like this:
>
>   union SETCLIENTID4res switch (nfsstat4 status) {
>    case NFS4_OK:
>               SETCLIENTID4resok      resok4;
>    case NFS4ERR_CLID_INUSE:
>               clientaddr4    client_using;
>    default:
>               void;
>   };
>
> The client that gets an NFS4ERR_CLID_INUSE after waiting
> the lease period should log the offending client's
> address. Such a client might also check whether the
> offending address is one that of the client getting the
> NFS4ERR_CLID_INUSE error.
>

Would it also be acceptable for the client to then retry
the SETCLIENTID with a newly generated nfs_client_id4.id
value after it has logged a message and evaluated the
client_using information?

Carl


Carl Burnett
AIX Kernel Architecture - Distributed File Systems
(512) 838-8498, TL 678-8498
(please reply to cburnett@us.ibm.com)


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

This archive was generated by hypermail 2.1.2 : 03/04/05-01:50:04 AM Z CST