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-04-01 06:30:45 Functions: 21 175 12.0 %

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

Generated by: LCOV version 1.14