X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fcommon%2Fsrc%2Frt_generic_static.c;h=d65acdfa8a15cc08abca762f9196e110b3f9acda;hb=d9de79acd9c205dc4f795e90a98331628ed6c85b;hp=d51a44c6338b42c87aeead5f5212408cbdcedee4;hpb=3925774e739509bb51df2c81addb3ab742c1801f;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/common/src/rt_generic_static.c b/src/rmr/common/src/rt_generic_static.c index d51a44c..d65acdf 100644 --- a/src/rmr/common/src/rt_generic_static.c +++ b/src/rmr/common/src/rt_generic_static.c @@ -60,7 +60,8 @@ typedef struct thing_list { // ---- debugging/testing ------------------------------------------------------------------------- /* - Dump stats for an endpoint in the RT. + Dump some stats for an endpoint in the RT. This is generally called to + verify endpoints after a table load/change. */ static void ep_stats( void* st, void* entry, char const* name, void* thing, void* vcounter ) { int* counter; @@ -74,7 +75,34 @@ static void ep_stats( void* st, void* entry, char const* name, void* thing, void (*counter)++; } - fprintf( stderr, "[DBUG] endpoint: %s open=%d\n", ep->name, ep->open ); + fprintf( stderr, "[DBUG] RMR sends: target=%s open=%d\n", ep->name, ep->open ); +} + +/* + Dump counts for an endpoint in the RT. The vid parm is assumed to point to + the 'source' information and is added to each message. +*/ +static void ep_counts( void* st, void* entry, char const* name, void* thing, void* vid ) { + endpoint_t* ep; + char* id; + + if( (ep = (endpoint_t *) thing) == NULL ) { + return; + } + + if( (id = (char *) vid) == NULL ) { + id = "missing"; + } + + fprintf( stderr, "[INFO] RMR sends: ts=%lld src=%s target=%s open=%d succ=%lld fail=%lld (hard=%lld soft=%lld)\n", + (long long) time( NULL ), + id, + ep->name, + ep->open, + ep->scounts[EPSC_GOOD], + ep->scounts[EPSC_FAIL] + ep->scounts[EPSC_TRANS], + ep->scounts[EPSC_FAIL], + ep->scounts[EPSC_TRANS] ); } /* @@ -124,6 +152,19 @@ static void rt_stats( route_table_t* rt ) { free( counter ); } +/* + Given a route table, cause endpoint counters to be written to stderr. The id + parm is written as the "source" in the output. +*/ +static void rt_epcounts( route_table_t* rt, char* id ) { + if( rt == NULL ) { + fprintf( stderr, "[INFO] RMR endpoint: no counts: empty table\n" ); + return; + } + + rmr_sym_foreach_class( rt->hash, 1, ep_counts, id ); // run endpoints in the active table +} + // ------------------------------------------------------------------------------------------------ /* @@ -173,13 +214,14 @@ static char* ensure_nlterm( char* buf ) { } } else { if( buf[len-1] != '\n' ) { - fprintf( stderr, "[WARN] rmr buf_check: input buffer was not newline terminated (file missing final \\n?)\n" ); + fprintf( stderr, "[WRN] rmr buf_check: input buffer was not newline terminated (file missing final \\n?)\n" ); if( (nb = (char *) malloc( sizeof( char ) * (len + 2) )) != NULL ) { memcpy( nb, buf, len ); *(nb+len) = '\n'; // insert \n and nil into the two extra bytes we allocated *(nb+len+1) = 0; - free( buf ); } + + free( buf ); } } @@ -200,7 +242,7 @@ static rtable_ent_t* uta_add_rte( route_table_t* rt, uint64_t key, int nrrgroups } if( (rte = (rtable_ent_t *) malloc( sizeof( *rte ) )) == NULL ) { - fprintf( stderr, "rmr_add_rte: malloc failed for entry\n" ); + fprintf( stderr, "[ERR] rmr_add_rte: malloc failed for entry\n" ); return NULL; } memset( rte, 0, sizeof( *rte ) ); @@ -225,7 +267,7 @@ static rtable_ent_t* uta_add_rte( route_table_t* rt, uint64_t key, int nrrgroups rmr_sym_map( rt->hash, key, rte ); // add to hash using numeric mtype as key - if( DEBUG ) fprintf( stderr, "[DBUG] route table entry created: k=%lx groups=%d\n", key, nrrgroups ); + if( DEBUG ) fprintf( stderr, "[DBUG] route table entry created: k=%llx groups=%d\n", (long long) key, nrrgroups ); return rte; } @@ -541,8 +583,8 @@ static void read_static_rt( uta_ctx_t* ctx, int vlevel ) { if( (eor = strchr( rec, '\n' )) != NULL ) { *eor = 0; } else { - fprintf( stderr, "[WARN] rmr read_static: seed route table had malformed records (missing newline): %s\n", fname ); - fprintf( stderr, "[WARN] rmr read_static: seed route table not used: %s\n", fname ); + fprintf( stderr, "[WRN] rmr read_static: seed route table had malformed records (missing newline): %s\n", fname ); + fprintf( stderr, "[WRN] rmr read_static: seed route table not used: %s\n", fname ); free( fbuf ); return; } @@ -847,14 +889,14 @@ static endpoint_t* rt_ensure_ep( route_table_t* rt, char const* ep_name ) { endpoint_t* ep; if( !rt || !ep_name || ! *ep_name ) { - fprintf( stderr, "[WARN] rmr: rt_ensure: internal mishap, something undefined rt=%p ep_name=%p\n", rt, ep_name ); + fprintf( stderr, "[WRN] rmr: rt_ensure: internal mishap, something undefined rt=%p ep_name=%p\n", rt, ep_name ); errno = EINVAL; return NULL; } if( (ep = uta_get_ep( rt, ep_name )) == NULL ) { // not there yet, make if( (ep = (endpoint_t *) malloc( sizeof( *ep ) )) == NULL ) { - fprintf( stderr, "[WARN] rmr: rt_ensure: malloc failed for endpoint creation: %s\n", ep_name ); + fprintf( stderr, "[WRN] rmr: rt_ensure: malloc failed for endpoint creation: %s\n", ep_name ); errno = ENOMEM; return NULL; } @@ -863,6 +905,7 @@ static endpoint_t* rt_ensure_ep( route_table_t* rt, char const* ep_name ) { ep->addr = uta_h2ip( ep_name ); ep->name = strdup( ep_name ); pthread_mutex_init( &ep->gate, NULL ); // init with default attrs + memset( &ep->scounts[0], 0, sizeof( ep->scounts ) ); rmr_sym_put( rt->hash, ep_name, 1, ep ); }