[OpenAFS-devel] Brief proposal on numbers

Steve Simmons scs@umich.edu
Fri, 2 Nov 2007 12:38:38 -0400


KB are pretty small units these days. Using 'vos setfields foo - 
maxquota' as a test case, I'd like to add the following to argument  
handling when afs utilities use number that are multiples of 1024 on  
the command line:

    1  - 1024 bytes
    1K - 1024 bytes
    1M - 1024 * 1024 bytes
    1G - 1024 * 1024 * 1024 bytes

and so on through tera and peta. Anybody think we'll be running  
greater-than-petaKbybe volumes before afs3? I didn't think so. :-)

I don't think doing a simultaneous powers-of-10 implementation is a  
good idea. IMHO

    1m = 1000K (1,024,000)
    1g = 1000m (1,024,000,000)

is inherently confusing to end users and I don't think anybody wants  
to explain to them why quotas are sooo much easier with 1K units.  
Historically I've found most users happier when told "because that's  
how computers work" as long as it results in them getting more than  
they expected (cf the recent Seagate lawsuit). And I don't think  
there's much utility for us admins gained by [kmgtp] as powers of  
1000 'cause it's pretty easy to remember three zeros is a power of  
1000. Remembering the base 10 expression of 1M, 1G, and their  
multiples is a lot harder.

I'm open to argument on fractions, ie, should .5G or 1.5G be allowed,  
and if so what they should mean. My off-the-cuff assessment is that  
no, don't allow. But if it was allowed, I'd say it should be a  
multiplier on the K/M/G value, eg, .5G is 1024 * 1204 * 1024 *.5,  
rounded  to the nearest whole 1024 bytes.

To be a bit more specific, then, I propose that numbers which are  
inherently expressed as kilobytes be allowed in the form of this  
possibly sloppy regexp:

     \<d*(.d*)?([KMGTPkmgtp]([Bb])?)?\>

In english:

  o  must begin and end on a word boundary (the \< and \>)
  o  one or more digits are required [0-9]
  o  may be followed by a fractional part
  o  may be followed by K, M, G, T or P, meaning appropriate powers  
of 1024
  o  KMTGP may be in upper or lower case
  o  if KMTGP present, may be followed by an upper or lower case B
  o  In the absence of KMTGP, K is assumed

For an initial implementation, I'd make this modification to 'vos  
setf' and maybe 'fs setq' as a test. Assuming it works well, we'd  
then start adding it to any other appropriate parts of the AFS  
utilities. If there are any.

Caveat: I've not looked at the command line processing code since  
starting this idea. I know there's a lot of 'standard AFS arg  
processing' in there, but haven't looked at the issue of modifying or  
extending it.

Steve