]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/rgw/rgw_multi/zone_rados.py
4 from itertools
import izip_longest
as zip_longest
6 from itertools
import zip_longest
8 from nose
.tools
import eq_
as eq
10 from .multisite
import *
12 log
= logging
.getLogger(__name__
)
14 def check_object_eq(k1
, k2
, check_extra
= True):
17 log
.debug('comparing key name=%s', k1
.name
)
19 eq(k1
.get_contents_as_string(), k2
.get_contents_as_string())
20 eq(k1
.metadata
, k2
.metadata
)
21 eq(k1
.cache_control
, k2
.cache_control
)
22 eq(k1
.content_type
, k2
.content_type
)
23 eq(k1
.content_encoding
, k2
.content_encoding
)
24 eq(k1
.content_disposition
, k2
.content_disposition
)
25 eq(k1
.content_language
, k2
.content_language
)
27 eq(k1
.last_modified
, k2
.last_modified
)
29 eq(k1
.owner
.id, k2
.owner
.id)
30 eq(k1
.owner
.display_name
, k2
.owner
.display_name
)
31 eq(k1
.storage_class
, k2
.storage_class
)
33 eq(k1
.version_id
, k2
.version_id
)
34 eq(k1
.encrypted
, k2
.encrypted
)
37 class RadosZone(Zone
):
38 def __init__(self
, name
, zonegroup
= None, cluster
= None, data
= None, zone_id
= None, gateways
= None):
39 super(RadosZone
, self
).__init
__(name
, zonegroup
, cluster
, data
, zone_id
, gateways
)
46 def __init__(self
, zone
, credentials
):
47 super(RadosZone
.Conn
, self
).__init
__(zone
, credentials
)
49 def get_bucket(self
, name
):
50 return self
.conn
.get_bucket(name
)
52 def create_bucket(self
, name
):
53 return self
.conn
.create_bucket(name
)
55 def check_bucket_eq(self
, zone_conn
, bucket_name
):
56 log
.info('comparing bucket=%s zones={%s, %s}', bucket_name
, self
.name
, zone_conn
.name
)
57 b1
= self
.get_bucket(bucket_name
)
58 b2
= zone_conn
.get_bucket(bucket_name
)
60 log
.debug('bucket1 objects:')
61 for o
in b1
.get_all_versions():
62 log
.debug('o=%s', o
.name
)
63 log
.debug('bucket2 objects:')
64 for o
in b2
.get_all_versions():
65 log
.debug('o=%s', o
.name
)
67 for k1
, k2
in zip_longest(b1
.get_all_versions(), b2
.get_all_versions()):
69 log
.critical('key=%s is missing from zone=%s', k2
.name
, self
.name
)
72 log
.critical('key=%s is missing from zone=%s', k1
.name
, zone_conn
.name
)
75 check_object_eq(k1
, k2
)
77 # now get the keys through a HEAD operation, verify that the available data is the same
78 k1_head
= b1
.get_key(k1
.name
)
79 k2_head
= b2
.get_key(k2
.name
)
81 check_object_eq(k1_head
, k2_head
, False)
83 log
.info('success, bucket identical: bucket=%s zones={%s, %s}', bucket_name
, self
.name
, zone_conn
.name
)
87 def get_conn(self
, credentials
):
88 return self
.Conn(self
, credentials
)