Merge "Write a symptom for checking memcache connections"

This commit is contained in:
Zuul 2020-08-28 03:34:51 +00:00 committed by Gerrit Code Review
commit 0b9d98b37b
3 changed files with 88 additions and 0 deletions

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from keystone.common import cache
import keystone.conf
@ -33,3 +34,27 @@ def symptom_caching_enabled_without_a_backend():
point to a real caching backend like memcached.
"""
return CONF.cache.enabled and CONF.cache.backend == 'dogpile.cache.null'
def symptom_connection_to_memcached():
"""Memcached isn't reachable.
Caching is enabled and the `keystone.conf [cache] backend` option is
configured but one or more Memcached servers are not reachable or marked
as dead. Please ensure `keystone.conf [cache] memcache_servers` is
configured properly.
"""
memcached_drivers = [
'dogpile.cache.memcached',
'oslo_cache.memcache_pool'
]
if CONF.cache.enabled and CONF.cache.backend in memcached_drivers:
cache.configure_cache()
cache_stats = cache.CACHE_REGION.actual_backend.client.get_stats()
memcached_server_count = len(CONF.cache.memcache_servers)
if len(cache_stats) != memcached_server_count:
return True
else:
return False
else:
return False

View File

@ -956,6 +956,63 @@ class CachingDoctorTests(unit.TestCase):
backend='dogpile.cache.memory')
self.assertFalse(caching.symptom_caching_enabled_without_a_backend())
@mock.patch('keystone.cmd.doctor.caching.cache.CACHE_REGION')
def test_symptom_connection_to_memcached(self, cache_mock):
self.config_fixture.config(group='cache', enabled=True)
self.config_fixture.config(
group='cache',
memcache_servers=['alpha.com:11211', 'beta.com:11211']
)
self.config_fixture.config(
group='cache', backend='dogpile.cache.memcached'
)
# No symptom detected: Caching driver can connect to both memcached
# servers
cache_mock.actual_backend.client.get_stats.return_value = (
[('alpha.com', {}), ('beta.com', {})]
)
self.assertFalse(caching.symptom_connection_to_memcached())
# Symptom detected: Caching driver can't connect to either memcached
# server
cache_mock.actual_backend.client.get_stats.return_value = []
self.assertTrue(caching.symptom_connection_to_memcached())
# Symptom detected: Caching driver can't connect to one memcached
# server
cache_mock.actual_backend.client.get_stats.return_value = [
('alpha.com', {})
]
self.assertTrue(caching.symptom_connection_to_memcached())
self.config_fixture.config(
group='cache',
memcache_servers=['alpha.com:11211', 'beta.com:11211']
)
self.config_fixture.config(
group='cache', backend='oslo_cache.memcache_pool'
)
# No symptom detected: Caching driver can connect to both memcached
# servers
cache_mock.actual_backend.client.get_stats.return_value = (
[('alpha.com', {}), ('beta.com', {})]
)
self.assertFalse(caching.symptom_connection_to_memcached())
# Symptom detected: Caching driver can't connect to either memcached
# server
cache_mock.actual_backend.client.get_stats.return_value = []
self.assertTrue(caching.symptom_connection_to_memcached())
# Symptom detected: Caching driver can't connect to one memcached
# server
cache_mock.actual_backend.client.get_stats.return_value = [
('alpha.com', {})
]
self.assertTrue(caching.symptom_connection_to_memcached())
class CredentialDoctorTests(unit.TestCase):

View File

@ -0,0 +1,6 @@
---
features:
- |
[`bug 1332058 <https://bugs.launchpad.net/keystone/+bug/1332058>`_]
``keystone-manage doctor`` now checks that keystone can establish
connections to Memcached, if configured.