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_HOSTS,
+ BACKEND_QUEUE_EXCHANGE,
+ PITHOS_QUOTAHOLDER_URL,
+ 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
from synnefo.lib.pool import ObjectPool
from new import instancemethod
+from select import select
+from traceback import print_exc
USAGE_LIMIT = 500
POOL_SIZE = 5
return backend
def _pool_verify(self, backend):
- return 1
+ wrapper = backend.wrapper
+ conn = wrapper.conn
+ if conn.closed:
+ return False
+
+ if conn.in_transaction():
+ conn.close()
+ return False
+
+ try:
+ fd = conn.connection.connection.fileno()
+ r, w, x = select([fd], (), (), 0)
+ if r:
+ conn.close()
+ return False
+ except:
+ print_exc()
+ return False
+
+ return True
def _pool_cleanup(self, backend):
c = backend._use_count - 1
return True
backend._use_count = c
- if backend.wrapper.trans is not None:
- backend.wrapper.rollback()
+ wrapper = backend.wrapper
+ if wrapper.trans is not None:
+ conn = wrapper.conn
+ if conn.closed:
+ wrapper.trans = None
+ else:
+ wrapper.rollback()
if backend.messages:
backend.messages = []
return False