From 9fbcffb91722c05332c84bc82063aee01ffb5b1c Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 31 Mar 2016 12:50:24 -0600 Subject: [PATCH] test --- iguana/iguana777.h | 2 +- iguana/iguana_bundles.c | 13 ++++++++++++- iguana/iguana_recv.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/iguana/iguana777.h b/iguana/iguana777.h index 875d46f8e..8fbee1544 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -433,7 +433,7 @@ struct iguana_bloominds { uint16_t inds[8]; }; struct iguana_bundle { struct queueitem DL; struct iguana_info *coin; struct iguana_bundle *nextbp; - struct iguana_bloom16 bloom; //uint32_t rawscriptspace; + struct iguana_bloom16 bloom; int64_t totaldurations,duplicatedurations; int32_t durationscount,duplicatescount; uint32_t issuetime,hdrtime,emitfinish,mergefinish,purgetime,queued,startutxo,utxofinish,balancefinish,validated,lastspeculative,dirty,nexttime,currenttime,lastprefetch,missingstime; int32_t numhashes,numrecv,numsaved,numcached,generrs,currentflag,origmissings,numissued; int32_t minrequests,n,hdrsi,bundleheight,numtxids,numspends,numunspents,numspec,isRT; diff --git a/iguana/iguana_bundles.c b/iguana/iguana_bundles.c index 6f7557419..508a48bff 100755 --- a/iguana/iguana_bundles.c +++ b/iguana/iguana_bundles.c @@ -890,10 +890,21 @@ int32_t iguana_cacheprocess(struct iguana_info *coin,struct iguana_bundle *bp,in int32_t iguana_bundlemissings(struct iguana_info *coin,struct iguana_bundle *bp,int32_t capacity,int32_t lag) { - uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1]; int32_t tmp,missing,avail,n=0,max; + uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1]; int32_t tmp,missing,avail,n=0,max; double aveduration,aveduplicates; missing = iguana_blocksmissing(coin,&avail,missings,0,bp,0,lag); if ( strcmp("BTC",coin->symbol) != 0 ) lag = 13; + if ( bp->numcached == bp->n-1 ) + lag = 3; + if ( bp->durationscount != 0 ) + { + aveduration = (double)bp->totaldurations / bp->durationscount; + if ( bp->duplicatescount != 0 ) + aveduplicates = (double)bp->duplicatedurations / bp->duplicatescount; + else aveduplicates = 3 * aveduration; + printf("[%d] durations %.2f vs %.2f counts[%d %d]\n",bp->hdrsi,aveduration,aveduplicates,(int32_t)bp->durationscount,bp->duplicatescount); + lag = 3 * aveduration; + } if ( bp->numissued < bp->n ) max = bp->numissued; else max = bp->origmissings; diff --git a/iguana/iguana_recv.c b/iguana/iguana_recv.c index 1292df7ec..e7981ed41 100755 --- a/iguana/iguana_recv.c +++ b/iguana/iguana_recv.c @@ -241,6 +241,31 @@ int8_t iguana_blockstatus(struct iguana_info *coin,struct iguana_block *block) return(status); } +void iguana_bundletime(struct iguana_info *coin,struct iguana_bundle *bp,int32_t bundlei,struct iguana_block *block,int32_t duplicateflag) +{ + uint32_t starttime; int32_t duration; + if ( bp != 0 && bundlei >= 0 && bundlei < bp->n ) + { + starttime = block->issued; + if ( bp->issued[bundlei] != 0 && (starttime == 0 || bp->issued[bundlei] < block->issued) ) + starttime = bp->issued[bundlei]; + if ( starttime != 0 ) + { + duration = (uint32_t)time(NULL) - starttime; + if ( duplicateflag != 0 ) + { + bp->duplicatedurations += duration; + bp->duplicatescount++; + } + else + { + bp->totaldurations += duration; + bp->durationscount++; + } + } + } +} + void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,struct iguana_msghdr *H,uint8_t *data,int32_t recvlen) { struct iguana_bundlereq *req; struct iguana_txblock *txdata = 0; int32_t valid,speculative=0,i,j,bundlei,copyflag; struct iguana_block *block; struct iguana_bundle *bp; char str[65]; @@ -299,6 +324,8 @@ void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct i { numAfteremit++; sizeAfteremit += recvlen; + if ( (block= bp->blocks[bundlei]) != 0 ) + iguana_bundletime(coin,bp,bundlei,block,1); //printf("got [%d:%d] with emitfinish.%u\n",bp->hdrsi,bundlei,bp->emitfinish); return; } @@ -309,6 +336,7 @@ void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct i { numDuplicates++; sizeDuplicates += recvlen; + iguana_bundletime(coin,bp,bundlei,block,1); //printf("duplicate [%d:%d] %s\n",bp->hdrsi,bundlei,bits256_str(str,block->RO.hash2)); if ( bits256_cmp(origtxdata->block.RO.hash2,block->RO.hash2) == 0 ) return; @@ -316,6 +344,7 @@ void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct i if ( block->mainchain != 0 ) return; } //else printf("recv [%d:%d] %s\n",bp->hdrsi,bundlei,bits256_str(str,block->RO.hash2)); + iguana_bundletime(coin,bp,bundlei,block,0); block->RO = origtxdata->block.RO; block->txvalid = 1; //printf("update prev for [%d:%d]\n",bp->hdrsi,bundlei);