$darkmode
Elektra 0.11.0
Bootstrap

Problem

Currently, the default backend (default.ecf) will also be used for bootstrapping. There are two problems with this approach:

  1. Thus the default backend first will be read with parentKey system:/elektra and later with parentKey system:/, it needs to store absolute paths and thus won't work with most of the plugins (except dump).
  2. When system: is large without mount points, everything is reread twice during bootstrapping.

Constraints

  • Bootstrap should be fast and not unnecessarily read large files

Assumptions

Considered Alternatives

  • Implement a hack so that system:/elektra is actually read as system:/. (Will not solve problem 2.)
    • It's a hack.
    • Its confusing and does not play well with persistent data with relative key names.
  • Split up without compatibility mode: would need to migrate all mount points by exporting (with old version!) and then importing (with new version!)
    • I consider this too error-prone, people might easily forget to export with the old version and then discard their mount points unintentional.

Decision

Split up the concepts of default (default.ecf) and bootstrap (elektra.ecf) backend. During bootstrap only elektra.ecf is read. The default backend reading default.ecf is only relevant as long as no root backend is mounted.

Algorithm:

  1. get system:/elektra using the file elektra.ecf (KDB_DB_INIT)
  2. mount elektra.ecf (the init backend) to system:/elektra

Rationale

Implications

Related Decisions

Notes

Added scripts/upgrade-bootstrap to migrate from previous setups to upgrade to new system, either:

  • touch /etc/kdb/elektra.ecf (loses old mount points)
  • or do kdb export system:/elektra/mountpoints, kdb rm -r system:/elektra/mountpoints, kdb import system:/elektra/mountpoints