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"""
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)