Skip to content

Conversation

@KirCute
Copy link
Member

@KirCute KirCute commented Dec 7, 2025

Description / 描述

较大程度上重构了alias处理冲突路径的方式,删除了原配置项“保护同名”“可写”和“并行写入”,新增了“冲突路径读取策略”“冲突路径修改策略”和“冲突路径上传策略”三个选项用于替换原功能,其有效值如下:

  • 冲突路径读取策略:
    • first:修改前alias读取文件的唯一方式,将首个有效路径直接返回。
    • random:随机选择一个有效路径返回。
    • all:302和复制、移动、解压时,降级为random,本地代理时,每个传输分片读取随机一个有效路径的链接。
  • 冲突路径修改策略(影响MakeDirRenameRemove):
    • disabled:禁止此类操作,原关闭“可写”
    • first:假设用户能够保证路径不冲突,直接对第一个有效路径进行操作,原关闭“保护同名”,不推荐,唯一优点是请求少,比较快
    • deterministic:仅支持对不冲突路径执行此类操作,原打开“保护同名”
    • deterministic_or_all:仅支持对不冲突路径和全冲突路径执行此类操作,原打开“保护同名”和“并行写入”
    • all:对所有冲突路径执行操作,忽略非冲突路径,原打开“并行写入”
    • all_strict:仅支持对全冲突路径执行此类操作
  • 冲突路径上传策略(影响PutPutURLCopyMoveArchiveDecompress):
    • disabled, first, deterministic, deterministic_or_all, all, all_strict:含义与修改策略相同
    • random:随机负载均衡,随机选择一个有效路径用于上传
    • quota:按剩余空间加权负载均衡,上传前获取后端驱动剩余空间,剩余空间越大被选定为上传路径的概率越大,剩余空间不足以上传文件和获取剩余空间失败的冲突路径会被忽略,如果所有成功获取剩余空间的冲突路径都没有足够的空间上传文件,会在获取剩余空间失败的冲突路径(不含获取成功但容量不足)中随机选择一个
    • quota_strict:将quota的加粗字体改为会直接返回上传失败
    • CopyMoveArchiveDecompress操作会首先根据上传策略选择目标路径,然后对每个目标路径,判断源路径的所有冲突路径中有没有与目标冲突路径位于同一个驱动中的。如果有,会将二者匹配,执行相应操作。如果某个目标冲突路径没有找到与之匹配的源路径,会根据读取策略选择一个源路径进行跨驱动传输。

还没写完,剩余工作:

  • 删除op层基于挂载路径实现的负载均衡功能,该功能不支持合并显示每个驱动中的内容,且实现方式与其它模块尤其是几个中间件驱动适配性较差。

写完了,没删那个挂载路径里加.balance进行负载均衡的功能,感觉适用场景和这个有点区别,优化了aliasstrm和缓存模块对这个功能的支持。

Motivation and Context / 背景

How Has This Been Tested? / 测试

粗浅测了一下,感觉没什么问题,测试充分程度不及这个 PR 的修改程度,最好再测一测。

没测负载均衡的两个文件内容不同的情况,这个 PR 也不打算兼容这种情况,当做未定义行为了

Checklist / 检查清单

  • I have read the CONTRIBUTING document.
    我已阅读 CONTRIBUTING 文档。
  • I have formatted my code with go fmt or prettier.
    我已使用 go fmtprettier 格式化提交的代码。
  • I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
    我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
  • I have requested review from relevant code authors using the "Request review" feature when applicable.
    我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
  • I have updated the repository accordingly (If it’s needed).
    我已相应更新了相关仓库(若适用)。

@KirCute KirCute marked this pull request as draft December 7, 2025 11:46
@KirCute KirCute marked this pull request as ready for review December 8, 2025 09:36
@hhsw2015
Copy link

这个逻辑上有点复杂 能不能完善下文档 如何使用 使用情景案例 和 那个原来的负载均衡驱动不同在哪里

@KirCute
Copy link
Member Author

KirCute commented Dec 12, 2025

这个逻辑上有点复杂 能不能完善下文档 如何使用 使用情景案例 和 那个原来的负载均衡驱动不同在哪里

最近有点忙,之后会重写alias的文档

@j2rong4cn
Copy link
Member

完事

@KirCute
Copy link
Member Author

KirCute commented Dec 18, 2025

经测试,deterministic_or_allall_strict的行为疑似不正确,均表现为all的行为

@KirCute KirCute marked this pull request as draft December 18, 2025 12:26
@KirCute KirCute marked this pull request as ready for review December 20, 2025 06:49
@KirCute KirCute requested a review from j2rong4cn December 21, 2025 11:36
@hhsw2015
Copy link

hhsw2015 commented Dec 27, 2025

读取冲突策略 选项中没有看到 按分片负载均衡 选项
只有

first
random
all (没有文档解释)

写入冲突策略 有一个

all strict

也没有文档解释

@KirCute
Copy link
Member Author

KirCute commented Dec 27, 2025

读取冲突策略 选项中没有看到 按分片负载均衡 选项
只有

first
random
all (没有文档解释)

写入冲突策略 有一个

all strict

也没有文档解释

没合呢,急什么

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants