Skip to content

Commit 418a7b5

Browse files
authored
Merge pull request #326 from splitio/expire-for-imps-and-events
Added expire to impressions and events keys
2 parents 9ad196f + dc3350e commit 418a7b5

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

splitio/storage/pluggable.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,8 @@ def put(self, impressions):
556556
"""
557557
bulk_impressions = self._wrap_impressions(impressions)
558558
try:
559-
self._pluggable_adapter.push_items(self._impressions_queue_key, *bulk_impressions)
559+
total_keys = self._pluggable_adapter.push_items(self._impressions_queue_key, *bulk_impressions)
560+
self.expire_key(total_keys, len(bulk_impressions))
560561
return True
561562
except Exception:
562563
_LOGGER.error('Something went wrong when trying to add impression to storage')
@@ -645,7 +646,8 @@ def put(self, events):
645646
"""
646647
to_store = self._wrap_events(events)
647648
try:
648-
self._pluggable_adapter.push_items(self._events_queue_key, *to_store)
649+
total_keys = self._pluggable_adapter.push_items(self._events_queue_key, *to_store)
650+
self.expire_key(total_keys, len(to_store))
649651
return True
650652
except Exception:
651653
_LOGGER.error('Something went wrong when trying to add event to redis')

tests/storage/test_pluggable.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
class StorageMockAdapter(object):
1818
def __init__(self):
1919
self._keys = {}
20+
self._expire = {}
2021
self._lock = threading.RLock()
2122

2223
def get(self, key):
@@ -42,6 +43,7 @@ def push_items(self, key, *value):
4243
items = self._keys[key]
4344
[items.append(item) for item in value]
4445
self._keys[key] = items
46+
return len(self._keys[key])
4547

4648
def delete(self, key):
4749
with self._lock:
@@ -56,7 +58,6 @@ def pop_items(self, key):
5658
del self._keys[key]
5759
return items
5860

59-
6061
def increment(self, key, value):
6162
with self._lock:
6263
if key not in self._keys:
@@ -116,8 +117,12 @@ def get_items_count(self, key):
116117
return None
117118

118119
def expire(self, key, ttl):
119-
#Not needed for Memory storage
120-
pass
120+
with self._lock:
121+
if key in self._expire:
122+
self._expire[key] = -1
123+
else:
124+
self._expire[key] = ttl
125+
# should only be called once per key.
121126

122127
class PluggableSplitStorageTests(object):
123128
"""In memory split storage test cases."""
@@ -381,15 +386,16 @@ def test_put(self):
381386
Impression('key3', 'feature2', 'on', 'some_label', 123456, 'buck1', 321654),
382387
Impression('key4', 'feature1', 'on', 'some_label', 123456, 'buck1', 321654)
383388
]
384-
self.pluggable_imp_storage.put(impressions)
389+
assert(self.pluggable_imp_storage.put(impressions))
385390
assert(self.pluggable_imp_storage._impressions_queue_key in self.mock_adapter._keys)
386391
assert(self.mock_adapter._keys["myprefix.SPLITIO.impressions"] == self.pluggable_imp_storage._wrap_impressions(impressions))
392+
assert(self.mock_adapter._expire["myprefix.SPLITIO.impressions"] == PluggableImpressionsStorage.IMPRESSIONS_KEY_DEFAULT_TTL)
387393

388394
impressions2 = [
389395
Impression('key5', 'feature1', 'off', 'some_label', 123456, 'buck1', 321654),
390396
Impression('key6', 'feature2', 'off', 'some_label', 123456, 'buck1', 321654),
391397
]
392-
self.pluggable_imp_storage.put(impressions2)
398+
assert(self.pluggable_imp_storage.put(impressions2))
393399
assert(self.mock_adapter._keys["myprefix.SPLITIO.impressions"] == self.pluggable_imp_storage._wrap_impressions(impressions + impressions2))
394400

395401
def test_wrap_impressions(self):
@@ -480,15 +486,16 @@ def test_put(self):
480486
EventWrapper(event=Event('key3', 'user', 'purchase', 10, 123456, None), size=32768),
481487
EventWrapper(event=Event('key4', 'user', 'purchase', 10, 123456, None), size=32768),
482488
]
483-
self.pluggable_events_storage.put(events)
489+
assert(self.pluggable_events_storage.put(events))
484490
assert(self.pluggable_events_storage._events_queue_key in self.mock_adapter._keys)
485491
assert(self.mock_adapter._keys["myprefix.SPLITIO.events"] == self.pluggable_events_storage._wrap_events(events))
492+
assert(self.mock_adapter._expire["myprefix.SPLITIO.events"] == PluggableEventsStorage._EVENTS_KEY_DEFAULT_TTL)
486493

487494
events2 = [
488495
EventWrapper(event=Event('key5', 'user', 'purchase', 10, 123456, None), size=32768),
489496
EventWrapper(event=Event('key6', 'user', 'purchase', 10, 123456, None), size=32768),
490497
]
491-
self.pluggable_events_storage.put(events2)
498+
assert(self.pluggable_events_storage.put(events2))
492499
assert(self.mock_adapter._keys["myprefix.SPLITIO.events"] == self.pluggable_events_storage._wrap_events(events + events2))
493500

494501
def test_wrap_events(self):

0 commit comments

Comments
 (0)