@@ -323,7 +323,17 @@ def list_objects(self, path: str) -> List[str]:
323323 stop = tenacity .stop_after_attempt (max_attempt_number = 10 ),
324324 reraise = True ,
325325 after = tenacity .after_log (logger , INFO ))
326- def _head_object_with_retry (client_s3 : client , bucket : str , key : str ) -> Dict [str , Any ]:
326+ def head_object_with_retry (client_s3 : client , bucket : str , key : str ) -> Dict [str , Any ]:
327+ """
328+ Executes the Boto3 head_object() function with an extra layer of random exponential back-off.
329+
330+ https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.head_object
331+
332+ :param client_s3: Boto3 S3 client
333+ :param bucket: Bucket name.
334+ :param key: Key
335+ :return: Boto3 head_object() regular response dictionary
336+ """
327337 return client_s3 .head_object (Bucket = bucket , Key = key )
328338
329339 @staticmethod
@@ -336,7 +346,7 @@ def _get_objects_head_remote(send_pipe, session_primitives: "SessionPrimitives",
336346 logger .debug (f"len(objects_paths): { len (objects_paths )} " )
337347 for object_path in objects_paths :
338348 bucket , key = object_path .replace ("s3://" , "" ).split ("/" , 1 )
339- res = S3 ._head_object_with_retry (client_s3 = client_s3 , bucket = bucket , key = key )
349+ res = S3 .head_object_with_retry (client_s3 = client_s3 , bucket = bucket , key = key )
340350 size = res ["ContentLength" ]
341351 objects_sizes [object_path ] = size
342352 logger .debug (f"len(objects_sizes): { len (objects_sizes )} " )
0 commit comments