Coder Social home page Coder Social logo

关于env 增量升级的逻辑 about flashdb HOT 4 CLOSED

armink avatar armink commented on July 26, 2024
关于env 增量升级的逻辑

from flashdb.

Comments (4)

armink avatar armink commented on July 26, 2024

没有太看明白你的意思,可以举一下具体的例子吗?两次升级前后 默认 kv 的差异

from flashdb.

ZakiLiu avatar ZakiLiu commented on July 26, 2024

比如:

struct system_info{
    uint32_t                boot_count;
    uint32_t                error_count;
};

struct base_info{
    char    name[10];
    uint32_t  version;
};

static struct system_info  sys_init_info =
{
    .boot_count = 0u,
    .error_count = 0u,
};

tatic struct base_info  base_init_info =
{
    .name = "abc",
    .version = 1,
}

#define KVDB_VERSION    ( 0u )

static struct fdb_default_kv_node system_kv_table[] = {
    {"sys_info", &sys_init_info, sizeof(struct system_info)},
    {"base_info", &base_init_info, sizeof(struct base_info)}
};

以上是原始结构体,编译后下载,随后第一种情况是,修改struct system_info结构体,改为如下:

struct system_info{
    uint32_t                boot_count;
    uint32_t                error_count;
    uint8_t                  test_count;
};

static struct system_info  sys_init_info =
{
    .boot_count = 0u,
    .error_count = 0u,
    .test_count  = 1u,
};

#define KVDB_VERSION    ( 1u )

修改以上内容,重新下载,我发现读取base_info的name出错了,是不是不能这样做?

第二种情况是,在原来结构体的基础上增加一个结构体:

struct test{
    uint8_t                  test_count;
};

static struct test  test =
{
    .test_count  = 1u,
};

#define KVDB_VERSION    ( 1u )

static struct fdb_default_kv_node system_kv_table[] = {
    {"sys_info", &sys_init_info, sizeof(struct system_info)},
    {"base_info", &base_init_info, sizeof(struct base_info)},
    {"test", &test, sizeof(struct test)}
};

是不是需要这样做才能增量升级成功,保证数据不错位?

from flashdb.

armink avatar armink commented on July 26, 2024

自动升级没法做到 value 的内容格式发生变化进行升级,主要是 kv 的默认集合发生变化时,自动增加新的 kv

你这种情况,建议:

  • 考虑增加新的 kv
  • 设计时留有一定的余量
  • 开机检查 system_info 实际存储与固件中 value 大小是否相同,不相同进行手动更新

你觉得这样可以吗

from flashdb.

ZakiLiu avatar ZakiLiu commented on July 26, 2024

可以,朱总,有实现方法就可以。

  • 增加新的kv就是我说的第二种方法吧
  • 设计留余量,这个目前我的个人能力不足
  • 开机检查这个可以,实现比较容易,我先用这个方法

谢谢!

from flashdb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.