125 Star 882 Fork 312

GVP朱天龙 (Armink) / FlashDB

 / 详情

kvdb写到最后一个扇区时会出现一次写入失败,但后续又能继续写入!

待办的
创建于  
2021-05-26 12:59

测试环境是使用NORFLASH,循环从0-1000写1000条数据,写到630时爆发一次失败,但631后面又成功。
下面是运行日志,写入第629条数据时,返回成功,写入第630条数据时,返回失败。写入第631条数据时,返回又成功了!

[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:1150) Trigger a GC check after created KV.
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:1046) The remain empty sector is 1, GC threshold is 1.
[11:12:37][ACL]write ok: 00000629
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:840) Trigger a GC check after alloc KV failed.
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:977) Warning: Alloc an KV (size 96) failed when new KV. Now will GC then retry.
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:1046) The remain empty sector is 1, GC threshold is 1.
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:840) Trigger a GC check after alloc KV failed.
[11:12:37][ACL]write failed: 00000630, ret=7
[FlashDB][kv][128KB] (Sources\lib\FlashDB\src\fdb_kvdb.c:1046) The remain empty sector is 0, GC threshold is 1.
[11:12:37][ACL]write ok: 00000631

评论 (7)

jiangxiaogang 创建了任务
jiangxiaogang 关联仓库设置为armink/FlashDB
展开全部操作日志

在上面的操作结束后,调用fdb_kv_print()打印kvdb的状态,发现最后一行可疑日志:

mode: next generation
size: 64790/61440 bytes.

其中size: 64790大于61440,怀疑是否是后续的写入已经越界了?

并且我把kvdb里已有的数据,调用fdb_kv_del()全部删除后,无法再次调用fdb_kv_set_blob()写入数据,返回7(FDB_SAVED_FULL)。

上面那个 size 打印确实不正常

有没有用 demo 里的示例工程去测试

demo示例只添加1条数据,没有问题

重新擦除flash之后再从新测试,还会复现在630写入失败的问题吗?多测试几次都能复现一样的错误,说明软件哪里有BUG

如果有条件允许,在线DEBUG一下628到631这期间的各个变量是否异常,找出问题点

麻烦问一下,这个问题解决了吗

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
846583 kerndev 1578933740 9021 armink 1578914611
C
1
https://gitee.com/Armink/FlashDB.git
git@gitee.com:Armink/FlashDB.git
Armink
FlashDB
FlashDB

搜索帮助