Evict cached UDT class when new type is registered.

This commit is contained in:
Adam Holmberg
2015-03-23 10:52:40 -05:00
parent 067b2c4241
commit e4c4c675f6
2 changed files with 11 additions and 0 deletions

View File

@@ -47,6 +47,7 @@ from cassandra import (ConsistencyLevel, AuthenticationFailed,
UnsupportedOperation, Unauthorized)
from cassandra.connection import (ConnectionException, ConnectionShutdown,
ConnectionHeartbeat)
from cassandra.cqltypes import UserType
from cassandra.encoder import Encoder
from cassandra.protocol import (QueryMessage, ResultMessage,
ErrorMessage, ReadTimeoutErrorMessage,
@@ -615,6 +616,7 @@ class Cluster(object):
self._user_types[keyspace][user_type] = klass
for session in self.sessions:
session.user_type_registered(keyspace, user_type, klass)
UserType.evict_udt_class(keyspace, user_type)
def get_min_requests_per_connection(self, host_distance):
return self._min_requests_per_connection[host_distance]

View File

@@ -899,6 +899,15 @@ class UserType(TupleType):
cls._cache[(keyspace, udt_name)] = instance
return instance
@classmethod
def evict_udt_class(cls, keyspace, udt_name):
if six.PY2 and isinstance(udt_name, unicode):
udt_name = udt_name.encode('utf-8')
try:
del cls._cache[(keyspace, udt_name)]
except KeyError:
pass
@classmethod
def apply_parameters(cls, subtypes, names):
keyspace = subtypes[0]