X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;ds=sidebyside;f=cleaner%2Fcleaner;h=336537da3b50c7bacc5539c65a06893de6e02387;hb=1d2357b567318ccc6172f4b9edbbadbeba713086;hp=4267b6e96938311ba452f4d613be2f7d5c216cda;hpb=a4406c5b577e751f0fc97aa1d3a1fe553ffff673;p=bluesky.git diff --git a/cleaner/cleaner b/cleaner/cleaner index 4267b6e..336537d 100755 --- a/cleaner/cleaner +++ b/cleaner/cleaner @@ -63,10 +63,12 @@ class FileBackend: class S3Backend: """An interface to BlueSky where the log segments are on in Amazon S3.""" - def __init__(self, bucket, path='', cachedir=None): + def __init__(self, bucket, path='', cachedir="."): self.conn = boto.connect_s3(is_secure=False) self.bucket = self.conn.get_bucket(bucket) self.path = path + self.cachedir = cachedir + self.cache = {} def list(self): files = [] @@ -75,19 +77,32 @@ class S3Backend: return files def read(self, filename): - k = Key(self.bucket) - k.key = self.path + filename - return k.get_contents_as_string() + if filename in self.cache: + fp = open(os.path.join(self.cachedir, filename), 'rb') + return fp.read() + else: + k = Key(self.bucket) + k.key = self.path + filename + data = k.get_contents_as_string() + fp = open(os.path.join(self.cachedir, filename), 'wb') + fp.write(data) + fp.close() + self.cache[filename] = True + return data def write(self, filename, data): k = Key(self.bucket) k.key = self.path + filename k.set_contents_from_string(data) + if filename in self.cache: + del self.cache[filename] def delete(self, filename): k = Key(self.bucket) k.key = self.path + filename k.delete() + if filename in self.cache: + del self.cache[filename] def loc_to_name(self, location): return "log-%08d-%08d" % (location)