From 1aba51ec6e432f121e8c70be4740a54fe3ee4d1f Mon Sep 17 00:00:00 2001 From: Alexei Kornienko Date: Fri, 26 Jul 2013 15:18:56 +0300 Subject: [PATCH] Refactored MongoDB connection pool to use weakrefs This allows connections to be closed when they are not used anymore Change-Id: I54b0260f92376dd66dfda1ddb9405d6e0971f9d9 --- ceilometer/storage/impl_mongodb.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index e323dbd0a..d973879b3 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -26,6 +26,7 @@ import datetime import operator import os import uuid +import weakref import bson.code import bson.objectid @@ -145,14 +146,17 @@ class ConnectionPool(object): self._pool = {} def connect(self, url): - if url not in self._pool: - LOG.info('connecting to MongoDB on %s', url) - self._pool[url] = pymongo.MongoClient( - url, - use_greenlets=True, - safe=True) - - return self._pool.get(url) + if url in self._pool: + client = self._pool.get(url)() + if client: + return client + LOG.info('connecting to MongoDB on %s', url) + client = pymongo.MongoClient( + url, + use_greenlets=True, + safe=True) + self._pool[url] = weakref.ref(client) + return client class Connection(base.Connection):