Skip to content

Commit 73c2e30

Browse files
authored
Merge pull request #520 from splitio/development
Release 9.6.2
2 parents 8326138 + 14064fc commit 73c2e30

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
9.6.2 (Apr 5, 2024)
2+
- Fixed an issue when pushing unique keys tracker data to redis if no keys exist, i.e. get_treatment flavors are not called.
3+
14
9.6.1 (Feb 15, 2024)
25
- Added redisUsername configuration parameter for Redis connection to set the username for accessing redis when not using the default `root` username
36

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
TESTS_REQUIRES = [
88
'flake8',
99
'pytest==7.0.1',
10-
'pytest-mock>=3.5.1',
10+
'pytest-mock==3.12.0',
1111
'coverage==6.2',
1212
'pytest-cov',
1313
'importlib-metadata==4.2',

splitio/engine/impressions/adapters.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ def record_unique_keys(self, uniques):
4040
:param uniques: unique keys disctionary
4141
:type uniques: Dictionary {'feature_flag1': set(), 'feature_flag2': set(), .. }
4242
"""
43+
if len(uniques) == 0:
44+
return
45+
4346
self._telemtry_http_client.record_unique_keys({'keys': self._uniques_formatter(uniques)})
4447

4548
def _uniques_formatter(self, uniques):
@@ -73,6 +76,9 @@ def record_unique_keys(self, uniques):
7376
:param uniques: unique keys disctionary
7477
:type uniques: Dictionary {'feature_flag1': set(), 'feature_flag2': set(), .. }
7578
"""
79+
if len(uniques) == 0:
80+
return
81+
7682
bulk_mtks = _uniques_formatter(uniques)
7783
try:
7884
inserted = self._redis_client.rpush(_MTK_QUEUE_KEY, *bulk_mtks)
@@ -90,6 +96,9 @@ def flush_counters(self, to_send):
9096
:param to_send: unique keys disctionary
9197
:type to_send: Dictionary {'feature_flag1': set(), 'feature_flag2': set(), .. }
9298
"""
99+
if len(to_send) == 0:
100+
return
101+
93102
try:
94103
resulted = 0
95104
counted = 0
@@ -140,6 +149,9 @@ def record_unique_keys(self, uniques):
140149
:param uniques: unique keys disctionary
141150
:type uniques: Dictionary {'feature_flag1': set(), 'feature_flag2': set(), .. }
142151
"""
152+
if len(uniques) == 0:
153+
return
154+
143155
bulk_mtks = _uniques_formatter(uniques)
144156
try:
145157
_LOGGER.debug("record_unique_keys")
@@ -159,6 +171,8 @@ def flush_counters(self, to_send):
159171
:param to_send: unique keys disctionary
160172
:type to_send: Dictionary {'feature_flag1': set(), 'feature_flag2': set(), .. }
161173
"""
174+
if len(to_send) == 0:
175+
return
162176
try:
163177
resulted = 0
164178
for pf_count in to_send:

splitio/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '9.6.1'
1+
__version__ = '9.6.2'

tests/engine/test_send_adapters.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@ def test_record_unique_keys(self, mocker):
4040
telemetry_api = TelemetryAPI(mocker.Mock(), 'some_api_key', mocker.Mock(), mocker.Mock())
4141
sender_adapter = InMemorySenderAdapter(telemetry_api)
4242
sender_adapter.record_unique_keys(uniques)
43-
4443
assert(mocker.called)
4544

45+
mocker.reset_mock()
46+
sender_adapter.record_unique_keys({})
47+
assert(not mocker.called)
48+
4649
class RedisSenderAdapterTests(object):
4750
"""Redis sender adapter test."""
4851

@@ -70,9 +73,12 @@ def test_record_unique_keys(self, mocker):
7073
redis_client = RedisAdapter(mocker.Mock(), mocker.Mock())
7174
sender_adapter = RedisSenderAdapter(redis_client)
7275
sender_adapter.record_unique_keys(uniques)
73-
7476
assert(mocker.called)
7577

78+
mocker.reset_mock()
79+
sender_adapter.record_unique_keys({})
80+
assert(not mocker.called)
81+
7682
@mock.patch('splitio.storage.adapters.redis.RedisPipelineAdapter.hincrby')
7783
def test_flush_counters(self, mocker):
7884
"""Test sending counters."""
@@ -84,9 +90,12 @@ def test_flush_counters(self, mocker):
8490
redis_client = RedisAdapter(mocker.Mock(), mocker.Mock())
8591
sender_adapter = RedisSenderAdapter(redis_client)
8692
sender_adapter.flush_counters(counters)
87-
8893
assert(mocker.called)
8994

95+
mocker.reset_mock()
96+
sender_adapter.flush_counters({})
97+
assert(not mocker.called)
98+
9099
@mock.patch('splitio.storage.adapters.redis.RedisAdapter.expire')
91100
def test_expire_keys(self, mocker):
92101
"""Test set expire key."""
@@ -128,6 +137,10 @@ def test_record_unique_keys(self, mocker):
128137
sender_adapter.record_unique_keys(uniques)
129138
assert(adapter._expire[adapters._MTK_QUEUE_KEY] != -1)
130139

140+
adapter._keys[adapters._MTK_QUEUE_KEY] = {}
141+
sender_adapter.record_unique_keys({})
142+
assert(adapter._keys[adapters._MTK_QUEUE_KEY] == {})
143+
131144
def test_flush_counters(self, mocker):
132145
"""Test sending counters."""
133146
adapter = StorageMockAdapter()
@@ -144,3 +157,8 @@ def test_flush_counters(self, mocker):
144157
assert(adapter._expire[adapters._IMP_COUNT_QUEUE_KEY + "." + 'f1::123'] == adapters._IMP_COUNT_KEY_DEFAULT_TTL)
145158
sender_adapter.flush_counters(counters)
146159
assert(adapter._expire[adapters._IMP_COUNT_QUEUE_KEY + "." + 'f2::123'] == adapters._IMP_COUNT_KEY_DEFAULT_TTL)
160+
161+
del adapter._keys[adapters._IMP_COUNT_QUEUE_KEY + "." + 'f1::123']
162+
del adapter._keys[adapters._IMP_COUNT_QUEUE_KEY + "." + 'f2::123']
163+
sender_adapter.flush_counters({})
164+
assert(adapter.get_keys_by_prefix(adapters._IMP_COUNT_QUEUE_KEY) == [])

0 commit comments

Comments
 (0)