Skip to content

feat(audit): implement composite record id

Dmitry Ivanov requested to merge funbringer/audit-record-id into master

Summary

  • feat(audit): implement composite record id

    Logically, the record id consists of 3 fields:

    • raft_id -- raft id of the current node (or null if uninitialized);
    • count -- in-memory id which is auto incremented for each new record;
    • gen -- persistent id which is incremented each time node is started.

    However, in practice they are stored inside a global LogicalClock.

    This is what the record looks like now:

    {
      "id": "1.0.3",
      "instance_id": "i1",
      "message": "a new instance `i1` joined the cluster",
      "raft_id": "1",
      "severity": "low",
      "time": "2023-11-29T17:07:36.524+0300",
      "title": "join_instance"
    }

    Note how those fields are concatenated using .; the resulting unique id is represented by a json string type.

    Furthermore, since audit record logger now depends on the raft machine's state, we decided to move its initialization further into the init sequence (postjoin).

Part of #349 (closed)

Ensure that

  • New code is covered by tests (still tbd later)
  • API is documented
  • Changelog is up to date
  • (if Lua API changed) Lua API version is bumped in luamod.rs
  • (if necessary) A follow-up doc issue: docs#134 (closed)
Edited by Yaroslav Dynnikov

Merge request reports