armink / FlashDB

An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库
Apache License 2.0
1.84k stars 426 forks source link

TSDB 当前sector存储满,擦除下个sector前之间复位设备,所有sector都会是FDB_SECTOR_STORE_FULL #207

Open Wiz0911 opened 1 year ago

Wiz0911 commented 1 year ago

初始化函数没有对这种情况做处理呢,初始化完db->cur_sec.addr值还是FDB_DATA_UNUSED

tsdb存储满一轮后,在fdb_tsdb.c 308 - 326行之间复位

   sector->status = FDB_SECTOR_STORE_FULL;
    /* calculate next sector address */
    if (sector->addr + db_sec_size(db) < db_max_size(db)) {
        new_sec_addr = sector->addr + db_sec_size(db);
    }
    else if (db->rollover) {
        new_sec_addr = 0;
    } else {
        /* not rollover */
        return FDB_SAVED_FULL;
    }
    read_sector_info(db, new_sec_addr, &db->cur_sec, false);
    if (sector->status != FDB_SECTOR_STORE_EMPTY) {
        /* calculate the oldest sector address */
        if (new_sec_addr + db_sec_size(db) < db_max_size(db)) {
            db->oldest_addr = new_sec_addr + db_sec_size(db);
        } else {
            db->oldest_addr = 0;
        }
        format_sector(db, new_sec_addr);
        read_sector_info(db, new_sec_addr, &db->cur_sec, false);
WangN2000 commented 6 months ago

初始化函数没有对这种情况做处理呢,初始化完db->cur_sec.addr值还是FDB_DATA_UNUSED

tsdb存储满一轮后,在fdb_tsdb.c 308 - 326行之间复位

   sector->status = FDB_SECTOR_STORE_FULL;
    /* calculate next sector address */
    if (sector->addr + db_sec_size(db) < db_max_size(db)) {
        new_sec_addr = sector->addr + db_sec_size(db);
    }
    else if (db->rollover) {
        new_sec_addr = 0;
    } else {
        /* not rollover */
        return FDB_SAVED_FULL;
    }
    read_sector_info(db, new_sec_addr, &db->cur_sec, false);
    if (sector->status != FDB_SECTOR_STORE_EMPTY) {
        /* calculate the oldest sector address */
        if (new_sec_addr + db_sec_size(db) < db_max_size(db)) {
            db->oldest_addr = new_sec_addr + db_sec_size(db);
        } else {
            db->oldest_addr = 0;
        }
        format_sector(db, new_sec_addr);
        read_sector_info(db, new_sec_addr, &db->cur_sec, false);

我也遇到了,请问有没有解决分享一下