@@ -55,13 +55,14 @@ def _fetch_until(self, fetch_options, till=None):
5555 :return: last change number
5656 :rtype: int
5757 """
58+ segment_list = set ()
5859 while True : # Fetch until since==till
5960 change_number = self ._split_storage .get_change_number ()
6061 if change_number is None :
6162 change_number = - 1
6263 if till is not None and till < change_number :
6364 # the passed till is less than change_number, no need to perform updates
64- return change_number
65+ return change_number , segment_list
6566
6667 try :
6768 split_changes = self ._api .fetch_splits (change_number , fetch_options )
@@ -72,13 +73,14 @@ def _fetch_until(self, fetch_options, till=None):
7273
7374 for split in split_changes .get ('splits' , []):
7475 if split ['status' ] == splits .Status .ACTIVE .value :
75- self ._split_storage .put (splits .from_raw (split ))
76+ parsed = splits .from_raw (split )
77+ self ._split_storage .put (parsed )
78+ segment_list .update (set (parsed .get_segment_names ()))
7679 else :
7780 self ._split_storage .remove (split ['name' ])
78-
7981 self ._split_storage .set_change_number (split_changes ['till' ])
8082 if split_changes ['till' ] == split_changes ['since' ]:
81- return split_changes ['till' ]
83+ return split_changes ['till' ], segment_list
8284
8385 def _attempt_split_sync (self , fetch_options , till = None ):
8486 """
@@ -94,14 +96,16 @@ def _attempt_split_sync(self, fetch_options, till=None):
9496 :rtype: bool, int, int
9597 """
9698 self ._backoff .reset ()
99+ final_segment_list = set ()
97100 remaining_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES
98101 while True :
99102 remaining_attempts -= 1
100- change_number = self ._fetch_until (fetch_options , till )
103+ change_number , segment_list = self ._fetch_until (fetch_options , till )
104+ final_segment_list .update (segment_list )
101105 if till is None or till <= change_number :
102- return True , remaining_attempts , change_number
106+ return True , remaining_attempts , change_number , final_segment_list
103107 elif remaining_attempts <= 0 :
104- return False , remaining_attempts , change_number
108+ return False , remaining_attempts , change_number , final_segment_list
105109 how_long = self ._backoff .get ()
106110 time .sleep (how_long )
107111
@@ -112,20 +116,23 @@ def synchronize_splits(self, till=None):
112116 :param till: Passed till from Streaming.
113117 :type till: int
114118 """
119+ final_segment_list = set ()
115120 fetch_options = FetchOptions (True ) # Set Cache-Control to no-cache
116- successful_sync , remaining_attempts , change_number = self ._attempt_split_sync (fetch_options ,
121+ successful_sync , remaining_attempts , change_number , segment_list = self ._attempt_split_sync (fetch_options ,
117122 till )
123+ final_segment_list .update (segment_list )
118124 attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
119125 if successful_sync : # succedeed sync
120126 _LOGGER .debug ('Refresh completed in %d attempts.' , attempts )
121- return
127+ return final_segment_list
122128 with_cdn_bypass = FetchOptions (True , change_number ) # Set flag for bypassing CDN
123- without_cdn_successful_sync , remaining_attempts , change_number = self ._attempt_split_sync (with_cdn_bypass , till )
129+ without_cdn_successful_sync , remaining_attempts , change_number , segment_list = self ._attempt_split_sync (with_cdn_bypass , till )
130+ final_segment_list .update (segment_list )
124131 without_cdn_attempts = _ON_DEMAND_FETCH_BACKOFF_MAX_RETRIES - remaining_attempts
125132 if without_cdn_successful_sync :
126133 _LOGGER .debug ('Refresh completed bypassing the CDN in %d attempts.' ,
127134 without_cdn_attempts )
128- return
135+ return final_segment_list
129136 else :
130137 _LOGGER .debug ('No changes fetched after %d attempts with CDN bypassed.' ,
131138 without_cdn_attempts )
0 commit comments