正在运行 2.6.1 稳定版,使用 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] 正在刷新磁盘统计信息...
我在其他几台服务器上拥有相同的配置,备份运行正常(尽管备份大小明显更小,因此分片上传可能不是影响因素)。看起来它们也支持分片上传:Managing multipart uploads | Scaleway Documentation
Freez
(Damien Lecan)
2021 年2 月 11 日 14:23
2
我也遇到同样的问题,使用 Scaleway S3 时也是如此:frowning:
我的首次备份在 9 天前失败:
EXCEPTION: multipart upload failed:
Your request was not formed properly;
Your request was not formed properly
之后,每隔一两天就会出现:
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 我们该怎么做才能弄清楚问题出在哪里?
谢谢
Freez
(Damien Lecan)
2021 年2 月 19 日 16:33
4
完成
但他们的支持团队需要更多信息:slight_smile:
他们需要一份部件清单,以便查看每个部件是收到响应还是错误消息。
在 AWS SDK 中是否有启用日志记录(如 HTTP 请求)的方法?
谢谢
Falco
(Falco)
2021 年2 月 19 日 17: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 时,默认将使用分块上传(MultiPart upload)。
查看源代码,似乎使用的是此方法:
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 行出现了错误。
Freez
(Damien Lecan)
2021 年3 月 16 日 17:35
6
又恢复正常了,而且没有任何改动:
现在有 7/10 成功了。
Falco
(Falco)
2021 年3 月 16 日 17:50
7
好消息。针对事实上的 S3 规范进行实现的好处是,他们会在其端进行修复,我们无需进行任何更改。
不幸的是,它仍然给我同样的错误:
希望他们还没有完全推出修复。
Freez
(Damien Lecan)
2021 年3 月 23 日 09:20
9
备份进程现已 100% 成功!
该问题对我而言已“关闭”。