Skip to content

Commit 066b78f

Browse files
committed
polish
1 parent ba4e347 commit 066b78f

File tree

8 files changed

+183
-56
lines changed

8 files changed

+183
-56
lines changed

splitio/client/factory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=
693693

694694
synchronizers = SplitSynchronizers(
695695
SplitSynchronizerAsync(apis['splits'], storages['splits'], storages['rule_based_segments']),
696-
SegmentSynchronizerAsync(apis['segments'], storages['splits'], storages['segments']),
696+
SegmentSynchronizerAsync(apis['segments'], storages['splits'], storages['segments'], storages['rule_based_segments']),
697697
ImpressionSynchronizerAsync(apis['impressions'], storages['impressions'],
698698
cfg['impressionsBulkSize']),
699699
EventSynchronizerAsync(apis['events'], storages['events'], cfg['eventsBulkSize']),

splitio/models/rule_based_segments.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ def get_excluded_segments(self):
152152
"""Return excluded segments"""
153153
return self._segments
154154

155+
def get_excluded_standard_segments(self):
156+
"""Return excluded segments"""
157+
to_return = []
158+
for segment in self._segments:
159+
if segment.type == SegmentType.STANDARD:
160+
to_return.append(segment.name)
161+
return to_return
162+
155163
def to_json(self):
156164
"""Return a JSON representation of this object."""
157165
return {

splitio/sync/segment.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from splitio.util.backoff import Backoff
1111
from splitio.optional.loaders import asyncio, aiofiles
1212
from splitio.sync import util
13-
from splitio.util.storage_helper import get_standard_segment_names_in_rbs_storage
13+
from splitio.util.storage_helper import get_standard_segment_names_in_rbs_storage, get_standard_segment_names_in_rbs_storage_async
1414
from splitio.optional.loaders import asyncio
1515

1616
_LOGGER = logging.getLogger(__name__)
@@ -183,7 +183,7 @@ def synchronize_segments(self, segment_names = None, dont_wait = False):
183183
:rtype: bool
184184
"""
185185
if segment_names is None:
186-
segment_names = self._feature_flag_storage.get_segment_names()
186+
segment_names = set(self._feature_flag_storage.get_segment_names())
187187
segment_names.update(get_standard_segment_names_in_rbs_storage(self._rule_based_segment_storage))
188188

189189
for segment_name in segment_names:
@@ -209,7 +209,7 @@ def segment_exist_in_storage(self, segment_name):
209209

210210

211211
class SegmentSynchronizerAsync(object):
212-
def __init__(self, segment_api, feature_flag_storage, segment_storage):
212+
def __init__(self, segment_api, feature_flag_storage, segment_storage, rule_based_segment_storage):
213213
"""
214214
Class constructor.
215215
@@ -226,6 +226,7 @@ def __init__(self, segment_api, feature_flag_storage, segment_storage):
226226
self._api = segment_api
227227
self._feature_flag_storage = feature_flag_storage
228228
self._segment_storage = segment_storage
229+
self._rule_based_segment_storage = rule_based_segment_storage
229230
self._worker_pool = workerpool.WorkerPoolAsync(_MAX_WORKERS, self.synchronize_segment)
230231
self._worker_pool.start()
231232
self._backoff = Backoff(
@@ -369,7 +370,8 @@ async def synchronize_segments(self, segment_names = None, dont_wait = False):
369370
:rtype: bool
370371
"""
371372
if segment_names is None:
372-
segment_names = await self._feature_flag_storage.get_segment_names()
373+
segment_names = set(await self._feature_flag_storage.get_segment_names())
374+
segment_names.update(await get_standard_segment_names_in_rbs_storage_async(self._rule_based_segment_storage))
373375

374376
self._jobs = await self._worker_pool.submit_work(segment_names)
375377
if (dont_wait):

splitio/util/storage_helper.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Storage Helper."""
22
import logging
33
from splitio.models import splits
4+
from splitio.models import rule_based_segments
45

56
_LOGGER = logging.getLogger(__name__)
67

@@ -58,17 +59,14 @@ def update_rule_based_segment_storage(rule_based_segment_storage, rule_based_seg
5859
for rule_based_segment in rule_based_segments:
5960
if rule_based_segment.status == splits.Status.ACTIVE:
6061
to_add.append(rule_based_segment)
61-
segment_list.update(set(_get_segment_names(rule_based_segment.excluded.get_excluded_segments())))
62+
segment_list.update(set(rule_based_segment.excluded.get_excluded_standard_segments()))
6263
segment_list.update(rule_based_segment.get_condition_segment_names())
6364
else:
6465
if rule_based_segment_storage.get(rule_based_segment.name) is not None:
6566
to_delete.append(rule_based_segment.name)
6667

6768
rule_based_segment_storage.update(to_add, to_delete, change_number)
6869
return segment_list
69-
70-
def _get_segment_names(excluded_segments):
71-
return [excluded_segment.name for excluded_segment in excluded_segments]
7270

7371
def get_standard_segment_names_in_rbs_storage(rule_based_segment_storage):
7472
"""
@@ -80,7 +78,7 @@ def get_standard_segment_names_in_rbs_storage(rule_based_segment_storage):
8078
segment_list = set()
8179
for rb_segment in rule_based_segment_storage.get_segment_names():
8280
rb_segment_obj = rule_based_segment_storage.get(rb_segment)
83-
segment_list.update(set(_get_segment_names(rb_segment_obj.excluded.get_excluded_segments())))
81+
segment_list.update(set(rb_segment_obj.excluded.get_excluded_standard_segments()))
8482
segment_list.update(rb_segment_obj.get_condition_segment_names())
8583

8684
return segment_list
@@ -139,7 +137,7 @@ async def update_rule_based_segment_storage_async(rule_based_segment_storage, ru
139137
for rule_based_segment in rule_based_segments:
140138
if rule_based_segment.status == splits.Status.ACTIVE:
141139
to_add.append(rule_based_segment)
142-
segment_list.update(set(_get_segment_names(rule_based_segment.excluded.get_excluded_segments())))
140+
segment_list.update(set(rule_based_segment.excluded.get_excluded_standard_segments()))
143141
segment_list.update(rule_based_segment.get_condition_segment_names())
144142
else:
145143
if await rule_based_segment_storage.get(rule_based_segment.name) is not None:
@@ -148,6 +146,22 @@ async def update_rule_based_segment_storage_async(rule_based_segment_storage, ru
148146
await rule_based_segment_storage.update(to_add, to_delete, change_number)
149147
return segment_list
150148

149+
async def get_standard_segment_names_in_rbs_storage_async(rule_based_segment_storage):
150+
"""
151+
Retrieve a list of all standard segments names.
152+
153+
:return: Set of segment names.
154+
:rtype: Set(str)
155+
"""
156+
segment_list = set()
157+
segment_names = await rule_based_segment_storage.get_segment_names()
158+
for rb_segment in segment_names:
159+
rb_segment_obj = await rule_based_segment_storage.get(rb_segment)
160+
segment_list.update(set(rb_segment_obj.excluded.get_excluded_standard_segments()))
161+
segment_list.update(rb_segment_obj.get_condition_segment_names())
162+
163+
return segment_list
164+
151165
def get_valid_flag_sets(flag_sets, flag_set_filter):
152166
"""
153167
Check each flag set in given array, return it if exist in a given config flag set array, if config array is empty return all

0 commit comments

Comments
 (0)