Skip to content

Commit c75b706

Browse files
committed
polishing
1 parent 0c40c36 commit c75b706

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

splitio/push/splitworker.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,20 @@ def __init__(self, synchronize_feature_flag, feature_flag_queue, feature_flag_st
3838
self._running = False
3939
self._worker = None
4040
self._feature_flag_storage = feature_flag_storage
41+
self._compression_handlers = {
42+
CompressionMode.NO_COMPRESSION: lambda event: base64.b64decode(event.feature_flag_definition),
43+
CompressionMode.GZIP_COMPRESSION: lambda event: gzip.decompress(base64.b64decode(event.feature_flag_definition)).decode('utf-8'),
44+
CompressionMode.ZLIB_COMPRESSION: lambda event: zlib.decompress(base64.b64decode(event.feature_flag_definition)).decode('utf-8'),
45+
}
4146

4247
def is_running(self):
4348
"""Return whether the working is running."""
4449
return self._running
4550

4651
def _get_feature_flag_definition(self, event):
4752
"""return feature flag definition in event."""
48-
if event.compression == CompressionMode.NO_COMPRESSION.value:
49-
return base64.b64decode(event.feature_flag_definition)
50-
elif event.compression == CompressionMode.GZIP_COMPRESSION.value:
51-
return gzip.decompress(base64.b64decode(event.feature_flag_definition)).decode('utf-8')
52-
elif event.compression == CompressionMode.ZLIB_COMPRESSION.value:
53-
return zlib.decompress(base64.b64decode(event.feature_flag_definition)).decode('utf-8')
53+
cm = CompressionMode(event.compression) # will throw if the number is not defined in compression mode
54+
return self._compression_handlers[cm](event)
5455

5556
def _run(self):
5657
"""Run worker handler."""
@@ -63,10 +64,14 @@ def _run(self):
6364
_LOGGER.debug('Processing feature flag update %d', event.change_number)
6465
try:
6566
if event.compression is not None and event.previous_change_number == self._feature_flag_storage.get_change_number():
66-
feature_flag_definition = self._get_feature_flag_definition(event)
67-
self._feature_flag_storage.put(from_raw(json.loads(self._get_feature_flag_definition(event))))
68-
self._feature_flag_storage.set_change_number(event.change_number)
69-
continue
67+
try:
68+
self._feature_flag_storage.put(from_raw(json.loads(self._get_feature_flag_definition(event))))
69+
self._feature_flag_storage.set_change_number(event.change_number)
70+
continue
71+
except Exception as e:
72+
_LOGGER.error('Exception raised in updating feature flag')
73+
_LOGGER.error(str(e))
74+
pass
7075
self._handler(event.change_number)
7176
except Exception as e: # pylint: disable=broad-except
7277
_LOGGER.error('Exception raised in feature flag synchronization')

tests/push/test_split_worker.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,32 @@ def test_handler(self, mocker):
5656
def get_change_number():
5757
return 2345
5858

59+
self._feature_flag = None
60+
def put(feature_flag):
61+
self._feature_flag = feature_flag
62+
63+
self.new_change_number = 0
64+
def set_change_number(new_change_number):
65+
self.new_change_number = new_change_number
66+
5967
split_worker._feature_flag_storage.get_change_number = get_change_number
68+
split_worker._feature_flag_storage.set_change_number = set_change_number
69+
split_worker._feature_flag_storage.put = put
70+
6071
# should call the handler
6172
q.put(SplitChangeUpdate('some', 'SPLIT_UPDATE', 123456790, 12345, "{}", 1))
6273
time.sleep(0.1)
6374
assert change_number_received == 123456790
6475

76+
# should call the handler
77+
change_number_received = 0
78+
q.put(SplitChangeUpdate('some', 'SPLIT_UPDATE', 123456790, 12345, "{}", 3))
79+
time.sleep(0.1)
80+
assert change_number_received == 123456790
81+
6582
# should Not call the handler
6683
change_number_received = 0
67-
q.put(SplitChangeUpdate('some', 'SPLIT_UPDATE', 123456, 2345, "{}", 1))
84+
q.put(SplitChangeUpdate('some', 'SPLIT_UPDATE', 123456, 2345, "eJzEUtFq20AQ/JUwz2c4WZZr3ZupTQh1FKjcQinGrKU95cjpZE6nh9To34ssJ3FNX0sfd3Zm53b2TgietDbF9vXIGdUMha5lDwFTQiGOmTQlchLRPJlEEZeTVJZ6oimWZTpP5WyWQMCNyoOxZPft0ZoA8TZ5aW1TUDCNg4qk/AueM5dQkyiez6IonS6mAu0IzWWSxovFLBZoA4WuhcLy8/bh+xoCL8bagaXJtixQsqbOhq1nCjW7AIVGawgUz+Qqzrr6wB4qmi9m00/JIk7TZCpAtmqgpgJF47SpOn9+UQt16s9YaS71z9NHOYQFha9Pm83Tty0EagrFM/t733RHqIFZH4wb7LDMVh+Ecc4Lv+ZsuQiNH8hXF3hLv39XXNCHbJ+v7x/X2eDmuKLA74sPihVr47jMuRpWfxy1Kwo0GLQjmv1xpBFD3+96gSP5cLVouM7QQaA1vxhK9uKmd853bEZS9jsBSwe2UDDu7mJxd2Mo/muQy81m/2X9I7+N8R/FcPmUd76zjH7X/w4AAP//90glTw==", 2))
6885
time.sleep(0.1)
6986
assert change_number_received == 0
7087

0 commit comments

Comments
 (0)