Dispersion report
This patchset adds a template for the 'dispersion.conf' file which is used for swift cluster health monitoring. Change-Id: I348ded9f94f2bcb7a680b2c2280ff163cde65c46 Closes-Bug: 1328064
This commit is contained in:
parent
3809df73fb
commit
f9a02a3f58
@ -83,3 +83,7 @@ set-weight:
|
|||||||
- ring
|
- ring
|
||||||
- search-value
|
- search-value
|
||||||
- weight
|
- weight
|
||||||
|
dispersion-populate:
|
||||||
|
description: Run swift-dispersion-populate command on the specified unit.
|
||||||
|
dispersion-report:
|
||||||
|
description: Run swift-dispersion-report command on the specified unit.
|
||||||
|
@ -174,10 +174,42 @@ def set_weight(args):
|
|||||||
balance_rings()
|
balance_rings()
|
||||||
|
|
||||||
|
|
||||||
|
def dispersion_populate(args):
|
||||||
|
"""Runs swift-dispersion-populate command and returns the output
|
||||||
|
@raises CalledProcessError
|
||||||
|
"""
|
||||||
|
cmd = 'swift-dispersion-populate'
|
||||||
|
try:
|
||||||
|
output = check_output(cmd)
|
||||||
|
action_set({'output': output})
|
||||||
|
except CalledProcessError as e:
|
||||||
|
action_set({'output': e.output})
|
||||||
|
action_fail("Failed to run {}".format(cmd))
|
||||||
|
|
||||||
|
|
||||||
|
def dispersion_report(args):
|
||||||
|
"""Runs swift-dispersion-report command and returns the output
|
||||||
|
@raises CalledProcessError
|
||||||
|
"""
|
||||||
|
cmd = 'swift-dispersion-report'
|
||||||
|
try:
|
||||||
|
output = check_output(cmd)
|
||||||
|
action_set({'output': output})
|
||||||
|
except CalledProcessError as e:
|
||||||
|
action_set({'output': e.output})
|
||||||
|
action_fail("Failed to run {}".format(cmd))
|
||||||
|
|
||||||
|
|
||||||
# A dictionary of all the defined actions to callables (which take
|
# A dictionary of all the defined actions to callables (which take
|
||||||
# parsed arguments).
|
# parsed arguments).
|
||||||
ACTIONS = {"pause": pause, "resume": resume, 'diskusage': diskusage,
|
ACTIONS = {
|
||||||
'remove-devices': remove_devices, 'set-weight': set_weight}
|
"pause": pause,
|
||||||
|
"resume": resume,
|
||||||
|
'diskusage': diskusage,
|
||||||
|
'remove-devices': remove_devices,
|
||||||
|
'set-weight': set_weight,
|
||||||
|
"dispersion-populate": dispersion_populate,
|
||||||
|
"dispersion-report": dispersion_report}
|
||||||
|
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
1
actions/dispersion-populate
Symbolic link
1
actions/dispersion-populate
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
actions.py
|
1
actions/dispersion-report
Symbolic link
1
actions/dispersion-report
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
actions.py
|
@ -82,6 +82,7 @@ from charmhelpers.core.decorators import (
|
|||||||
SWIFT_CONF_DIR = '/etc/swift'
|
SWIFT_CONF_DIR = '/etc/swift'
|
||||||
SWIFT_RING_EXT = 'ring.gz'
|
SWIFT_RING_EXT = 'ring.gz'
|
||||||
SWIFT_CONF = os.path.join(SWIFT_CONF_DIR, 'swift.conf')
|
SWIFT_CONF = os.path.join(SWIFT_CONF_DIR, 'swift.conf')
|
||||||
|
SWIFT_DISPERSION_CONF = os.path.join(SWIFT_CONF_DIR, 'dispersion.conf')
|
||||||
SWIFT_PROXY_CONF = os.path.join(SWIFT_CONF_DIR, 'proxy-server.conf')
|
SWIFT_PROXY_CONF = os.path.join(SWIFT_CONF_DIR, 'proxy-server.conf')
|
||||||
MEMCACHED_CONF = '/etc/memcached.conf'
|
MEMCACHED_CONF = '/etc/memcached.conf'
|
||||||
SWIFT_RINGS_CONF = '/etc/apache2/conf.d/swift-rings'
|
SWIFT_RINGS_CONF = '/etc/apache2/conf.d/swift-rings'
|
||||||
@ -124,6 +125,7 @@ BASE_PACKAGES = [
|
|||||||
'memcached',
|
'memcached',
|
||||||
'apache2',
|
'apache2',
|
||||||
'python-keystone',
|
'python-keystone',
|
||||||
|
'python-swiftclient',
|
||||||
]
|
]
|
||||||
# > Folsom specific packages
|
# > Folsom specific packages
|
||||||
FOLSOM_PACKAGES = ['swift-plugin-s3', 'swauth']
|
FOLSOM_PACKAGES = ['swift-plugin-s3', 'swauth']
|
||||||
@ -143,6 +145,10 @@ CONFIG_FILES = OrderedDict([
|
|||||||
'hook_contexts': [SwiftHashContext()],
|
'hook_contexts': [SwiftHashContext()],
|
||||||
'services': ['swift-proxy'],
|
'services': ['swift-proxy'],
|
||||||
}),
|
}),
|
||||||
|
(SWIFT_DISPERSION_CONF, {
|
||||||
|
'hook_contexts': [SwiftIdentityContext()],
|
||||||
|
'services': [],
|
||||||
|
}),
|
||||||
(SWIFT_PROXY_CONF, {
|
(SWIFT_PROXY_CONF, {
|
||||||
'hook_contexts': [SwiftIdentityContext(),
|
'hook_contexts': [SwiftIdentityContext(),
|
||||||
SwiftS3Context(),
|
SwiftS3Context(),
|
||||||
@ -397,6 +403,7 @@ def register_configs():
|
|||||||
openstack_release=release)
|
openstack_release=release)
|
||||||
|
|
||||||
confs = [SWIFT_CONF,
|
confs = [SWIFT_CONF,
|
||||||
|
SWIFT_DISPERSION_CONF,
|
||||||
SWIFT_PROXY_CONF,
|
SWIFT_PROXY_CONF,
|
||||||
HAPROXY_CONF,
|
HAPROXY_CONF,
|
||||||
MEMCACHED_CONF]
|
MEMCACHED_CONF]
|
||||||
|
6
templates/icehouse/dispersion.conf
Normal file
6
templates/icehouse/dispersion.conf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[dispersion]
|
||||||
|
auth_url = {{ auth_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
||||||
|
auth_user = {{ service_tenant }}:{{ service_user }}
|
||||||
|
auth_key = {{ service_password }}
|
||||||
|
endpoint_type = internalURL
|
||||||
|
auth_version = 2
|
9
templates/queens/dispersion.conf
Normal file
9
templates/queens/dispersion.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[dispersion]
|
||||||
|
auth_url = {{ auth_protocol }}://{{ keystone_host }}:{{ auth_port }}
|
||||||
|
auth_user = {{ service_user }}
|
||||||
|
auth_key = {{ service_password }}
|
||||||
|
endpoint_type = internalURL
|
||||||
|
auth_version = 3
|
||||||
|
project_domain_name = {{ admin_domain_name }}
|
||||||
|
user_domain_name = {{ admin_domain_name }}
|
||||||
|
project_name = {{ admin_tenant_name }}
|
@ -672,3 +672,21 @@ class SwiftProxyBasicDeployment(OpenStackAmuletDeployment):
|
|||||||
assert u.wait_on_action(action_id), "diskusage action failed."
|
assert u.wait_on_action(action_id), "diskusage action failed."
|
||||||
|
|
||||||
u.log.info('OK')
|
u.log.info('OK')
|
||||||
|
|
||||||
|
def test_904_dispersion_populate_action(self):
|
||||||
|
"""dispersion-populate action can be run"""
|
||||||
|
u.log.info("Testing dispersion-populate action")
|
||||||
|
action_id = u.run_action(self.swift_proxy_sentry,
|
||||||
|
"dispersion-populate")
|
||||||
|
assert u.wait_on_action(action_id), \
|
||||||
|
"dispersion-populate action failed."
|
||||||
|
|
||||||
|
u.log.info('OK')
|
||||||
|
|
||||||
|
def test_905_dispersion_report_action(self):
|
||||||
|
"""dispersion-report action can be run"""
|
||||||
|
u.log.info("Testing dispersion-report action")
|
||||||
|
action_id = u.run_action(self.swift_proxy_sentry, "dispersion-report")
|
||||||
|
assert u.wait_on_action(action_id), "dispersion-report action failed."
|
||||||
|
|
||||||
|
u.log.info('OK')
|
||||||
|
@ -359,3 +359,62 @@ class SetWeightTestCase(CharmTestCase):
|
|||||||
self.action_fail.assert_called()
|
self.action_fail.assert_called()
|
||||||
self.set_weight_in_ring.assert_not_called()
|
self.set_weight_in_ring.assert_not_called()
|
||||||
self.balance_rings.assert_not_called()
|
self.balance_rings.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
class DispersionPopulateTestCase(CharmTestCase):
|
||||||
|
|
||||||
|
TEST_OUTPUT = (
|
||||||
|
b'Using storage policy: Policy-0 \n'
|
||||||
|
b'[KCreated 2 containers for dispersion reporting, 1s, 0 retries\n'
|
||||||
|
b'[KCreated 2 objects for dispersion reporting, 1s, 0 retries\n')
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(DispersionPopulateTestCase, self).setUp(
|
||||||
|
actions.actions, ['check_output', 'action_set', 'action_fail'])
|
||||||
|
|
||||||
|
def test_success(self):
|
||||||
|
self.check_output.return_value = self.TEST_OUTPUT
|
||||||
|
actions.actions.dispersion_populate([])
|
||||||
|
self.check_output.assert_called_once_with('swift-dispersion-populate')
|
||||||
|
self.action_set.assert_called_once_with({'output': self.TEST_OUTPUT})
|
||||||
|
|
||||||
|
def test_failure(self):
|
||||||
|
self.check_output.side_effect = actions.actions.CalledProcessError(
|
||||||
|
1, 'swift-dispersion-populate', output='Failure')
|
||||||
|
actions.actions.dispersion_populate([])
|
||||||
|
self.check_output.assert_called_once_with('swift-dispersion-populate')
|
||||||
|
self.action_set.assert_called_once_with({'output': 'Failure'})
|
||||||
|
self.action_fail.assert_called_once_with(
|
||||||
|
"Failed to run swift-dispersion-populate")
|
||||||
|
|
||||||
|
|
||||||
|
class DispersionReportTestCase(CharmTestCase):
|
||||||
|
|
||||||
|
TEST_OUTPUT = (
|
||||||
|
b'Using storage policy: Policy-0 \n'
|
||||||
|
b'[KQueried 2 containers for dispersion reporting, 0s, 0 retries\n'
|
||||||
|
b'100.00% of container copies found (2 of2)\n'
|
||||||
|
b'Sample represents 0.78% of the container partition space\n'
|
||||||
|
b'[KQueried 2 objects for dispersion reporting, 0s, 0 retries\n'
|
||||||
|
b'! There were 2 partitions missing 0 copies.\n'
|
||||||
|
b'100.00% of object copies found (2 of 2)\n'
|
||||||
|
b'Sample represents 0.78% of the object partition space')
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(DispersionReportTestCase, self).setUp(
|
||||||
|
actions.actions, ['check_output', 'action_set', 'action_fail'])
|
||||||
|
|
||||||
|
def test_success(self):
|
||||||
|
self.check_output.return_value = self.TEST_OUTPUT
|
||||||
|
actions.actions.dispersion_report([])
|
||||||
|
self.check_output.assert_called_once_with('swift-dispersion-report')
|
||||||
|
self.action_set.assert_called_once_with({'output': self.TEST_OUTPUT})
|
||||||
|
|
||||||
|
def test_failure(self):
|
||||||
|
self.check_output.side_effect = actions.actions.CalledProcessError(
|
||||||
|
1, 'swift-dispersion-report', output='Failure')
|
||||||
|
actions.actions.dispersion_report([])
|
||||||
|
self.check_output.assert_called_once_with('swift-dispersion-report')
|
||||||
|
self.action_set.assert_called_once_with({'output': 'Failure'})
|
||||||
|
self.action_fail.assert_called_once_with(
|
||||||
|
"Failed to run swift-dispersion-report")
|
||||||
|
@ -576,7 +576,8 @@ class SwiftUtilsTestCase(unittest.TestCase):
|
|||||||
'swift-proxy',
|
'swift-proxy',
|
||||||
'memcached',
|
'memcached',
|
||||||
'apache2',
|
'apache2',
|
||||||
'python-keystone'],
|
'python-keystone',
|
||||||
|
'python-swiftclient'],
|
||||||
swift_utils.determine_packages('essex')
|
swift_utils.determine_packages('essex')
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -586,6 +587,7 @@ class SwiftUtilsTestCase(unittest.TestCase):
|
|||||||
'memcached',
|
'memcached',
|
||||||
'apache2',
|
'apache2',
|
||||||
'python-keystone',
|
'python-keystone',
|
||||||
|
'python-swiftclient',
|
||||||
'swift-plugin-s3',
|
'swift-plugin-s3',
|
||||||
'swauth'],
|
'swauth'],
|
||||||
swift_utils.determine_packages('folsom')
|
swift_utils.determine_packages('folsom')
|
||||||
@ -596,6 +598,7 @@ class SwiftUtilsTestCase(unittest.TestCase):
|
|||||||
'swift-proxy',
|
'swift-proxy',
|
||||||
'memcached',
|
'memcached',
|
||||||
'apache2',
|
'apache2',
|
||||||
|
'python-swiftclient',
|
||||||
'swift-plugin-s3',
|
'swift-plugin-s3',
|
||||||
'swauth',
|
'swauth',
|
||||||
'python-ceilometermiddleware',
|
'python-ceilometermiddleware',
|
||||||
@ -608,6 +611,7 @@ class SwiftUtilsTestCase(unittest.TestCase):
|
|||||||
'swift-proxy',
|
'swift-proxy',
|
||||||
'memcached',
|
'memcached',
|
||||||
'apache2',
|
'apache2',
|
||||||
|
'python-swiftclient',
|
||||||
'swauth',
|
'swauth',
|
||||||
'python-ceilometermiddleware',
|
'python-ceilometermiddleware',
|
||||||
'python-keystonemiddleware'],
|
'python-keystonemiddleware'],
|
||||||
|
Loading…
Reference in New Issue
Block a user