X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/d1cadefda651ee1560759852496241a3b2c6e7ee..a432c9f32f3099ecfe0f6c05f148bcf33990e560:/snf-pithos-app/pithos/api/util.py diff --git a/snf-pithos-app/pithos/api/util.py b/snf-pithos-app/pithos/api/util.py index ebfc037..197156b 100644 --- a/snf-pithos-app/pithos/api/util.py +++ b/snf-pithos-app/pithos/api/util.py @@ -56,12 +56,12 @@ from pithos.api.faults import (Fault, NotModified, BadRequest, Unauthorized, For RangeNotSatisfiable, InternalServerError, NotImplemented) from pithos.api.short_url import encode_url from pithos.api.settings import (BACKEND_DB_MODULE, BACKEND_DB_CONNECTION, - BACKEND_BLOCK_MODULE, BACKEND_BLOCK_PATH, - BACKEND_BLOCK_UMASK, - BACKEND_QUEUE_MODULE, BACKEND_QUEUE_CONNECTION, - BACKEND_QUOTA, BACKEND_VERSIONING, - AUTHENTICATION_URL, AUTHENTICATION_USERS, - SERVICE_TOKEN, COOKIE_NAME) + BACKEND_BLOCK_MODULE, BACKEND_BLOCK_PATH, + BACKEND_BLOCK_UMASK, + BACKEND_QUEUE_MODULE, BACKEND_QUEUE_CONNECTION, + BACKEND_QUOTA, BACKEND_VERSIONING, + AUTHENTICATION_URL, AUTHENTICATION_USERS, + SERVICE_TOKEN, COOKIE_NAME) from pithos.backends import connect_backend from pithos.backends.base import NotAllowedError, QuotaError, ItemNotExists, VersionNotExists @@ -788,18 +788,29 @@ def simple_list_response(request, l): if request.serialization == 'json': return json.dumps(l) + +from pithos.backends.util import PithosBackendPool +POOL_SIZE = 5 + + +_pithos_backend_pool = PithosBackendPool(size=POOL_SIZE, + db_module=BACKEND_DB_MODULE, + db_connection=BACKEND_DB_CONNECTION, + block_module=BACKEND_BLOCK_MODULE, + block_path=BACKEND_BLOCK_PATH, + block_umask=BACKEND_BLOCK_UMASK, + queue_module=BACKEND_QUEUE_MODULE, + queue_connection=BACKEND_QUEUE_CONNECTION) + + def get_backend(): - backend = connect_backend(db_module=BACKEND_DB_MODULE, - db_connection=BACKEND_DB_CONNECTION, - block_module=BACKEND_BLOCK_MODULE, - block_path=BACKEND_BLOCK_PATH, - block_umask=BACKEND_BLOCK_UMASK, - queue_module=BACKEND_QUEUE_MODULE, - queue_connection=BACKEND_QUEUE_CONNECTION) + backend = _pithos_backend_pool.pool_get() backend.default_policy['quota'] = BACKEND_QUOTA backend.default_policy['versioning'] = BACKEND_VERSIONING + backend.messages = [] return backend + def update_request_headers(request): # Handle URL-encoded keys and values. meta = dict([(k, v) for k, v in request.META.iteritems() if k.startswith('HTTP_')]) @@ -870,6 +881,7 @@ def request_serialization(request, format_allowed=False): return 'text' + def api_method(http_method=None, format_allowed=False, user_required=True): """Decorator function for views that implement an API method.""" @@ -907,6 +919,8 @@ def api_method(http_method=None, format_allowed=False, user_required=True): update_response_headers(request, response) return response except Fault, fault: + if fault.code >= 500: + logger.exception("API Fault") return render_fault(request, fault) except BaseException, e: logger.exception('Unexpected error: %s' % e)