binux/lixian.xunlei

某些情况下获取任务列表可能会漏

cunhan opened this issue · 3 comments

最近我在本机上跑这个项目,发现列表出来的任务不全。
阅读代码后发现,在get_task_list的时候,按“创建时间小于搜索起始任务的创建时间,并且id小于搜索起始任务的id”的逻辑进行。
但是我的迅雷帐号里面,不是所有任务都按创建时间和任务id绝对递减的。

例如下图,某一次getnext的时候,最后取到了“43221227582 - Shinning Heart”这个任务。
下一次getnext就会以这个任务为起始查询,这次的查询中,图内圆圈部分的任务id大于43221227582 ,因此全被剔除,显示不到主页上。

pic

应该不是这个问题,我的查询语句是
SELECT * FROM task WHERE create_time < create_time_of_start_task_id ORDER BY create_time, id DESC.

列表是按照create_time排序的,start_task_id是列表中的最后一条,也就是说,总是能取出最老的一条的id
start_task_id只是用于取出当前的create_time到哪了,这么设计是为了order可以随意变化,当实际查询的时候会将id转换回order的字段

你用的是SQLite吗?出现这个问题的原因我觉得SQLite对多线程之间数据同步的问题

不过,db_task_manager的get_task_list里面有这样一句:query = query.filter(db.Task.id < start_task_id) 呢
这不是在查询语句里加入了一个条件 id < start_task_id么?

PS:是用的SQLite

这么说来确实会呢。。