Почему при многочастной загрузке S3 я получаю сообщение об ошибке «Номер детали должен быть целым числом от 1 до 10 000»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему при многочастной загрузке S3 я получаю сообщение об ошибке «Номер детали должен быть целым числом от 1 до 10 000»

Сообщение Anonymous »

Я работаю над загрузкой большого дампа базы данных (около 85 ГБ) в корзину Amazon S3 с помощью многочастной загрузки через boto3. Однако я продолжаю сталкиваться с этой ошибкой:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»