2.6.1 stable を使用しており、S3 互換ストレージ(Scaleway)で実行中です。ログは以下の通りです:
[2021-01-30 09:52:59] アーカイブをアップロード中...
[2021-01-30 09:55:36] 例外:マルチパートアップロードの中止に失敗しました。指定されたマルチパートアップロードが存在しません。アップロード ID が無効か、マルチパートアップロードが既に中止または完了している可能性があります。
[2021-01-30 09:55:36] /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/multipart_file_uploader.rb:94:in `rescue in abort_upload'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/multipart_file_uploader.rb:82:in `abort_upload'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/multipart_file_uploader.rb:78:in `upload_parts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/multipart_file_uploader.rb:51:in `upload'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/file_uploader.rb:38:in `upload'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.83.2/lib/aws-sdk-s3/customizations/object.rb:342:in `upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:39:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:301:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:34:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2021-01-30 09:55:36] 古いバックアップを削除中...
[2021-01-30 09:55:36] 不要なファイルを整理中...
[2021-01-30 09:55:36] ローカルストレージからアーカイブを削除中...
[2021-01-30 09:55:36] '.tar' の残存ファイルを削除中...
[2021-01-30 09:55:36] バックアップを完了としてマーク中...
[2021-01-30 09:55:36] ディスク統計を更新中...
他の数台のサーバーでも同じ構成でバックアップが正常に動作しています(ただし、バックアップサイズが大幅に小さいため、マルチパートアップロードは関係ないと思われます)。Scaleway もマルチパートアップロードをサポートしているようです:Managing multipart uploads | Scaleway Documentation
「いいね!」 1
Freez
(Damien Lecan)
2021 年 2 月 11 日午後 2:23
2
私も同じ現象が起きています。Scaleway S3 でです
最初のバックアップは9日前に失敗しました:
EXCEPTION: multipart upload failed:
Your request was not formed properly;
Your request was not formed properly
その後、1〜2日おきに以下のエラーが発生します:
EXCEPTION: failed to abort multipart upload:
The specified multipart upload does not exist.
The upload ID might be invalid, or
the multipart upload might have been aborted or completed.
@Falco 何が起きているのか理解するために、どのような対応ができるでしょうか?
よろしくお願いいたします。
「いいね!」 1
Falco
(Falco)
2021 年 2 月 11 日午後 2:26
3
これには昨日返信しました。Scaleway に連絡してください。
「いいね!」 2
Freez
(Damien Lecan)
2021 年 2 月 19 日午後 4:33
4
完了しました
ただし、サポートチームからさらに情報が必要です
各パーツに対してレスポンスが返ってくるか、エラーメッセージが表示されるかを確認するために、パーツのリストが必要です。
AWS gem でログ(HTTP リクエストなど)を有効にする方法はありますか?
よろしくお願いいたします。
「いいね!」 1
Falco
(Falco)
2021 年 2 月 19 日午後 5:17
5
今日は彼らの幸運な日です。Discourse はオープンソースなので、何が起きているか正確に確認できます!
バックトレースによると、エラーは以下の箇所で発生しています。
これは以下のファイルです。
end
def delete_file(filename)
obj = s3_helper.object(filename)
if obj.exists?
obj.delete
reset_cache
end
end
def download_file(filename, destination_path, failure_message = nil)
s3_helper.download_file(filename, destination_path, failure_message)
end
def upload_file(filename, source_path, content_type)
obj = s3_helper.object(filename)
raise BackupFileExists.new if obj.exists?
obj.upload_file(source_path, content_type: content_type)
reset_cache
これは SDK のこのメソッドへの呼び出しです。
ドキュメントによると、ファイルが 15MB を超える場合は、デフォルトでマルチパートアップロードが使用されます。
ソースコードを確認すると、このメソッドが使用されているようです。
abort_upload(upload_id, options, errors)
end
end
def abort_upload(upload_id, options, errors)
@client.abort_multipart_upload(bucket: options[:bucket], key: options[:key], upload_id: upload_id)
msg = "multipart upload failed: #{errors.map(&:message).join('; ')}"
raise MultipartUploadError.new(msg, errors)
rescue MultipartUploadError => e
raise e
そして、74 行目でエラーが発生しています。
「いいね!」 6
Freez
(Damien Lecan)
2021 年 3 月 16 日午後 5:35
6
修正なしで再び動作しています:
現在は7/10が成功しています。
「いいね!」 3
Falco
(Falco)
2021 年 3 月 16 日午後 5:50
7
朗報です。事実上の S3 仕様を実装しているおかげで、彼らが側で修正すれば、こちらで変更は不要です。
「いいね!」 3
残念ながら、同じエラーが表示され続けています…
まだ修正が完全に展開されていないだけかもしれませんね。
Freez
(Damien Lecan)
2021 年 3 月 23 日午前 9:20
9
バックアッププロセスが100%成功しました!
この問題は私にとって「解決済み」です。