fix(server/webdav): improve error handling for PROPFIND #2066
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description / 描述
让
PROPFIND遇到文件系统错误时返回错误,避免返回空文件夹。Motivation and Context / 背景
在文件同步场景下,报错返回空文件夹是极其危险的,轻则导致反复上传,浪费流量,严重情况下会出现数据误删
golang.org/x/net/webdav返回的是http.StatusMethodNotAllowed(405)https://cs.opensource.google/go/x/net/+/refs/tags/v0.49.0:webdav/webdav.go
How Has This Been Tested? / 测试
修改前,使用 rclone 同步时,如果源存储出错,会返回空文件夹,被 rclone 判断为目标文件不存在,导致反复上传,修改后能够被正确视为错误并在程序内部自动进行指数退避处理
TODO:
需要确定:
是否影响 HTTP 207 Multi-Status是否会影响其它客户端
已知问题:返回空文件夹在部分软件中不会报错,返回错误会弹窗,但个人认为错误弹窗是正确的表现
错误代码返回 500 还是 405
对齐
golang.org/x/net/webdav的 handlePropfindErrorChecklist / 检查清单
我已阅读 CONTRIBUTING 文档。
go fmtor prettier.我已使用
go fmt或 prettier 格式化提交的代码。我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
我已相应更新了相关仓库(若适用)。