FlashDB icon indicating copy to clipboard operation
FlashDB copied to clipboard

tsdb 写数据的时候突然重启设备,重启后设备 db->last_time 变成0开始

Open shun-dgut opened this issue 1 year ago • 10 comments

shun-dgut avatar Jul 02 '24 08:07 shun-dgut

[FlashDB][kv][ate_db][ate_db] (packages\FlashDB-v1.1.2\src\fdb_kvdb.c:1801) KVDB size is 24576 bytes. [FlashDB][tsl][record_db][record_db] (packages\FlashDB-v1.1.2\src\fdb_tsdb.c:981) TSDB (record_db) oldest sectors is 0x00000000, current using sector is 0x0001F000. db->last_time 0

shun-dgut avatar Jul 02 '24 09:07 shun-dgut

一个线程使用fdb_tsl_append间隔10ms不断写入数据,在 tsl_append 里面打印 db->last_time 的值,这个时候使用reboot命令重启设备,上电打印 db->last_time 值,会出现 db->last_time 变化为0的情况。 大概是四次五次使用reboot后就出现。

shun-dgut avatar Jul 03 '24 06:07 shun-dgut

有没有用最新版本测试过呢?

最新版本是 v2.1.0 我看你的是 v1.1.2

armink avatar Jul 03 '24 08:07 armink

有没有用最新版本测试过呢?

最新版本是 v2.1.0 我看你的是 v1.1.2

使用的最新版本测试的,文件夹名字没有更改

shun-dgut avatar Jul 03 '24 08:07 shun-dgut

那你先试着单步调试,分析一下获取 last_time 的逻辑?

armink avatar Jul 03 '24 08:07 armink

那你先试着单步调试,分析一下获取 last_time 的逻辑?

应该是write_tsl如果在执行这个函数的时候,触发了重启,会导致 last_time 变为0

shun-dgut avatar Jul 03 '24 09:07 shun-dgut

image

这里看着是有做掉电保护的,你分析下,为何 last_time 变成 0 了?

armink avatar Jul 03 '24 09:07 armink

image

这里看着是有做掉电保护的,你分析下,为何 last_time 变成 0 了?

fdb_tsdb_init 这一块的逻辑有一些文档说明吗,有没有可能是这一块的逻辑有问题

shun-dgut avatar Jul 03 '24 09:07 shun-dgut

image image image image

我发现重启前db->cur_sec.addr的地址也是没有问题的,但是重启后,db->cur_sec.end_time 就是0值了

shun-dgut avatar Jul 15 '24 06:07 shun-dgut

@armink 朱工,你看一下是不是这里导致的,我提交了一个pr https://github.com/armink/FlashDB/pull/302

shun-dgut avatar Jul 15 '24 08:07 shun-dgut