Repository navigation
v0.2.2:大文件断了能接着传,报表数字不再算错
大文件传到一半断了,现在不用从第一片重来。另外修好了几处会把数字算错的地方。
新增
- 大文件可以接着传。16MB 以上的文件切成 8MB 一片慢慢发,传过的记在本地。网络断了、程序退出了,下次跑同一个任务会接着上次的会话传。能省多少要看是怎么断的:只是网断、程序还在跑,会当场记下进度,下次真能接着传;程序被强杀或者容器重启,只认每 256MB 记一次的那个点,所以 256MB 以下的文件实际上还是整个重传一遍,会话能接着用,分片从第一片重新开始。
- 自动化测试从 0 加到 35 个,跑在 CI 里。以前只有编译检查和语法检查,改一次上传逻辑只能上真机试。现在切片数对不对、排除规则生不生效、路径能不能越界、空文件算不算、过期的会话会不会清、复核结果准不准,都有测试看着。
修好的问题
- 推送后复核哈希,比错了对象。以前拿这次要推的全部文件去跟云端比,没传成功的也拉进来比,于是冒出「内容哈希不符」这种假错误,复核数还偏大。现在只比真正传上去的。
- 哈希复核没有大小上限。注释里写着超过 64MB 不比内容,代码里其实没做,大文件会整个读出来算哈希。现在按 64MB 卡住,跟目录同步那边一个标准。
- 核对云端文件时,只有推送这条没把大小写统一。目录同步和孤儿扫描早就转成小写再比了,推送还在用原始文件名。云端返回的名字和本地写法不一样时,就会报「云端未找到」,整轮判失败。现在三处一样。
- 目录同步的数字会算两遍。一个文件传成功了、但复核没过,它同时被算进成功和失败,两个数加起来比实际文件还多。现在从成功里扣掉。
升级前看一眼
- 可以直接覆盖升级。数据库会自己加一张表存上传进度,原来的任务、运行记录、令牌都不动。
- 不想用这个功能,把 TP_RESUME 设成 0 就退回整文件上传。阈值也能调,环境变量 TP_RESUME_MIN_SIZE,默认 16MB。
- 报表数字会变。之前那些「哈希不符」的假错误不会再出现。「成功 + 失败」可能不再等于文件总数,因为复核没过的只算失败一次,这是修好了,不是出新毛病。
- 大小写这一处,在日常使用里碰不到。联通云盘原样保留文件名大小写,正常传上去什么名字、读回来还是什么名字,所以这条只有测试能证明,真机上证明的是没把它搞坏。同样只有测试能证明的还有另外两处。
这一版在真实部署上跑过:120MB 传一半把容器停掉,重启后接着上次的会话传,传完下载回来和本地哈希一致;12MB 的下载回来哈希也一致;一条真实推送任务跑通;冒烟全过。