@@ -35,6 +35,8 @@ class CompressionMode(Enum):
35
35
class WorkerBase (object , metaclass = abc .ABCMeta ):
36
36
"""Worker template."""
37
37
38
+ _fetching_segment = "Fetching new segment {segment_name}"
39
+
38
40
@abc .abstractmethod
39
41
def is_running (self ):
40
42
"""Return whether the working is running."""
@@ -226,27 +228,30 @@ def _apply_iff_if_needed(self, event):
226
228
segment_list = update_feature_flag_storage (self ._feature_flag_storage , [new_feature_flag ], event .change_number )
227
229
for segment_name in segment_list :
228
230
if self ._segment_storage .get (segment_name ) is None :
229
- _LOGGER .debug ('Fetching new segment %s' , segment_name )
231
+ _LOGGER .debug (self . _fetching_segment . format ( segment_name = segment_name ) )
230
232
self ._segment_handler (segment_name , event .change_number )
231
233
232
234
referenced_rbs = self ._get_referenced_rbs (new_feature_flag )
233
- if len (referenced_rbs ) > 0 and not self ._rule_based_segment_storage .contains (referenced_rbs ):
234
- _LOGGER .debug ('Fetching new rule based segment(s) %s' , referenced_rbs )
235
- self ._handler (None , event .change_number )
235
+ self ._fetch_rbs_segment_if_needed (referenced_rbs , event )
236
236
self ._telemetry_runtime_producer .record_update_from_sse (UpdateFromSSE .SPLIT_UPDATE )
237
237
else :
238
238
new_rbs = rbs_from_raw (json .loads (self ._get_object_definition (event )))
239
239
segment_list = update_rule_based_segment_storage (self ._rule_based_segment_storage , [new_rbs ], event .change_number )
240
240
for segment_name in segment_list :
241
241
if self ._segment_storage .get (segment_name ) is None :
242
- _LOGGER .debug ('Fetching new segment %s' , segment_name )
242
+ _LOGGER .debug (self . _fetching_segment . format ( segment_name = segment_name ) )
243
243
self ._segment_handler (segment_name , event .change_number )
244
244
self ._telemetry_runtime_producer .record_update_from_sse (UpdateFromSSE .RBS_UPDATE )
245
245
return True
246
246
247
247
except Exception as e :
248
248
raise SplitStorageException (e )
249
249
250
+ def _fetch_rbs_segment_if_needed (self , referenced_rbs , event ):
251
+ if len (referenced_rbs ) > 0 and not self ._rule_based_segment_storage .contains (referenced_rbs ):
252
+ _LOGGER .debug ('Fetching new rule based segment(s) %s' , referenced_rbs )
253
+ self ._handler (None , event .change_number )
254
+
250
255
def _check_instant_ff_update (self , event ):
251
256
if event .update_type == UpdateType .SPLIT_UPDATE and event .compression is not None and event .previous_change_number == self ._feature_flag_storage .get_change_number ():
252
257
return True
@@ -264,16 +269,15 @@ def _run(self):
264
269
break
265
270
if event == self ._centinel :
266
271
continue
272
+
267
273
_LOGGER .debug ('Processing feature flag update %d' , event .change_number )
268
274
try :
269
275
if self ._apply_iff_if_needed (event ):
270
276
continue
277
+
271
278
till = None
272
279
rbs_till = None
273
- if event .update_type == UpdateType .SPLIT_UPDATE :
274
- till = event .change_number
275
- else :
276
- rbs_till = event .change_number
280
+ till , rbs_till = self ._check_update_type (till , rbs_till , event )
277
281
sync_result = self ._handler (till , rbs_till )
278
282
if not sync_result .success and sync_result .error_code is not None and sync_result .error_code == 414 :
279
283
_LOGGER .error ("URI too long exception caught, sync failed" )
@@ -288,6 +292,14 @@ def _run(self):
288
292
_LOGGER .error ('Exception raised in feature flag synchronization' )
289
293
_LOGGER .debug ('Exception information: ' , exc_info = True )
290
294
295
+ def _check_update_type (self , till , rbs_till , event ):
296
+ if event .update_type == UpdateType .SPLIT_UPDATE :
297
+ till = event .change_number
298
+ else :
299
+ rbs_till = event .change_number
300
+
301
+ return till , rbs_till
302
+
291
303
def start (self ):
292
304
"""Start worker."""
293
305
if self .is_running ():
@@ -354,27 +366,30 @@ async def _apply_iff_if_needed(self, event):
354
366
segment_list = await update_feature_flag_storage_async (self ._feature_flag_storage , [new_feature_flag ], event .change_number )
355
367
for segment_name in segment_list :
356
368
if await self ._segment_storage .get (segment_name ) is None :
357
- _LOGGER .debug ('Fetching new segment %s' , segment_name )
369
+ _LOGGER .debug (self . _fetching_segment . format ( segment_name = segment_name ) )
358
370
await self ._segment_handler (segment_name , event .change_number )
359
371
360
372
referenced_rbs = self ._get_referenced_rbs (new_feature_flag )
361
- if len (referenced_rbs ) > 0 and not await self ._rule_based_segment_storage .contains (referenced_rbs ):
362
- await self ._handler (None , event .change_number )
363
-
373
+ await self ._fetch_rbs_segment_if_needed (referenced_rbs , event )
364
374
await self ._telemetry_runtime_producer .record_update_from_sse (UpdateFromSSE .SPLIT_UPDATE )
365
375
else :
366
376
new_rbs = rbs_from_raw (json .loads (self ._get_object_definition (event )))
367
377
segment_list = await update_rule_based_segment_storage_async (self ._rule_based_segment_storage , [new_rbs ], event .change_number )
368
378
for segment_name in segment_list :
369
379
if await self ._segment_storage .get (segment_name ) is None :
370
- _LOGGER .debug ('Fetching new segment %s' , segment_name )
380
+ _LOGGER .debug (self . _fetching_segment . format ( segment_name = segment_name ) )
371
381
await self ._segment_handler (segment_name , event .change_number )
372
382
await self ._telemetry_runtime_producer .record_update_from_sse (UpdateFromSSE .RBS_UPDATE )
373
383
return True
374
384
375
385
except Exception as e :
376
386
raise SplitStorageException (e )
377
387
388
+ async def _fetch_rbs_segment_if_needed (self , referenced_rbs , event ):
389
+ if len (referenced_rbs ) > 0 and not await self ._rule_based_segment_storage .contains (referenced_rbs ):
390
+ _LOGGER .debug ('Fetching new rule based segment(s) %s' , referenced_rbs )
391
+ await self ._handler (None , event .change_number )
392
+
378
393
async def _check_instant_ff_update (self , event ):
379
394
if event .update_type == UpdateType .SPLIT_UPDATE and event .compression is not None and event .previous_change_number == await self ._feature_flag_storage .get_change_number ():
380
395
return True
0 commit comments