Move PithosBackendPool to snf-pithos-backend
[pithos] / snf-pithos-app / pithos / api / util.py
index 710ee30..be785f9 100644 (file)
@@ -789,86 +789,25 @@ def simple_list_response(request, l):
         return json.dumps(l)
 
 
-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.default_policy['quota'] = BACKEND_QUOTA
-    backend.default_policy['versioning'] = BACKEND_VERSIONING
-    return backend
-
-
-def _pooled_backend_close(backend):
-    backend._pool.pool_put(backend)
-
-
-from synnefo.lib.pool import ObjectPool
-from new import instancemethod
-from select import select
-from traceback import print_exc
-
-USAGE_LIMIT = 500
+from pithos.backends.util import PithosBackendPool
 POOL_SIZE = 5
 
-class PithosBackendPool(ObjectPool):
-    def _pool_create(self):
-        backend = _get_backend()
-        backend._real_close = backend.close
-        backend.close = instancemethod(_pooled_backend_close, backend,
-                                       type(backend))
-        backend._pool = self
-        backend._use_count = USAGE_LIMIT
-        return backend
-
-    def _pool_verify(self, backend):
-        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
-        if c < 0:
-            backend._real_close()
-            return True
-
-        backend._use_count = c
-        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
-
-_pithos_backend_pool = PithosBackendPool(size=POOL_SIZE)
+_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():
-    return _pithos_backend_pool.pool_get()
+    backend = _pithos_backend_pool.pool_get()
+    backend.default_policy['quota'] = BACKEND_QUOTA
+    backend.default_policy['versioning'] = BACKEND_VERSIONING
+    return backend
 
 
 def update_request_headers(request):