[AFS3-std] [RPC Request] 64-bit volume IDs, quotas, and block
usages
Jeffrey Hutzelman
jhutz@cmu.edu
Mon, 22 Jun 2009 17:37:45 -0400
--On Monday, June 22, 2009 04:59:59 PM -0400 Derrick Brashear
<shadow@gmail.com> wrote:
> On Mon, Jun 22, 2009 at 4:50 PM, Jeffrey Hutzelman <jhutz@cmu.edu> wrote:
>
>> --On Friday, June 19, 2009 04:49:15 PM -0500 Andrew Deason <
>> adeason@sinenomine.net> wrote:
>>
>> Per suggestions from Jeffrey Altman and others, here are what I believe
>>> to be the requirements for 64-bit fields pertaining to volume IDs,
>>> volume quotas, and block usage on volumes/partitions.
>>>
>>> The format resembles what Jeffrey posted as an example earlier, but I
>>> separated the affected RPCs according to what underlying struct changed
>>> in the RPC (if any); I just found it easier to follow. This is what's in
>>> the parentheses by "Affected RPCs". Some RPCs are listed more than once
>>> because of this: once for each structure changed. I also merged some
>>> fields into the same section when the list of affected RPCs was
>>> identical.
>>>
>>
>> By concentrating only on RPC's, you are missing significant portions of
>> the protocol. Anyone considering or proposing a change like this also
>> needs to consider its impacts on other parts of the protocol suite,
>> including...
>>
>> 1) The volume dump format, as represented in the data of RPC's like
>> AFSVolDump and AFSVolRestore.
>>
>
> As this is tagged, additional tags can be allocated, represented by
> capabilities, and tools (implementation-specific) can be provided to
> downgrade dumps if desired.
New tags can be allocated, but it's not as simple as just saying "allocate
a new tag". It's necessary to enumerate the changes that will need to be
made and how they'll interoperate with old clients. Note also that while
there are some cases where capabilities will help you, in general a
volserver generating a dump has no way to know what are the capabilities of
the eventual recipient of that dump, and a client sending a dump to
AFSVolRestore can tell what the receiving server's capabilities are but
usually has no way to adapt the dump to them.
Volume dumps can include both critical and non-critical tag extensions, and
the size and limited type information for non-critical tags can be
determined even by parsers which do not understand the tag. However, even
with non-critical tags, restoring a new dump to an old server may throw
away information.
In the particular case of 64-bit volume ID's, an extension can and should
use the existing format with 32-bit ID's, plus a non-critical extension tag
to represent the real 64-bit volume ID when that does not fit in 32 bits.
Since volume ID's in dumps are largely transient, this does not throw away
any important information. The same approach may not be feasible for the
next extension.
The point is, this is part of the protocol suite and needs to be considered
when proposing an extension, just as RPC arguments do.