Skip to content

Commit 9f1c9b9

Browse files
authored
Merge pull request #319 from splitio/add-expire-to-imp-and-event
Added expire_key method
2 parents cd26e63 + a5c221c commit 9f1c9b9

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

splitio/storage/pluggable.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,8 @@ def put(self, segment):
476476

477477
class PluggableImpressionsStorage(ImpressionStorage):
478478

479+
IMPRESSIONS_KEY_DEFAULT_TTL = 3600
480+
479481
def __init__(self, pluggable_adapter, sdk_metadata, prefix=None):
480482
"""
481483
Class constructor.
@@ -542,6 +544,18 @@ def put(self, impressions):
542544
_LOGGER.error('Error: ', exc_info=True)
543545
return False
544546

547+
def expire_key(self, total_keys, inserted):
548+
"""
549+
Set expire
550+
551+
:param total_keys: length of keys.
552+
:type total_keys: int
553+
:param inserted: added keys.
554+
:type inserted: int
555+
"""
556+
if total_keys == inserted:
557+
self._pluggable_adapter.expire(self._impressions_queue_key, self.IMPRESSIONS_KEY_DEFAULT_TTL)
558+
545559
def pop_many(self, count):
546560
"""
547561
Pop the oldest N events from storage.
@@ -561,6 +575,8 @@ def clear(self):
561575
class PluggableEventsStorage(EventStorage):
562576
"""Redis based event storage class."""
563577

578+
_EVENTS_KEY_DEFAULT_TTL = 3600
579+
564580
def __init__(self, pluggable_adapter, sdk_metadata, prefix=None):
565581
"""
566582
Class constructor.
@@ -615,6 +631,18 @@ def put(self, events):
615631
_LOGGER.debug('Error: ', exc_info=True)
616632
return False
617633

634+
def expire_key(self, total_keys, inserted):
635+
"""
636+
Set expire
637+
638+
:param total_keys: length of keys.
639+
:type total_keys: int
640+
:param inserted: added keys.
641+
:type inserted: int
642+
"""
643+
if total_keys == inserted:
644+
self._pluggable_adapter.expire(self._events_queue_key, self._EVENTS_KEY_DEFAULT_TTL)
645+
618646
def pop_many(self, count):
619647
"""
620648
Pop the oldest N events from storage.

tests/storage/test_pluggable.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ def get_items_count(self, key):
9393
return len(self._keys[key])
9494
return None
9595

96+
def expire(self, key, ttl):
97+
#Not needed for Memory storage
98+
pass
99+
96100
class PluggableSplitStorageTests(object):
97101
"""In memory split storage test cases."""
98102

@@ -406,6 +410,27 @@ def test_wrap_impressions(self):
406410
})
407411
])
408412

413+
def test_expire_key(self):
414+
self.expired_called = False
415+
self.key = ""
416+
self.ttl = 0
417+
def mock_expire(impressions_queue_key, ttl):
418+
self.key = impressions_queue_key
419+
self.ttl = ttl
420+
self.expired_called = True
421+
422+
self.mock_adapter.expire = mock_expire
423+
424+
# should not call if total_keys are higher
425+
self.pluggable_imp_storage.expire_key(200, 10)
426+
assert(not self.expired_called)
427+
428+
self.pluggable_imp_storage.expire_key(200, 200)
429+
assert(self.expired_called)
430+
assert(self.key == "myprefix.SPLITIO.impressions")
431+
assert(self.ttl == self.pluggable_imp_storage.IMPRESSIONS_KEY_DEFAULT_TTL)
432+
433+
409434
class PluggableEventsStorageTests(object):
410435
"""In memory events storage test cases."""
411436

@@ -481,3 +506,23 @@ def test_wrap_events(self):
481506
}
482507
})
483508
])
509+
510+
def test_expire_key(self):
511+
self.expired_called = False
512+
self.key = ""
513+
self.ttl = 0
514+
def mock_expire(impressions_event_key, ttl):
515+
self.key = impressions_event_key
516+
self.ttl = ttl
517+
self.expired_called = True
518+
519+
self.mock_adapter.expire = mock_expire
520+
521+
# should not call if total_keys are higher
522+
self.pluggable_events_storage.expire_key(200, 10)
523+
assert(not self.expired_called)
524+
525+
self.pluggable_events_storage.expire_key(200, 200)
526+
assert(self.expired_called)
527+
assert(self.key == "myprefix.SPLITIO.events")
528+
assert(self.ttl == self.pluggable_events_storage._EVENTS_KEY_DEFAULT_TTL)

0 commit comments

Comments
 (0)