|
18 | 18 | TelemetryStorageProducerAsync, TelemetryStorageConsumerAsync |
19 | 19 | from splitio.engine.impressions.manager import Counter as ImpressionsCounter |
20 | 20 | from splitio.engine.impressions.unique_keys_tracker import UniqueKeysTracker, UniqueKeysTrackerAsync |
21 | | - |
| 21 | +from splitio.models.fallback_config import FallbackTreatmentCalculator |
22 | 22 | # Storage |
23 | 23 | from splitio.storage.inmemmory import InMemorySplitStorage, InMemorySegmentStorage, \ |
24 | 24 | InMemoryImpressionStorage, InMemoryEventStorage, InMemoryTelemetryStorage, LocalhostTelemetryStorage, \ |
@@ -170,7 +170,8 @@ def __init__( # pylint: disable=too-many-arguments |
170 | 170 | telemetry_producer=None, |
171 | 171 | telemetry_init_producer=None, |
172 | 172 | telemetry_submitter=None, |
173 | | - preforked_initialization=False |
| 173 | + preforked_initialization=False, |
| 174 | + fallback_treatment_calculator=None |
174 | 175 | ): |
175 | 176 | """ |
176 | 177 | Class constructor. |
@@ -201,6 +202,7 @@ def __init__( # pylint: disable=too-many-arguments |
201 | 202 | self._ready_time = get_current_epoch_time_ms() |
202 | 203 | _LOGGER.debug("Running in threading mode") |
203 | 204 | self._sdk_internal_ready_flag = sdk_ready_flag |
| 205 | + self._fallback_treatment_calculator = fallback_treatment_calculator |
204 | 206 | self._start_status_updater() |
205 | 207 |
|
206 | 208 | def _start_status_updater(self): |
@@ -242,7 +244,7 @@ def client(self): |
242 | 244 | This client is only a set of references to structures hold by the factory. |
243 | 245 | Creating one a fast operation and safe to be used anywhere. |
244 | 246 | """ |
245 | | - return Client(self, self._recorder, self._labels_enabled) |
| 247 | + return Client(self, self._recorder, self._labels_enabled, self._fallback_treatment_calculator) |
246 | 248 |
|
247 | 249 | def manager(self): |
248 | 250 | """ |
@@ -338,7 +340,8 @@ def __init__( # pylint: disable=too-many-arguments |
338 | 340 | telemetry_init_producer=None, |
339 | 341 | telemetry_submitter=None, |
340 | 342 | manager_start_task=None, |
341 | | - api_client=None |
| 343 | + api_client=None, |
| 344 | + fallback_treatment_calculator=None |
342 | 345 | ): |
343 | 346 | """ |
344 | 347 | Class constructor. |
@@ -372,6 +375,7 @@ def __init__( # pylint: disable=too-many-arguments |
372 | 375 | self._sdk_ready_flag = asyncio.Event() |
373 | 376 | self._ready_task = asyncio.get_running_loop().create_task(self._update_status_when_ready_async()) |
374 | 377 | self._api_client = api_client |
| 378 | + self._fallback_treatment_calculator = fallback_treatment_calculator |
375 | 379 |
|
376 | 380 | async def _update_status_when_ready_async(self): |
377 | 381 | """Wait until the sdk is ready and update the status for async mode.""" |
@@ -460,7 +464,7 @@ def client(self): |
460 | 464 | This client is only a set of references to structures hold by the factory. |
461 | 465 | Creating one a fast operation and safe to be used anywhere. |
462 | 466 | """ |
463 | | - return ClientAsync(self, self._recorder, self._labels_enabled) |
| 467 | + return ClientAsync(self, self._recorder, self._labels_enabled, self._fallback_treatment_calculator) |
464 | 468 |
|
465 | 469 | def _wrap_impression_listener(listener, metadata): |
466 | 470 | """ |
@@ -623,15 +627,16 @@ def _build_in_memory_factory(api_key, cfg, sdk_url=None, events_url=None, # pyl |
623 | 627 | synchronizer._split_synchronizers._segment_sync.shutdown() |
624 | 628 |
|
625 | 629 | return SplitFactory(api_key, storages, cfg['labelsEnabled'], |
626 | | - recorder, manager, None, telemetry_producer, telemetry_init_producer, telemetry_submitter, preforked_initialization=preforked_initialization) |
| 630 | + recorder, manager, None, telemetry_producer, telemetry_init_producer, telemetry_submitter, preforked_initialization=preforked_initialization, |
| 631 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments'])) |
627 | 632 |
|
628 | 633 | initialization_thread = threading.Thread(target=manager.start, name="SDKInitializer", daemon=True) |
629 | 634 | initialization_thread.start() |
630 | 635 |
|
631 | 636 | return SplitFactory(api_key, storages, cfg['labelsEnabled'], |
632 | 637 | recorder, manager, sdk_ready_flag, |
633 | 638 | telemetry_producer, telemetry_init_producer, |
634 | | - telemetry_submitter) |
| 639 | + telemetry_submitter, fallback_treatment_calculator = FallbackTreatmentCalculator(cfg['fallbackTreatments'])) |
635 | 640 |
|
636 | 641 | async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url=None, # pylint:disable=too-many-arguments,too-many-localsa |
637 | 642 | auth_api_base_url=None, streaming_api_base_url=None, telemetry_api_base_url=None, |
@@ -750,7 +755,7 @@ async def _build_in_memory_factory_async(api_key, cfg, sdk_url=None, events_url= |
750 | 755 | recorder, manager, |
751 | 756 | telemetry_producer, telemetry_init_producer, |
752 | 757 | telemetry_submitter, manager_start_task=manager_start_task, |
753 | | - api_client=http_client) |
| 758 | + api_client=http_client, fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments'])) |
754 | 759 |
|
755 | 760 | def _build_redis_factory(api_key, cfg): |
756 | 761 | """Build and return a split factory with redis-based storage.""" |
@@ -828,7 +833,8 @@ def _build_redis_factory(api_key, cfg): |
828 | 833 | manager, |
829 | 834 | sdk_ready_flag=None, |
830 | 835 | telemetry_producer=telemetry_producer, |
831 | | - telemetry_init_producer=telemetry_init_producer |
| 836 | + telemetry_init_producer=telemetry_init_producer, |
| 837 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
832 | 838 | ) |
833 | 839 | redundant_factory_count, active_factory_count = _get_active_and_redundant_count() |
834 | 840 | storages['telemetry'].record_active_and_redundant_factories(active_factory_count, redundant_factory_count) |
@@ -910,7 +916,8 @@ async def _build_redis_factory_async(api_key, cfg): |
910 | 916 | manager, |
911 | 917 | telemetry_producer=telemetry_producer, |
912 | 918 | telemetry_init_producer=telemetry_init_producer, |
913 | | - telemetry_submitter=telemetry_submitter |
| 919 | + telemetry_submitter=telemetry_submitter, |
| 920 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
914 | 921 | ) |
915 | 922 | redundant_factory_count, active_factory_count = _get_active_and_redundant_count() |
916 | 923 | await storages['telemetry'].record_active_and_redundant_factories(active_factory_count, redundant_factory_count) |
@@ -992,7 +999,8 @@ def _build_pluggable_factory(api_key, cfg): |
992 | 999 | manager, |
993 | 1000 | sdk_ready_flag=None, |
994 | 1001 | telemetry_producer=telemetry_producer, |
995 | | - telemetry_init_producer=telemetry_init_producer |
| 1002 | + telemetry_init_producer=telemetry_init_producer, |
| 1003 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
996 | 1004 | ) |
997 | 1005 | redundant_factory_count, active_factory_count = _get_active_and_redundant_count() |
998 | 1006 | storages['telemetry'].record_active_and_redundant_factories(active_factory_count, redundant_factory_count) |
@@ -1072,7 +1080,8 @@ async def _build_pluggable_factory_async(api_key, cfg): |
1072 | 1080 | manager, |
1073 | 1081 | telemetry_producer=telemetry_producer, |
1074 | 1082 | telemetry_init_producer=telemetry_init_producer, |
1075 | | - telemetry_submitter=telemetry_submitter |
| 1083 | + telemetry_submitter=telemetry_submitter, |
| 1084 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
1076 | 1085 | ) |
1077 | 1086 | redundant_factory_count, active_factory_count = _get_active_and_redundant_count() |
1078 | 1087 | await storages['telemetry'].record_active_and_redundant_factories(active_factory_count, redundant_factory_count) |
@@ -1150,6 +1159,7 @@ def _build_localhost_factory(cfg): |
1150 | 1159 | telemetry_producer=telemetry_producer, |
1151 | 1160 | telemetry_init_producer=telemetry_producer.get_telemetry_init_producer(), |
1152 | 1161 | telemetry_submitter=LocalhostTelemetrySubmitter(), |
| 1162 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
1153 | 1163 | ) |
1154 | 1164 |
|
1155 | 1165 | async def _build_localhost_factory_async(cfg): |
@@ -1220,7 +1230,8 @@ async def _build_localhost_factory_async(cfg): |
1220 | 1230 | telemetry_producer=telemetry_producer, |
1221 | 1231 | telemetry_init_producer=telemetry_producer.get_telemetry_init_producer(), |
1222 | 1232 | telemetry_submitter=LocalhostTelemetrySubmitterAsync(), |
1223 | | - manager_start_task=manager_start_task |
| 1233 | + manager_start_task=manager_start_task, |
| 1234 | + fallback_treatment_calculator=FallbackTreatmentCalculator(cfg['fallbackTreatments']) |
1224 | 1235 | ) |
1225 | 1236 |
|
1226 | 1237 | def get_factory(api_key, **kwargs): |
|
0 commit comments