oslo.cache/oslo_cache/backends/memcache_pool.py
Davanum Srinivas 864dfacced Move files into the right spot and get tests working
* Move files from keystone folder into appropriate folders
* Move tests from keystone into appropriate folders
* Fix imports to use the new module locations
* Add a _i18n.py to help with localication
* Add a BaseTestcase class
* Add a exceptions module

All just enough to run the tests. Though some tests were commented
with a FIXME to be fixed in later commits.

A few additional tests were not working with py34 and they are
skipped using testtools.skipIf statements.

Change-Id: Ib494d2a960cab5959c2adaca1eb0739fe65d14f1
2015-06-18 22:14:59 -04:00

62 lines
2.1 KiB
Python

# Copyright 2014 Mirantis Inc
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""dogpile.cache backend that uses Memcached connection pool"""
import functools
import logging
from dogpile.cache.backends import memcached as memcached_backend
from oslo_cache import _memcache_pool
LOG = logging.getLogger(__name__)
# Helper to ease backend refactoring
class ClientProxy(object):
def __init__(self, client_pool):
self.client_pool = client_pool
def _run_method(self, __name, *args, **kwargs):
with self.client_pool.acquire() as client:
return getattr(client, __name)(*args, **kwargs)
def __getattr__(self, name):
return functools.partial(self._run_method, name)
class PooledMemcachedBackend(memcached_backend.MemcachedBackend):
# Composed from GenericMemcachedBackend's and MemcacheArgs's __init__
def __init__(self, arguments):
super(PooledMemcachedBackend, self).__init__(arguments)
self.client_pool = _memcache_pool.MemcacheClientPool(
self.url,
arguments={
'dead_retry': arguments.get('dead_retry', 5 * 60),
'socket_timeout': arguments.get('socket_timeout', 3),
},
maxsize=arguments.get('pool_maxsize', 10),
unused_timeout=arguments.get('pool_unused_timeout', 60),
conn_get_timeout=arguments.get('pool_connection_get_timeout', 10),
)
# Since all methods in backend just call one of methods of client, this
# lets us avoid need to hack it too much
@property
def client(self):
return ClientProxy(self.client_pool)