Skip to content

Commit e4c4c67

Browse files
committed
Evict cached UDT class when new type is registered.
1 parent 067b2c4 commit e4c4c67

2 files changed

Lines changed: 11 additions & 0 deletions

File tree

cassandra/cluster.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
UnsupportedOperation, Unauthorized)
4848
from cassandra.connection import (ConnectionException, ConnectionShutdown,
4949
ConnectionHeartbeat)
50+
from cassandra.cqltypes import UserType
5051
from cassandra.encoder import Encoder
5152
from cassandra.protocol import (QueryMessage, ResultMessage,
5253
ErrorMessage, ReadTimeoutErrorMessage,
@@ -615,6 +616,7 @@ def __init__(self, street, zipcode):
615616
self._user_types[keyspace][user_type] = klass
616617
for session in self.sessions:
617618
session.user_type_registered(keyspace, user_type, klass)
619+
UserType.evict_udt_class(keyspace, user_type)
618620

619621
def get_min_requests_per_connection(self, host_distance):
620622
return self._min_requests_per_connection[host_distance]

cassandra/cqltypes.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,15 @@ def make_udt_class(cls, keyspace, udt_name, names_and_types, mapped_class):
899899
cls._cache[(keyspace, udt_name)] = instance
900900
return instance
901901

902+
@classmethod
903+
def evict_udt_class(cls, keyspace, udt_name):
904+
if six.PY2 and isinstance(udt_name, unicode):
905+
udt_name = udt_name.encode('utf-8')
906+
try:
907+
del cls._cache[(keyspace, udt_name)]
908+
except KeyError:
909+
pass
910+
902911
@classmethod
903912
def apply_parameters(cls, subtypes, names):
904913
keyspace = subtypes[0]

0 commit comments

Comments
 (0)