[AFS3-std] Request for a capability bit for RxOSD
Jeffrey Hutzelman
jhutz@cmu.edu
Wed, 17 Jun 2009 11:00:02 -0400
--On Monday, June 15, 2009 04:26:21 PM +0200 Felix Frank
<Felix.Frank@Desy.de> wrote:
> For OpenAFS+OSD, it would be helpful for the clients to identify OSD
> capable fileservers early. Codepaths can then be separated more easily
> for OSD access vs. normal fileserver access.
>
> Similarly, fileservers can store a hint about clients that are OSD
> capable, and send OSD-related data only to those. Other clients will (as
> is the case already) be forwarded actual file data instead of being
> supplied with OSD metadata.
So really, you're asking for two capability bits -- one to advertise an OSD
server, and one to advertise that a client is OSD-capable. I'm not sure I
understand the purpose of either.
Why does a client need to know that a particular fileserver is an OSD
server? AFAIK the only behavioral difference is when accessing data of
vnodes which are _not_ directly resident on the server. Knowing the server
is OSD doesn't save you from fetching vnode status, and doesn't save you
from the possibility that you might have to fetch data from the server. It
does mean you might be able to use OSD access to reach some vnodes, but
that's going to be on a per-vnode basis, and it's going to involve making
different RPC's, so I don't see what a server-level "this server might
contain OSD vnodes" bit buys you.
Similarly, why does a server need to know a client is OSD-capable? Servers
don't decide whether to "forward actual file data" vs sending OSD metadata;
the OSD metadata is provided via FetchStatus and/or another RPC, and calls
to RXAFS_FetchData should still result in real file data. So the only
important thing here is what RPC is being called; a client that asks for
OSD metadata can be assumed to want that, and a client that calls
RXAFS_FetchData can be assumed to want the data that it asked for.
I'm not opposed to adding capability bits for this, but first I want to be
clear on exactly what they're for and what the semantics are.
Particularly...
- What do you have to do/support in order to advertise the bit?
- How are peers expected to behave when they see the bit?
- How are peers expected to behave when they do not see the bit?
- What is the expected behavior when talking to an old peer that doesn't
understand the bit?
- When can the bit change?
- What happens if a peer which supports the new feature fails to notice the
bit?
- Are there any security implications, particularly when capabilities are
unauthenticated?
These sorts of questions should be answered for _any_ new capability bit.
-- Jeff