@@ -86,7 +86,7 @@ def __init__(self, feature_flag_api, feature_flag_storage, rule_based_segment_st
8686 """
8787 SplitSynchronizerBase .__init__ (self , feature_flag_api , feature_flag_storage , rule_based_segment_storage )
8888
89- def _fetch_until (self , fetch_options , till = None ):
89+ def _fetch_until (self , fetch_options , till = None , rbs_till = None ):
9090 """
9191 Hit endpoint, update storage and return when since==till.
9292
@@ -109,7 +109,7 @@ def _fetch_until(self, fetch_options, till=None):
109109 if rbs_change_number is None :
110110 rbs_change_number = - 1
111111
112- if till is not None and till < change_number and till < rbs_change_number :
112+ if ( till is not None and till < change_number ) or ( rbs_till is not None and rbs_till < rbs_change_number ) :
113113 # the passed till is less than change_number, no need to perform updates
114114 return change_number , rbs_change_number , segment_list
115115
@@ -135,7 +135,7 @@ def _fetch_until(self, fetch_options, till=None):
135135 if feature_flag_changes .get ('ff' )['t' ] == feature_flag_changes .get ('ff' )['s' ] and feature_flag_changes .get ('rbs' )['t' ] == feature_flag_changes .get ('rbs' )['s' ]:
136136 return feature_flag_changes .get ('ff' )['t' ], feature_flag_changes .get ('rbs' )['t' ], segment_list
137137
138- def _attempt_feature_flag_sync (self , fetch_options , till = None ):
138+ def _attempt_feature_flag_sync (self , fetch_options , till = None , rbs_till = None ):
139139 """
140140 Hit endpoint, update storage and return True if sync is complete.
141141
@@ -153,9 +153,9 @@ def _attempt_feature_flag_sync(self, fetch_options, till=None):
153153 remaining_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES
154154 while True :
155155 remaining_attempts -= 1
156- change_number , rbs_change_number , segment_list = self ._fetch_until (fetch_options , till )
156+ change_number , rbs_change_number , segment_list = self ._fetch_until (fetch_options , till , rbs_till )
157157 final_segment_list .update (segment_list )
158- if till is None or ( till <= change_number and till <= rbs_change_number ):
158+ if ( till is None or till <= change_number ) and ( rbs_till is None or rbs_till <= rbs_change_number ):
159159 return True , remaining_attempts , change_number , rbs_change_number , final_segment_list
160160
161161 elif remaining_attempts <= 0 :
@@ -176,7 +176,7 @@ def _get_config_sets(self):
176176
177177 return ',' .join (self ._feature_flag_storage .flag_set_filter .sorted_flag_sets )
178178
179- def synchronize_splits (self , till = None ):
179+ def synchronize_splits (self , till = None , rbs_till = None ):
180180 """
181181 Hit endpoint, update storage and return True if sync is complete.
182182
@@ -186,15 +186,15 @@ def synchronize_splits(self, till=None):
186186 final_segment_list = set ()
187187 fetch_options = FetchOptions (True , sets = self ._get_config_sets ()) # Set Cache-Control to no-cache
188188 successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = self ._attempt_feature_flag_sync (fetch_options ,
189- till )
189+ till , rbs_till )
190190 final_segment_list .update (segment_list )
191191 attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
192192 if successful_sync : # succedeed sync
193193 _LOGGER .debug ('Refresh completed in %d attempts.' , attempts )
194194 return final_segment_list
195195
196196 with_cdn_bypass = FetchOptions (True , change_number , rbs_change_number , sets = self ._get_config_sets ()) # Set flag for bypassing CDN
197- without_cdn_successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = self ._attempt_feature_flag_sync (with_cdn_bypass , till )
197+ without_cdn_successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = self ._attempt_feature_flag_sync (with_cdn_bypass , till , rbs_till )
198198 final_segment_list .update (segment_list )
199199 without_cdn_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
200200 if without_cdn_successful_sync :
@@ -233,7 +233,7 @@ def __init__(self, feature_flag_api, feature_flag_storage, rule_based_segment_st
233233 """
234234 SplitSynchronizerBase .__init__ (self , feature_flag_api , feature_flag_storage , rule_based_segment_storage )
235235
236- async def _fetch_until (self , fetch_options , till = None ):
236+ async def _fetch_until (self , fetch_options , till = None , rbs_till = None ):
237237 """
238238 Hit endpoint, update storage and return when since==till.
239239
@@ -256,7 +256,7 @@ async def _fetch_until(self, fetch_options, till=None):
256256 if rbs_change_number is None :
257257 rbs_change_number = - 1
258258
259- if till is not None and till < change_number and till < rbs_change_number :
259+ if ( till is not None and till < change_number ) or ( rbs_till is not None and till < rbs_change_number ) :
260260 # the passed till is less than change_number, no need to perform updates
261261 return change_number , rbs_change_number , segment_list
262262
@@ -282,7 +282,7 @@ async def _fetch_until(self, fetch_options, till=None):
282282 if feature_flag_changes .get ('ff' )['t' ] == feature_flag_changes .get ('ff' )['s' ] and feature_flag_changes .get ('rbs' )['t' ] == feature_flag_changes .get ('rbs' )['s' ]:
283283 return feature_flag_changes .get ('ff' )['t' ], feature_flag_changes .get ('rbs' )['t' ], segment_list
284284
285- async def _attempt_feature_flag_sync (self , fetch_options , till = None ):
285+ async def _attempt_feature_flag_sync (self , fetch_options , till = None , rbs_till = None ):
286286 """
287287 Hit endpoint, update storage and return True if sync is complete.
288288
@@ -300,9 +300,9 @@ async def _attempt_feature_flag_sync(self, fetch_options, till=None):
300300 remaining_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES
301301 while True :
302302 remaining_attempts -= 1
303- change_number , rbs_change_number , segment_list = await self ._fetch_until (fetch_options , till )
303+ change_number , rbs_change_number , segment_list = await self ._fetch_until (fetch_options , till , rbs_till )
304304 final_segment_list .update (segment_list )
305- if till is None or ( till <= change_number and till <= rbs_change_number ):
305+ if ( till is None or till <= change_number ) and ( rbs_till is None or rbs_till <= rbs_change_number ):
306306 return True , remaining_attempts , change_number , rbs_change_number , final_segment_list
307307
308308 elif remaining_attempts <= 0 :
@@ -311,7 +311,7 @@ async def _attempt_feature_flag_sync(self, fetch_options, till=None):
311311 how_long = self ._backoff .get ()
312312 await asyncio .sleep (how_long )
313313
314- async def synchronize_splits (self , till = None ):
314+ async def synchronize_splits (self , till = None , rbs_till = None ):
315315 """
316316 Hit endpoint, update storage and return True if sync is complete.
317317
@@ -321,15 +321,15 @@ async def synchronize_splits(self, till=None):
321321 final_segment_list = set ()
322322 fetch_options = FetchOptions (True , sets = self ._get_config_sets ()) # Set Cache-Control to no-cache
323323 successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = await self ._attempt_feature_flag_sync (fetch_options ,
324- till )
324+ till , rbs_till )
325325 final_segment_list .update (segment_list )
326326 attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
327327 if successful_sync : # succedeed sync
328328 _LOGGER .debug ('Refresh completed in %d attempts.' , attempts )
329329 return final_segment_list
330330
331331 with_cdn_bypass = FetchOptions (True , change_number , rbs_change_number , sets = self ._get_config_sets ()) # Set flag for bypassing CDN
332- without_cdn_successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = await self ._attempt_feature_flag_sync (with_cdn_bypass , till )
332+ without_cdn_successful_sync , remaining_attempts , change_number , rbs_change_number , segment_list = await self ._attempt_feature_flag_sync (with_cdn_bypass , till , rbs_till )
333333 final_segment_list .update (segment_list )
334334 without_cdn_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
335335 if without_cdn_successful_sync :
0 commit comments