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-02-14 05:50:46 Functions: 29 175 16.6 %

          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 root_tot_sz;  /* number of bytes moved while rooting */
      44             :   ulong reclaim_cnt;  /* 0 lamport account removed while rooting */
      45             :   ulong gc_root_cnt;  /* stale rooted revisions removed while rooting */
      46             :   ulong revert_cnt;   /* abandoned by consensus */
      47             : 
      48             :   /* cumulative tickcount spent on various admin operations */
      49             :   long dt_vinyl;  /* waiting on vinyl completinos */
      50             :   long dt_copy;   /* copying account data */
      51             :   long dt_gc;     /* garbage collecting data */
      52             : };
      53             : 
      54             : typedef struct fd_accdb_admin_base fd_accdb_admin_base_t;
      55             : 
      56             : struct fd_accdb_admin {
      57             :   fd_accdb_admin_base_t base;
      58             : 
      59             :   uchar impl[ 4096 ] __attribute__((aligned(64)));
      60             : };
      61             : 
      62             : FD_PROTOTYPES_BEGIN
      63             : 
      64             : static inline void
      65         105 : fd_accdb_admin_fini( fd_accdb_admin_t * accdb ) {
      66         105 :   accdb->base.vt->fini( accdb );
      67         105 : }
      68             : 
      69             : /* Transaction-level operations ***************************************/
      70             : 
      71             : static inline fd_funk_txn_xid_t
      72          24 : fd_accdb_root_get( fd_accdb_admin_t const * admin ) {
      73          24 :   return admin->base.vt->root_get( admin );
      74          24 : }
      75             : 
      76             : /* FIXME rename these to?
      77             :          - fd_accdb_fork_create
      78             :          - fd_accdb_fork_freeze
      79             :          - fd_accdb_fork_commit_root
      80             :          - fd_accdb_fork_cancel */
      81             : 
      82             : /* fd_accdb_attach_child creates a new account database fork node off a
      83             :    frozen parent or the root.
      84             : 
      85             :    It is assumed that less than txn_max non-root transaction exist when
      86             :    this is called. */
      87             : 
      88             : static inline void
      89             : fd_accdb_attach_child( fd_accdb_admin_t *        admin,
      90             :                        fd_funk_txn_xid_t const * xid_parent,
      91      571944 :                        fd_funk_txn_xid_t const * xid_new ) {
      92      571944 :   admin->base.vt->attach_child( admin, xid_parent, xid_new );
      93      571944 : }
      94             : 
      95             : /* fd_accdb_advance_root merges the given fork node into the database
      96             :    root. */
      97             : 
      98             : static inline void
      99             : fd_accdb_advance_root( fd_accdb_admin_t *        admin,
     100      224742 :                        fd_funk_txn_xid_t const * xid ) {
     101      224742 :   admin->base.vt->advance_root( admin, xid );
     102      224742 : }
     103             : 
     104             : /* fd_accdb_cancel removes a fork node by XID and its children
     105             :    (recursively). */
     106             : 
     107             : static inline void
     108             : fd_accdb_cancel( fd_accdb_admin_t *        admin,
     109          90 :                  fd_funk_txn_xid_t const * xid ) {
     110          90 :   admin->base.vt->cancel( admin, xid );
     111          90 : }
     112             : 
     113             : FD_PROTOTYPES_END
     114             : 
     115             : #endif /* HEADER_fd_src_flamenco_accdb_fd_accdb_admin_h */

Generated by: LCOV version 1.14