[tahoe-dev] change to storage layout

zooko zooko at zooko.com
Thu Feb 14 06:00:55 PST 2008


Folks:

As of changeset [2136] -- 2008-02-12, the organization of shares on  
storage servers has changed to use base62 encoding instead of  
base32.  If you run a storage server and you want it to find and  
serve up shares which it wrote to its disk before [2136], then you  
should execute the attached "convertshares.py" script in your  
$BASEDIR/storage/shares directory.  (This script will also convert  
shares which were written before [2031] -- 2008-01-31.)

Regards,

Zooko

changesets mentioned in this e-mail:

http://allmydata.org/trac/tahoe/changeset/2136
http://allmydata.org/trac/tahoe/changeset/2031

-------------- next part --------------
A non-text attachment was scrubbed...
Name: convertshares.py
Type: text/x-python-script
Size: 1992 bytes
Desc: not available
Url : http://allmydata.org/pipermail/tahoe-dev/attachments/20080214/617bcea6/attachment.bin 
-------------- next part --------------

------- begin appended convertshares.py
#!/usr/bin/env python

import os

from allmydata.util import fileutil, idlib
from allmydata.storage import storage_index_to_dir

newtopdirs = set()
for sidir in os.listdir('.'):
     if idlib.could_be_base32_encoded_l(sidir, 128):
         newtopdir = idlib.b2a_l(idlib.a2b(sidir)[:2], 14)
         if not newtopdir in newtopdirs:
             newtopdirs.add(newtopdir)
             fileutil.make_dirs(newtopdir)
         try:
             os.rename(sidir, os.path.join(newtopdir, sidir))
         except EnvironmentError:
             # Maybe there is already a sidir there and we need to  
move the
             # contents of this sidir into it.
             for fn in os.listdir(sidir):
                 os.rename(os.path.join(sidir, fn), os.path.join 
(newtopdir, sidir, fn))
             # Okay, good, now rmdir the old one.
             os.rmdir(sidir)


newnewtopdirs = set()
for dirpath, dirnames, filenames in os.walk('.'):
     for dirname in dirnames:
         if idlib.could_be_base32_encoded_l(dirname, 128):
             si = idlib.a2b_l(dirname, 128)
             sidir = storage_index_to_dir(si)
             topdir = os.path.dirname(sidir)
             if not topdir in newnewtopdirs:
                 newnewtopdirs.add(topdir)
                 fileutil.make_dirs(topdir)
             try:
                 os.rename(os.path.join(dirpath, dirname), sidir)
             except EnvironmentError:
                 # Maybe there is already a sidir there and we need  
to move the
                 # contents of this sidir into it.
                 for fn in os.listdir(os.path.join(dirpath, dirname)):
                     os.rename(os.path.join(dirpath, dirname, fn),  
os.path.join(sidir, fn))
                 # Okay, good, now rmdir the old one.
                 os.rmdir(os.path.join(dirpath, dirname))
     try:
         os.rmdir(dirpath)
     except EnvironmentError:
         pass

for oldnewtopdir in newtopdirs:
     try:
         os.rmdir(oldnewtopdir)
     except EnvironmentError:
         pass



More information about the tahoe-dev mailing list