Skip to content

Versioning Tendermint Backup #1815

Closed
@majecty

Description

@majecty

Why we need versioning

We are using DB without versioning. If we change the structure of the saved data, we should migrate the old data with the new data format. We need a version number to check the data's structure.

Current database structure

There are six columns in our Database.

  1. COL_STATE: saves state
  2. COL_HEADERS: saves headers
  3. COL_BODIES: saves bodies
  4. COL_EXTRA: saves best block number, best proposal block number, tendermint backup, ...
  5. COL_MEMPOOL: saves mempool items
  6. COL_ERROR_HINT: saves error hint

Save the version number

I propose a versioning scheme. The scheme is saving the version as an integer in some key. For the Tendermint backup, save the data version number in the "tendermint-backup-version" key in the COL_EXTRA column. For the mempool backup, save the version in the "mempool-backup-version" key in the COL_MEMPOOL column.

Migration

We should implement migration code from version x to version x + 1. When CodeChain starts, it should check the save data's version. If the version is lower than the current version, it should run the migration code.

Pseudocode


function restore() {
  let version = get_saved_version();
  while version < current_version {
    migrate_db(from: version, to: version + 1)
    let version = get_saved_version();
  }

  //restore logic
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions