lingochamp / okdownload

A Reliable, Flexible, Fast and Powerful download engine.
Apache License 2.0
5.13k stars 767 forks source link

The current offset on block-info isn't update correct, 104466100 != 106391228 on 3 #495

Open huanghaoda8 opened 1 year ago

huanghaoda8 commented 1 year ago

OkDownload Version

v1.0.7 新版本,从阿里云存储服务器下载文件,采用多块下载必现的以下问题,导致onTaskEnd要么不回调,要么回调error,重下依旧失败; The current offset on block-info isn't update correct, 104466100 != 106391228 on 3

采取单线程下载就不会出现该问题,请问这个问题有解决方案吗,网上重写MultiPointOutputStream.java的close()方法不能解决问题,由于下载文件较大,需要采用多块下载。

DerrickChanJL commented 1 year ago

同问

hellowwwwp commented 1 year ago

同问

alanqjt commented 1 year ago

同问

tianshaokai commented 1 year ago

@huanghaoda8 你那边报错是必现吗,我最近一直在找必现的case,如果这个问题比较急,可以交流一下

huanghaoda8 commented 1 year ago

@huanghaoda8 你那边报错是必现吗,我最近一直在找必现的case,如果这个问题比较急,可以交流一下

多块下载时必现,现在改成单链接下载,就不再出现了。根据log,包头返回的块范围值、总长度值没有问题,实际下载到流结束时,就必现的获取到的数据流长度与块长度不一致,不能确定是不是服务器问题;以下是可验证的下载链接: https://obsbot-static-resource.oss-accelerate.aliyuncs.com/product_system_back/firmware_test/update1-0-1.zip

tianshaokai commented 1 year ago

@huanghaoda8 谢谢,我明天抽时间校验一下,你测试的是android 多少版本,什么型号手机,不同型号都必现吗

tianshaokai commented 1 year ago

@huanghaoda8 https://github.com/tianshaokai/okdownload 你可以在这个代码里,修改单次下载 改为你上边的链接试一下,我测试了两遍目前没有发现问题,如果有问题可以随时通过邮箱联系我(businesskai@163.com)

zhongxingqiang commented 1 year ago

@tianshaokai 修改是不是增加了同步锁。 在android10中以前我增加了这段代码 synchronized (noSyncLengthMap) { // make sure the length of noSyncLengthMap is equal to outputStreamMap outputStreamMap.remove(blockIndex); noSyncLengthMap.remove(blockIndex); 但还是偶尔会出现这个错误,概率比较低。我再把这个同步锁加上看看会不会复现此问题

tianshaokai commented 1 year ago

@zhongxingqiang 就算增加了你说的这个同步锁,依然偶现问题

zhongxingqiang commented 1 year ago

@tianshaokai 在done方法增加同步锁后 让一个任务反复下载,测试了半小时没有出现。 在inspectComplete中如果出现此问题我修改为不抛异常 这样可以继续完成任务 不知道有其他大的影响不

tianshaokai commented 1 year ago

@zhongxingqiang 你这样改就是吞了异常,出了问题无法获取到原因,如果到了线上就变成了线上事故

zhongxingqiang commented 1 year ago

@tianshaokai 那我就在taskEnd回调中 如果出现这个异常就再次下载 可以么 你是怎么测试复现的 我又跑了半个小时还没复现

tianshaokai commented 1 year ago

@zhongxingqiang 你可以按照自己理解的改,发布到线上,每天那么大的日活量帮你测试一下,看看有什么问题,多线程问题本地是不好复现的

zhongxingqiang commented 1 year ago

@tianshaokai 好的 感谢