@ -206,13 +206,17 @@ def retry_upload(tid: int, end_event: threading.Event, increase_count: bool = Tr
break
break
def cb ( sm , item , tid , sz : int , cur : int ) - > None :
def cb ( sm , item , tid , end_event : threading . Event , sz : int , cur : int ) - > None :
# Abort transfer if connection changed to metered after starting upload
# Abort transfer if connection changed to metered after starting upload
# or if athenad is shutting down to re-connect the websocket
sm . update ( 0 )
sm . update ( 0 )
metered = sm [ ' deviceState ' ] . networkMetered
metered = sm [ ' deviceState ' ] . networkMetered
if metered and ( not item . allow_cellular ) :
if metered and ( not item . allow_cellular ) :
raise AbortTransferException
raise AbortTransferException
if end_event . is_set ( ) :
raise AbortTransferException
cur_upload_items [ tid ] = replace ( item , progress = cur / sz if sz else 1 )
cur_upload_items [ tid ] = replace ( item , progress = cur / sz if sz else 1 )
@ -252,7 +256,7 @@ def upload_handler(end_event: threading.Event) -> None:
sz = - 1
sz = - 1
cloudlog . event ( " athena.upload_handler.upload_start " , fn = fn , sz = sz , network_type = network_type , metered = metered , retry_count = item . retry_count )
cloudlog . event ( " athena.upload_handler.upload_start " , fn = fn , sz = sz , network_type = network_type , metered = metered , retry_count = item . retry_count )
response = _do_upload ( item , partial ( cb , sm , item , tid ) )
response = _do_upload ( item , partial ( cb , sm , item , tid , end_event ) )
if response . status_code not in ( 200 , 201 , 401 , 403 , 412 ) :
if response . status_code not in ( 200 , 201 , 401 , 403 , 412 ) :
cloudlog . event ( " athena.upload_handler.retry " , status_code = response . status_code , fn = fn , sz = sz , network_type = network_type , metered = metered )
cloudlog . event ( " athena.upload_handler.retry " , status_code = response . status_code , fn = fn , sz = sz , network_type = network_type , metered = metered )