LCOV - code coverage report
Current view: top level - flamenco/accdb - fd_accdb_admin.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 15 15 100.0 %
Date: 2026-01-24 04:58:51 Functions: 20 150 13.3 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_flamenco_accdb_fd_accdb_admin_h
       2             : #define HEADER_fd_src_flamenco_accdb_fd_accdb_admin_h
       3             : 
       4             : #include "fd_accdb_base.h"
       5             : #include "../../funk/fd_funk_base.h"
       6             : 
       7             : /* fd_accdb_admin_vt_t specifies the interface (vtable) for the account
       8             :    DB admin. */
       9             : 
      10             : struct fd_accdb_admin_vt {
      11             : 
      12             :   void
      13             :   (* fini)( fd_accdb_admin_t * accdb );
      14             : 
      15             :   fd_funk_txn_xid_t
      16             :   (* root_get)( fd_accdb_admin_t const * admin );
      17             : 
      18             :   void
      19             :   (* attach_child)( fd_accdb_admin_t *        admin,
      20             :                     fd_funk_txn_xid_t const * xid_parent,
      21             :                     fd_funk_txn_xid_t const * xid_new );
      22             : 
      23             :   void
      24             :   (* advance_root)( fd_accdb_admin_t *        admin,
      25             :                     fd_funk_txn_xid_t const * xid );
      26             : 
      27             :   void
      28             :   (* cancel)( fd_accdb_admin_t *        admin,
      29             :               fd_funk_txn_xid_t const * xid );
      30             : 
      31             : };
      32             : 
      33             : typedef struct fd_accdb_admin_vt fd_accdb_admin_vt_t;
      34             : 
      35             : struct fd_accdb_admin_base {
      36             :   fd_accdb_admin_vt_t const * vt;
      37             :   uint                        accdb_type;
      38             : 
      39             :   ulong rw_active;
      40             :   ulong ro_active;
      41             :   ulong created_cnt;
      42             :   ulong root_cnt;     /* moved to database root */
      43             :   ulong reclaim_cnt;  /* 0 lamport account removed while rooting */
      44             :   ulong gc_root_cnt;  /* stale rooted revisions removed while rooting */
      45             :   ulong revert_cnt;   /* abandoned by consensus */
      46             : };
      47             : 
      48             : typedef struct fd_accdb_admin_base fd_accdb_admin_base_t;
      49             : 
      50             : struct fd_accdb_admin {
      51             :   fd_accdb_admin_base_t base;
      52             : 
      53             :   uchar impl[ 4096 ] __attribute__((aligned(64)));
      54             : };
      55             : 
      56             : FD_PROTOTYPES_BEGIN
      57             : 
      58             : static inline void
      59          66 : fd_accdb_admin_fini( fd_accdb_admin_t * accdb ) {
      60          66 :   accdb->base.vt->fini( accdb );
      61          66 : }
      62             : 
      63             : /* Transaction-level operations ***************************************/
      64             : 
      65             : static inline fd_funk_txn_xid_t
      66          24 : fd_accdb_root_get( fd_accdb_admin_t const * admin ) {
      67          24 :   return admin->base.vt->root_get( admin );
      68          24 : }
      69             : 
      70             : /* FIXME rename these to?
      71             :          - fd_accdb_fork_create
      72             :          - fd_accdb_fork_freeze
      73             :          - fd_accdb_fork_commit_root
      74             :          - fd_accdb_fork_cancel */
      75             : 
      76             : /* fd_accdb_attach_child creates a new account database fork node off a
      77             :    frozen parent or the root.
      78             : 
      79             :    It is assumed that less than txn_max non-root transaction exist when
      80             :    this is called. */
      81             : 
      82             : static inline void
      83             : fd_accdb_attach_child( fd_accdb_admin_t *        admin,
      84             :                        fd_funk_txn_xid_t const * xid_parent,
      85      571872 :                        fd_funk_txn_xid_t const * xid_new ) {
      86      571872 :   admin->base.vt->attach_child( admin, xid_parent, xid_new );
      87      571872 : }
      88             : 
      89             : /* fd_accdb_advance_root merges the given fork node into the database
      90             :    root. */
      91             : 
      92             : static inline void
      93             : fd_accdb_advance_root( fd_accdb_admin_t *        admin,
      94      224742 :                        fd_funk_txn_xid_t const * xid ) {
      95      224742 :   admin->base.vt->advance_root( admin, xid );
      96      224742 : }
      97             : 
      98             : /* fd_accdb_cancel removes a fork node by XID and its children
      99             :    (recursively). */
     100             : 
     101             : static inline void
     102             : fd_accdb_cancel( fd_accdb_admin_t *        admin,
     103          51 :                  fd_funk_txn_xid_t const * xid ) {
     104          51 :   admin->base.vt->cancel( admin, xid );
     105          51 : }
     106             : 
     107             : FD_PROTOTYPES_END
     108             : 
     109             : #endif /* HEADER_fd_src_flamenco_accdb_fd_accdb_admin_h */

Generated by: LCOV version 1.14