Line data Source code
1 : #include "fd_shred_cap.h" 2 : #include <unistd.h> 3 : 4 : /* int */ 5 : /* fd_shred_cap_mark_stable( fd_replay_t * replay, ulong slot ) { */ 6 : /* if( replay->shred_cap == NULL ) return FD_SHRED_CAP_OK; */ 7 : 8 : /* if (replay->stable_slot_start == 0) */ 9 : /* replay->stable_slot_start = slot; */ 10 : /* if (slot > replay->stable_slot_end) */ 11 : /* replay->stable_slot_end = slot; */ 12 : 13 : /* if (replay->stable_slot_start + MAX_STABLE_PREFIX < replay->stable_slot_end) { */ 14 : /* FD_LOG_WARNING( ("reaching max stable prefix length (%lu..%lu more than %u slots) in shred_cap", */ 15 : /* replay->stable_slot_start, */ 16 : /* replay->stable_slot_end, */ 17 : /* MAX_STABLE_PREFIX) ); */ 18 : /* } */ 19 : 20 : /* return FD_SHRED_CAP_OK; */ 21 : /* } */ 22 : 23 : int 24 : fd_shred_cap_archive( fd_shred_cap_ctx_t * ctx FD_PARAM_UNUSED, 25 : fd_shred_t const * shred, 26 0 : uchar flags FD_PARAM_UNUSED) { 27 0 : ulong wsz; 28 0 : ulong shred_len = fd_shred_sz( shred ); 29 0 : ushort hdr_len = sizeof( fd_shred_cap_hdr_t ); 30 0 : fd_shred_cap_hdr_t cap_header = {.sz = shred_len, .flags = flags}; 31 0 : fd_io_write( ctx->shred_cap_fileno, &cap_header, (ulong)hdr_len, (ulong)hdr_len, &wsz ); 32 0 : FD_TEST( wsz == hdr_len ); 33 0 : fd_io_write( ctx->shred_cap_fileno, shred, shred_len, shred_len, &wsz ); 34 0 : FD_TEST( wsz == shred_len ); 35 0 : fsync( ctx->shred_cap_fileno ); 36 : 37 0 : return FD_SHRED_CAP_OK; 38 0 : } 39 : 40 : int 41 : fd_shred_cap_replay( const char * shred_cap_fpath, 42 0 : fd_store_t * store ) { 43 0 : FILE * shred_cap = fopen( shred_cap_fpath, "rb" ); 44 0 : FD_TEST( shred_cap ); 45 : 46 0 : ulong cnt = 0; 47 0 : for( ;; ) { 48 0 : fd_shred_cap_hdr_t header; 49 0 : ulong nshredcap_hdr = fread( &header, sizeof( fd_shred_cap_hdr_t ), 1, shred_cap ); 50 0 : if ( nshredcap_hdr != 1 ) break; 51 : 52 0 : uchar buffer[FD_SHRED_MAX_SZ]; 53 0 : ulong shred_len = header.sz; 54 0 : ulong bytes_read = fread( buffer, sizeof( uchar ), shred_len, shred_cap ); 55 0 : if ( bytes_read != shred_len ) break; 56 : 57 0 : fd_shred_t const * shred = fd_shred_parse( buffer, shred_len ); 58 0 : if ( fd_store_shred_insert( store, shred ) < FD_BLOCKSTORE_OK ) return FD_SHRED_CAP_ERR; 59 0 : cnt++; 60 : /* 61 : if ( FD_SHRED_CAP_FLAG_IS_TURBINE(header.flags) ) { 62 : fd_replay_turbine_rx( replay, shred, fd_shred_sz( shred )); 63 : } else { 64 : fd_replay_repair_rx( replay, shred ); 65 : } 66 : */ 67 0 : } 68 0 : FD_LOG_WARNING( ("Finish inserting %lu shreds from the shredcap file", cnt) ); 69 0 : return FD_SHRED_CAP_OK; 70 0 : }