Jeffrey Hutzelman wrote (Wed Jun 17 2009 17:00:02 GMT+0200 (CEST))
--On Monday, June 15, 2009 04:26:21 PM +0200 Felix Frank <[email protected]> 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.

Yes.

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.

All of the above is factually correct. The one practical advantage that I can really think of is that OpenAFS clients could use the absence of this bit to insulate themselves against servers that use spare fields (yet to be approved for RxOSD too, of course) for other purposes. Local patches could even continue interpreting those fields differently inside codepaths that are only run if the server is known not to be OSD capable.

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.

Same as above essentially - all true (as far as I can tell). But this would allow OpenAFS to prevent fileservers from using formerly spare fields in the first place unless the client specifically declares knowledge about their semantics. Again, this will prevent clients that use incompatible (and non-standard) enhancements to function even with OpenAFS+OSD servers that do use, say, SyncCounter (just speaking hypothetically now, I realize that's a separate discussion).

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...

From the top of my head:

- What do you have to do/support in order to advertise the bit?

Server must implement a couple of essential OSD-related RPCs.
Clients must be able to interpret the specific protocol fields.

- How are peers expected to behave when they see the bit?

Server behaves "normally" in terms of OSD.
Client makes an OsdPolicy-RPC prior to writing, to determine wether to use OSD or not.
(I may have some of that wrong.)

- How are peers expected to behave when they do not see the bit?

Server does not use OSD-specific protocol fields.
No restrictions for the client.

- What is the expected behavior when talking to an old peer that doesn't understand the bit?

Advertising the bit implies no assumptions about what either client nor server is supposed to send/return. I'm not sure I understand the question.

- When can the bit change?

Fileservers cannot loose or gain the capability, but on the same machine, a different binary with different capabilities can be started, of course.
Clients can be configured (not) to use OSD using an fs command.

- What happens if a peer which supports the new feature fails to notice the bit?

If the server won't detect the capability it will treat the client as non-OSD-aware. What the client does is a matter of design - given my statements above however, it would be cleanest to disallow a client to treat a server that is not known to have the capability as an OSD-fileserver. That way, the client won't mistake messages from incompatibly patched servers for OSD related data.

- Are there any security implications, particularly when capabilities are unauthenticated?

I have no response to this. I don't see how such information can impact security at all.

Bottom line is that OSD does and will function without any capability bit. What I hope to achieve is greater acceptance by potential users, smaller reluctance from the AFS community to approve use of reserved/unused protocol fields and for OpenAFS, more thorough code segregation of RxOSD (again, in the interest of user acceptance).

Regards
 - Felix

_______________________________________________
AFS3-standardization mailing list
[email protected]
http://michigan-openafs-lists.central.org/mailman/listinfo/afs3-standardization

Reply via email to