|
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