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) UnsupportedOperation, Unauthorized)
from cassandra.connection import (ConnectionException, ConnectionShutdown, from cassandra.connection import (ConnectionException, ConnectionShutdown,
ConnectionHeartbeat) ConnectionHeartbeat)
from cassandra.cqltypes import UserType
from cassandra.encoder import Encoder from cassandra.encoder import Encoder
from cassandra.protocol import (QueryMessage, ResultMessage, from cassandra.protocol import (QueryMessage, ResultMessage,
ErrorMessage, ReadTimeoutErrorMessage, ErrorMessage, ReadTimeoutErrorMessage,
@@ -615,6 +616,7 @@ class Cluster(object):
self._user_types[keyspace][user_type] = klass self._user_types[keyspace][user_type] = klass
for session in self.sessions: for session in self.sessions:
session.user_type_registered(keyspace, user_type, klass) session.user_type_registered(keyspace, user_type, klass)
UserType.evict_udt_class(keyspace, user_type)
def get_min_requests_per_connection(self, host_distance): def get_min_requests_per_connection(self, host_distance):
return self._min_requests_per_connection[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 cls._cache[(keyspace, udt_name)] = instance
return 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 @classmethod
def apply_parameters(cls, subtypes, names): def apply_parameters(cls, subtypes, names):
keyspace = subtypes[0] keyspace = subtypes[0]