|
@@ -41,6 +41,7 @@ class test_CassandraBackend(AppCase):
|
|
|
with mock_module(*CASSANDRA_MODULES):
|
|
|
from celery.backends import cassandra as mod
|
|
|
mod.cassandra = Mock()
|
|
|
+
|
|
|
cons = mod.cassandra.ConsistencyLevel = Object()
|
|
|
cons.LOCAL_QUORUM = 'foo'
|
|
|
|
|
@@ -68,6 +69,7 @@ class test_CassandraBackend(AppCase):
|
|
|
with mock_module(*CASSANDRA_MODULES):
|
|
|
from celery.backends import cassandra as mod
|
|
|
mod.cassandra = Mock()
|
|
|
+
|
|
|
x = mod.CassandraBackend(app=self.app)
|
|
|
x._connection = True
|
|
|
session = x._session = Mock()
|
|
@@ -120,6 +122,9 @@ class test_CassandraBackend(AppCase):
|
|
|
def connect(self, *args, **kwargs):
|
|
|
raise OTOExc()
|
|
|
|
|
|
+ def shutdown(self):
|
|
|
+ pass
|
|
|
+
|
|
|
mod.cassandra = Mock()
|
|
|
mod.cassandra.OperationTimedOut = OTOExc
|
|
|
mod.cassandra.cluster = Mock()
|
|
@@ -133,3 +138,37 @@ class test_CassandraBackend(AppCase):
|
|
|
self.assertIsNone(x._session)
|
|
|
|
|
|
x.process_cleanup() # should not raise
|
|
|
+
|
|
|
+
|
|
|
+ def test_please_free_memory(self):
|
|
|
+ """
|
|
|
+ Ensure that Cluster object IS shut down.
|
|
|
+ """
|
|
|
+ with mock_module(*CASSANDRA_MODULES):
|
|
|
+ from celery.backends import cassandra as mod
|
|
|
+
|
|
|
+ class RAMHoggingCluster(object):
|
|
|
+
|
|
|
+ objects_alive = 0
|
|
|
+
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def connect(self, *args, **kwargs):
|
|
|
+ RAMHoggingCluster.objects_alive += 1
|
|
|
+ return Mock()
|
|
|
+
|
|
|
+ def shutdown(self):
|
|
|
+ RAMHoggingCluster.objects_alive -= 1
|
|
|
+
|
|
|
+ mod.cassandra = Mock()
|
|
|
+
|
|
|
+ mod.cassandra.cluster = Mock()
|
|
|
+ mod.cassandra.cluster.Cluster = RAMHoggingCluster
|
|
|
+
|
|
|
+ for x in range(0, 10):
|
|
|
+ x = mod.CassandraBackend(app=self.app)
|
|
|
+ x._store_result('task_id', 'result', states.SUCCESS)
|
|
|
+ x.process_cleanup()
|
|
|
+
|
|
|
+ self.assertEquals(RAMHoggingCluster.objects_alive, 0)
|