]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osync: fix hash compares
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Sat, 19 Mar 2011 00:03:09 +0000 (17:03 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Sat, 19 Mar 2011 00:03:09 +0000 (17:03 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/osync/osync.py

index 682be633a05cec71b1f38f588bc7de6f321bc480..ceff23a1dcbe0364d4876007ec28648d2e2f93cd 100755 (executable)
@@ -21,6 +21,7 @@ from boto.s3.key import Key
 from optparse import OptionParser
 from sys import stderr
 import boto
+import base64
 import errno
 import hashlib
 import mimetypes
@@ -53,13 +54,24 @@ def get_md5(f, block_size=2**20):
         if not data:
             break
         md5.update(data)
-    return md5.digest()
+    return "%s" % md5.hexdigest()
 
 def strip_prefix(prefix, s):
     if not (s[0:len(prefix)] == prefix):
         return None
     return s[len(prefix):]
 
+def etag_to_md5(etag):
+    if (etag[:1] == '"'):
+        start = 1
+    else:
+        start = 0
+    if (etag[-1:] == '"'):
+        end = -1
+    else:
+        end = None
+    return etag[start:end]
+
 ###### NonexistentStore #######
 class NonexistentStore(Exception):
     pass
@@ -69,7 +81,7 @@ class Object(object):
     def __init__(self, name, md5, size):
         self.name = name
         self.md5 = md5
-        self.size = size
+        self.size = int(size)
     def equals(self, rhs):
         if (self.name != rhs.name):
             return False
@@ -124,7 +136,7 @@ class S3StoreIterator(object):
         # This will raise StopIteration when there are no more objects to
         # iterate on
         key = self.blrs.next()
-        ret = Object(key.name, key.md5, key.size)
+        ret = Object(key.name, etag_to_md5(key.etag), key.size)
         return ret
 
 class S3Store(Store):
@@ -172,7 +184,7 @@ s3://host/bucket/key_prefix. Failed to find the bucket.")
         k = self.bucket.get_key(obj.name)
         if (k == None):
             return None
-        return Object(obj.name, k.md5, k.size)
+        return Object(obj.name, etag_to_md5(k.etag), k.size)
     def upload(self, local_copy, obj):
         if (opts.more_verbose):
             print "UPLOAD: local_copy.path='" + local_copy.path + "' " + \