import boto.s3.connection
import boto.s3.acl
+import teuthology.task_util.rgw as rgw_utils
+
import time
from teuthology import misc as teuthology
config = dict.fromkeys(config)
clients = config.keys()
- # just use the first client...
- client = clients[0];
+ client = rgw_utils.get_master_client(ctx, clients)
+
+ if not client:
+ # oh, well, just use the first client... multiregion stuff might not work correctly
+ client = clients[0];
##
user1='foo'
assert not err
assert len(out) == 0
+ rgw_utils.radosgw_agent_sync_all(ctx)
+
# connect to rgw
(remote,) = ctx.cluster.only(client).remotes.iterkeys()
(remote_user, remote_host) = remote.name.split('@')
for obj in out:
# TESTCASE 'log-show','log','show','after activity','returns expected info'
+ if obj[:4] == 'meta' or obj[:4] == 'data':
+ continue
+
(err, log) = rgwadmin(ctx, client, ['log', 'show', '--object', obj])
assert not err
assert len(log) > 0
+
assert log['bucket'].find(bucket_name) == 0
assert log['bucket'] != bucket_name or log['bucket_id'] == bucket_id
assert log['bucket_owner'] == user1 or log['bucket'] == bucket_name + '5'
assert err
# TESTCASE 'zone-info', 'zone', 'get', 'get zone info', 'succeeds, has default placement rule'
+ #
+
(err, out) = rgwadmin(ctx, client, ['zone', 'get'])
- assert len(out) > 0
- assert len(out['placement_pools']) == 1
+ orig_placement_pools = len(out['placement_pools'])
+
+ # removed this test, it is not correct to assume that zone has default placement, it really
+ # depends on how we set it up before
+ #
+ # assert len(out) > 0
+ # assert len(out['placement_pools']) == 1
- default_rule = out['placement_pools'][0]
- assert default_rule['key'] == 'default-placement'
+ # default_rule = out['placement_pools'][0]
+ # assert default_rule['key'] == 'default-placement'
rule={'key': 'new-placement', 'val': {'data_pool': '.rgw.buckets.2', 'index_pool': '.rgw.buckets.index.2'}}
(err, out) = rgwadmin(ctx, client, ['zone', 'get'])
assert len(out) > 0
- assert len(out['placement_pools']) == 2
+ assert len(out['placement_pools']) == orig_placement_pools + 1
from cStringIO import StringIO
import logging
import json
+import requests
from urlparse import urlparse
from teuthology import misc as teuthology
'radosgw-admin'.format(tdir=testdir),
'--log-to-stderr',
'--format', 'json',
+ '-n', client,
]
pre.extend(cmd)
+ log.info('radosgw-admin: cmd=%s' % pre)
(remote,) = ctx.cluster.only(client).remotes.iterkeys()
proc = remote.run(
args=pre,
return host, port
assert False, 'no endpoint for zone {zone} found'.format(zone=zone)
+def get_master_zone(ctx, client):
+ _, region_map = rgwadmin(ctx, client, check_status=True,
+ cmd=['-n', client, 'region-map', 'get'])
+ regions = region_map['regions']
+ for region in regions:
+ is_master = (region['val']['is_master'] == "true")
+ log.info('region={r} is_master={ism}'.format(r=region, ism=is_master))
+ if not is_master:
+ continue
+ master_zone = region['val']['master_zone']
+ log.info('master_zone=%s' % master_zone)
+ for zone_info in region['val']['zones']:
+ if zone_info['name'] == master_zone:
+ return master_zone
+ log.info('couldn\'t find master zone')
+ return None
+
+def get_master_client(ctx, clients):
+ master_zone = get_master_zone(ctx, clients[0]) # can use any client for this as long as system configured correctly
+ if not master_zone:
+ return None
+
+ for client in clients:
+ zone = zone_for_client(ctx, client)
+ if zone == master_zone:
+ return client
+
+ return None
+
def get_zone_system_keys(ctx, client, zone):
_, zone_info = rgwadmin(ctx, client, check_status=True,
cmd=['-n', client,
ceph_config.update(ctx.ceph.conf.get('client', {}))
ceph_config.update(ctx.ceph.conf.get(client, {}))
return ceph_config.get('rgw zone')
+
+
+def radosgw_agent_sync(ctx, agent_host, agent_port):
+ print 'agent_host', agent_host, 'port', agent_port
+ log.info('sync agent {h}:{p}'.format(h=agent_host, p=agent_port))
+ return requests.post('http://{addr}:{port}/metadata/incremental'.format(addr = agent_host, port = agent_port))
+
+def radosgw_agent_sync_all(ctx):
+ if ctx.radosgw_agent.procs:
+ for agent_client, c_config in ctx.radosgw_agent.config.iteritems():
+ dest_zone = zone_for_client(ctx, agent_client)
+ port = c_config.get('port', 8000)
+ dest_host, dest_port = get_zone_host_and_port(ctx, agent_client, dest_zone)
+ radosgw_agent_sync(ctx, dest_host, port)
+
+def radosgw_agent_sync_all(ctx):
+ if ctx.radosgw_agent.procs:
+ for agent_client, c_config in ctx.radosgw_agent.config.iteritems():
+ dest_zone = zone_for_client(ctx, agent_client)
+ port = c_config.get('port', 8000)
+ dest_host, dest_port = get_zone_host_and_port(ctx, agent_client, dest_zone)
+ radosgw_agent_sync(ctx, dest_host, port)
+
+
+