Line data Source code
1 : #ifndef HEADER_fd_src_choreo_votor_ag_parent_ready_tracker_h 2 : #define HEADER_fd_src_choreo_votor_ag_parent_ready_tracker_h 3 : 4 : #include "ag_votor_base.h" 5 : #include "ag_finality_tracker.h" 6 : 7 : struct ag_parent_ready { 8 : ulong slot; 9 : ag_block_id_t parent; 10 : }; 11 : typedef struct ag_parent_ready ag_parent_ready_t; 12 : 13 : struct ag_parent_ready_state { 14 : ulong slot; /* map key */ 15 : ulong next; /* reserved for fd_pool, fd_map_chain */ 16 : 17 : int skip; 18 : 19 : ag_block_hash_t notar_fallbacks[AG_NOTAR_FALLBACK_CERT_MAX]; 20 : uchar notar_fallbacks_cnt; 21 : 22 : int is_ready; 23 : ag_block_id_t ready_ids[AG_SLOTS_PER_WINDOW*AG_NOTAR_FALLBACK_CERT_MAX]; 24 : ulong ready_id_cnt; 25 : }; 26 : typedef struct ag_parent_ready_state ag_parent_ready_state_t; 27 : 28 : #define POOL_NAME ag_parent_ready_state_pool 29 294 : #define POOL_T ag_parent_ready_state_t 30 : #include "../../util/tmpl/fd_pool.c" 31 : 32 : #define MAP_NAME ag_parent_ready_state_map 33 : #define MAP_ELE_T ag_parent_ready_state_t 34 855 : #define MAP_KEY slot 35 : #define MAP_KEY_T ulong 36 2109 : #define MAP_KEY_EQ(k0,k1) ((*(k0))==(*(k1))) 37 3732 : #define MAP_KEY_HASH(key,seed) (fd_ulong_hash( (*(key)) ^ (seed) )) 38 1371 : #define MAP_NEXT next 39 : #include "../../util/tmpl/fd_map_chain.c" 40 : 41 : struct ag_parent_ready_states { 42 : ag_parent_ready_state_t * pool; 43 : ag_parent_ready_state_map_t * map; 44 : }; 45 : typedef struct ag_parent_ready_states ag_parent_ready_states_t; 46 : 47 : struct __attribute__((aligned(128UL))) ag_parent_ready_tracker { 48 : ag_parent_ready_states_t states; 49 : ulong root; 50 : }; 51 : typedef struct ag_parent_ready_tracker ag_parent_ready_tracker_t; 52 : 53 : FD_PROTOTYPES_BEGIN 54 : 55 : FD_FN_CONST ulong 56 : ag_parent_ready_tracker_align( void ); 57 : 58 : FD_FN_CONST ulong 59 : ag_parent_ready_tracker_footprint( ulong slot_max ); 60 : 61 : void * 62 : ag_parent_ready_tracker_new( void * shmem, 63 : ulong slot_max, 64 : ulong seed ); 65 : 66 : ag_parent_ready_tracker_t * 67 : ag_parent_ready_tracker_join( void * shtracker ); 68 : 69 : void * 70 : ag_parent_ready_tracker_leave( ag_parent_ready_tracker_t const * tracker ); 71 : 72 : void * 73 : ag_parent_ready_tracker_delete( void * shtracker ); 74 : 75 : void 76 : ag_parent_ready_tracker_mark_notar_fallback( ag_parent_ready_tracker_t * self, 77 : ag_block_id_t const * id, 78 : ag_parent_ready_t * newly_certified, 79 : ulong * newly_certified_cnt ); 80 : 81 : void 82 : ag_parent_ready_tracker_mark_skipped( ag_parent_ready_tracker_t * self, 83 : ulong marked_slot, 84 : ag_parent_ready_t * newly_certified, 85 : ulong * newly_certified_cnt ); 86 : 87 : ag_parent_ready_t 88 : ag_parent_ready_tracker_handle_finalization( ag_parent_ready_tracker_t * self, 89 : ag_finalization_event_t const * event, 90 : ag_parent_ready_t * newly_certified, 91 : ulong * newly_certified_cnt ); 92 : 93 : ag_block_id_t const * 94 : ag_parent_ready_tracker_parents_ready( ag_parent_ready_tracker_t * self, 95 : ulong slot, 96 : ulong * cnt ); 97 : 98 : ag_block_id_t 99 : ag_parent_ready_tracker_wait_for_parent_ready( ag_parent_ready_tracker_t * self, 100 : ulong slot ); 101 : 102 : void 103 : ag_parent_ready_tracker_prune( ag_parent_ready_tracker_t * self, 104 : ulong new_root ); 105 : 106 : FD_PROTOTYPES_END 107 : 108 : #endif