]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
obsync: preserve user-defined metadata
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 17 May 2011 00:12:45 +0000 (17:12 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 17 May 2011 00:12:45 +0000 (17:12 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/obsync/obsync.py
src/obsync/test-obsync.py

index db29827560d6479568f5f08b4a360723fec3b575..4d47e2260a806285d11b4343c9e246452bef48f4 100755 (executable)
@@ -499,11 +499,19 @@ def s3_key_to_meta(k):
     meta = {}
     if (k.__dict__.has_key("content_type")):
         meta[CONTENT_TYPE_XATTR] = k.content_type
+    for k,v in k.metadata.items():
+        meta[META_XATTR_PREFIX + k] = v
     return meta
 
-def meta_to_s3_key(k, meta):
-    if (meta.has_key(CONTENT_TYPE_XATTR)):
-        k.set_metadata("Content-Type", meta[CONTENT_TYPE_XATTR])
+def meta_to_s3_key(key, meta):
+    for k,v in meta.items():
+        if (k == CONTENT_TYPE_XATTR):
+            key.set_metadata("Content-Type", v)
+        elif (k[:len(META_XATTR_PREFIX)] == META_XATTR_PREFIX):
+            k_name = k[len(META_XATTR_PREFIX):]
+            key.set_metadata(k_name, v)
+        else:
+            raise Exception("can't understand meta entry: %s" % k)
 
 class S3StoreIterator(object):
     """S3Store iterator"""
index 9b09cc72b59d931d8ab52f0bf054686602a4105a..79dfb7f1643342159441e290c6ef535d08441b2e 100755 (executable)
@@ -544,6 +544,17 @@ assert_xattr("%s/content_type_test2/hammy_thing" % tdir,
 assert_xattr("%s/content_type_test2/eggy_thing" % tdir,
         { CONTENT_TYPE_XATTR : "Eggs" })
 
-# Check that content-type is preserved
+# Check that user-defined metadata is preserved
+os.mkdir("%s/user_defined_md" % tdir)
+sporkfile = "%s/user_defined_md/spork" % tdir
+f = open(sporkfile, 'w')
+f.write("SPAM SPAM SPAM")
+f.close()
+xattr_sync(sporkfile,
+    { "rados.meta.tines" : "3", "rados.content_type" : "application/octet-stream" })
+obsync_check("%s/user_defined_md" % tdir, opts.buckets[0], ["--delete-after"])
+obsync_check(opts.buckets[0], "%s/user_defined_md2" % tdir, ["-c"])
+assert_xattr("%s/user_defined_md2/spork" % tdir,
+    { "rados.meta.tines" : "3", "rados.content_type" : "application/octet-stream" })
 
 sys.exit(0)