From: Colin Patrick McCabe Date: Tue, 17 May 2011 00:12:45 +0000 (-0700) Subject: obsync: preserve user-defined metadata X-Git-Tag: v0.29~92 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e04396260151663c0b4568741ab34d158abca2ee;p=ceph.git obsync: preserve user-defined metadata Signed-off-by: Colin McCabe --- diff --git a/src/obsync/obsync.py b/src/obsync/obsync.py index db29827560d6..4d47e2260a80 100755 --- a/src/obsync/obsync.py +++ b/src/obsync/obsync.py @@ -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""" diff --git a/src/obsync/test-obsync.py b/src/obsync/test-obsync.py index 9b09cc72b59d..79dfb7f16433 100755 --- a/src/obsync/test-obsync.py +++ b/src/obsync/test-obsync.py @@ -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)