Код: Выделить всё
botocore.exceptions.ClientError: An error occurred (InvalidArgument) when calling the UploadPart operation: Part number must be an integer between 1 and 10000, inclusive.
Код: Выделить всё
from boto3.s3.transfer import TransferConfig
def upload_encrypted_dbdump(self, ciphertext_stream):
s3 = self.s3_session_client()
prev_total_size = 77309411328 # Previous file size, around 77 GB
# Amazon S3's maximum number of parts for multipart upload
max_parts = 10000
# Calculate the new size with a 10% increase
adjusted_size = int(prev_total_size * 1.1)
# Calculate the part size with rounding up
part_size = (adjusted_size + max_parts - 1) // max_parts
print(f"Calculated part size: {part_size} bytes")
s3_response = s3.upload_fileobj(
Fileobj=ciphertext_stream,
Bucket=self.s3_bucket,
Key=f'{self.s3_folder}/{self.s3_dbdump_name}',
ExtraArgs={'ACL': 'bucket-owner-full-control'},
Config=TransferConfig(multipart_chunksize=part_size)
)
Я рассчитал размер части динамически на основе размера предыдущей резервной копии, увеличив его на 10%.
Пример: если предыдущий размер составляет 77 ГБ, я рассчитываю новый размер как корректированный_размер = int(77309411328 * 1,1) → 85040352460 байт.
Затем я делю этот размер на max_parts = 10000, чтобы вычислить размер детали.
part_size = (adjusted_size + max_parts - 1) // max_parts
В этом примере вычисляется как part_size = 85040352460/10000 ≈ 8504036 байт.
Когда я запускаю кода, я сталкиваюсь с ошибкой «Номер детали должен быть целым числом от 1 до 10000 включительно».
Что я заметил:
Когда я вручную установил max_parts на 1000, все работало нормально, но когда я изменил его на 10 000 или даже 9 000, я получил ту же ошибку.
Я тоже пробовал math.ceil(adjusted_size / max_parts) для расчета размера детали, но проблема остается.
Вопросы:
Почему получаю ли я ошибку «Номер детали должен быть целым числом от 1 до 10000», когда рассчитанный размер part_size кажется действительным?
Будем благодарны за любую помощь! Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... error-in-s