Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
ab4deaba4c
  1. 46
      iguana/iguana_bundles.c

46
iguana/iguana_bundles.c

@ -461,7 +461,7 @@ int32_t iguana_blocksmissing(struct iguana_info *coin,int32_t *nonzp,uint8_t mis
{ {
if ( nonz < capacity ) if ( nonz < capacity )
{ {
iguana_blockQ("missing",coin,bp,i,hash2,now > bp->issued[i]+lag); //iguana_blockQ("missing",coin,bp,i,hash2,now > bp->issued[i]+lag);
if ( hashes != 0 ) if ( hashes != 0 )
hashes[nonz] = hash2; hashes[nonz] = hash2;
} }
@ -476,10 +476,10 @@ int32_t iguana_blocksmissing(struct iguana_info *coin,int32_t *nonzp,uint8_t mis
return(m); return(m);
} }
int32_t iguana_sendhashes(struct iguana_info *coin,struct iguana_peer *addr,int32_t msgtype,bits256 hashes[],int32_t n) int32_t iguana_sendhashes(struct iguana_info *coin,struct iguana_peer *addr,int32_t msgtype,bits256 hashes[],int32_t n,int32_t priority)
{ {
int32_t len; uint8_t *serialized; int32_t len; uint8_t *serialized;
if ( (rand() % 10) == 0 || strcmp("BTC",coin->symbol) != 0 ) if ( priority > 1 )
{ {
serialized = malloc((sizeof(int32_t) + sizeof(*hashes))*n + 1024); serialized = malloc((sizeof(int32_t) + sizeof(*hashes))*n + 1024);
if ( (len= iguana_getdata(coin,serialized,MSG_BLOCK,hashes,n)) > 0 ) if ( (len= iguana_getdata(coin,serialized,MSG_BLOCK,hashes,n)) > 0 )
@ -502,8 +502,12 @@ int32_t iguana_sendhashes(struct iguana_info *coin,struct iguana_peer *addr,int3
int32_t i; int32_t i;
for (i=0; i<n; i++) for (i=0; i<n; i++)
{ {
//iguana_sendblockreqPT(coin,addr,0,-1,hashes[i],0); if ( priority == 1 )
iguana_blockQ("test",coin,0,-1,hashes[i],(rand() % 10) == 0); {
if ( (rand() & 1) == 0 )
iguana_sendblockreqPT(coin,addr,0,-1,hashes[i],0);
else iguana_blockQ("test",coin,0,-1,hashes[i],1);
} else iguana_blockQ("test",coin,0,-1,hashes[i],priority);
} }
} }
return(n); return(n);
@ -517,7 +521,7 @@ int32_t iguana_nextnonz(uint8_t *missings,int32_t i,int32_t max)
return(i); return(i);
} }
int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1],int32_t *missingp,int32_t *capacityp,struct iguana_bundle *bp,int32_t lag) int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1],int32_t *missingp,int32_t *capacityp,struct iguana_bundle *bp,int32_t lag,int32_t priority)
{ {
uint8_t numpeers; int32_t i,j,avail,nonz=0,c,n,m=0,max,capacity,numsent; bits256 hashes[500],hash2; uint8_t numpeers; int32_t i,j,avail,nonz=0,c,n,m=0,max,capacity,numsent; bits256 hashes[500],hash2;
struct iguana_block *block; struct iguana_peer *peers[256],*addr; uint32_t now = (uint32_t)time(NULL); struct iguana_block *block; struct iguana_peer *peers[256],*addr; uint32_t now = (uint32_t)time(NULL);
@ -539,7 +543,7 @@ int32_t iguana_bundlerequests(struct iguana_info *coin,uint8_t missings[IGUANA_M
if ( avail < c ) if ( avail < c )
c = avail; c = avail;
//printf("i.%d c.%d avail.%d m.%d max.%d\n",i,c,avail,m,max); //printf("i.%d c.%d avail.%d m.%d max.%d\n",i,c,avail,m,max);
if ( c > 0 && (numsent= iguana_sendhashes(coin,addr,MSG_BLOCK,&hashes[m],c)) > 0 ) if ( c > 0 && (numsent= iguana_sendhashes(coin,addr,MSG_BLOCK,&hashes[m],c,priority)) > 0 )
{ {
for (j=0; j<numsent; j++) for (j=0; j<numsent; j++)
{ {
@ -890,12 +894,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) 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; double aveduration,aveduplicates; uint8_t missings[IGUANA_MAXBUNDLESIZE/8+1]; int32_t tmp,dist=0,missing,priority,avail,n=0,max; double aveduration,aveduplicates;
missing = iguana_blocksmissing(coin,&avail,missings,0,bp,0,lag); missing = iguana_blocksmissing(coin,&avail,missings,0,bp,0,lag);
if ( strcmp("BTC",coin->symbol) != 0 ) priority = 0;
lag = 13; lag = IGUANA_DEFAULTLAG;
if ( bp->numcached == bp->n-1 ) if ( bp->numissued < bp->n )
lag = 3; max = bp->numissued;
else max = bp->origmissings;
if ( coin->current != 0 )
{
dist = bp->hdrsi - coin->current->hdrsi;
if ( bp->numcached > bp->n - (coin->MAXBUNDLES - dist) )
priority++;
if ( bp == coin->current )
priority++;
}
if ( bp->durationscount != 0 ) if ( bp->durationscount != 0 )
{ {
aveduration = (double)bp->totaldurations / bp->durationscount; aveduration = (double)bp->totaldurations / bp->durationscount;
@ -903,15 +916,12 @@ int32_t iguana_bundlemissings(struct iguana_info *coin,struct iguana_bundle *bp,
aveduplicates = (double)bp->duplicatedurations / bp->duplicatescount; aveduplicates = (double)bp->duplicatedurations / bp->duplicatescount;
else aveduplicates = 3 * aveduration; else aveduplicates = 3 * aveduration;
if ( (rand() % 1000) == 0 ) if ( (rand() % 1000) == 0 )
printf("[%d] durations %.2f vs %.2f counts[%d %d]\n",bp->hdrsi,aveduration,aveduplicates,(int32_t)bp->durationscount,bp->duplicatescount); printf("priority.%d [%d] dist.%d durations %.2f vs %.2f counts[%d %d] \n",priority,bp->hdrsi,dist,aveduration,aveduplicates,(int32_t)bp->durationscount,bp->duplicatescount);
lag = 5 * aveduration; lag = 5 * aveduration;
} }
if ( bp->numissued < bp->n ) //if ( bp->missingstime == 0 || bp->numissued < bp->n )//|| (bp == coin->current && time(NULL) > bp->missingstime+lag) ) //
max = bp->numissued;
else max = bp->origmissings;
//if ( bp->missingstime == 0 || bp->numissued < bp->n )//|| (bp == coin->current && time(NULL) > bp->missingstime+lag) ) //
{ {
if ( (n= iguana_bundlerequests(coin,missings,&bp->origmissings,&tmp,bp,lag)) > 0 ) if ( (n= iguana_bundlerequests(coin,missings,&bp->origmissings,&tmp,bp,lag,bp == coin->current)) > 0 )
{ {
//printf("bundle.[%d] numissued.%d missings.%d n.%d capacity %d -> %d\n",bp->hdrsi,bp->numissued,bp->origmissings,n,capacity,capacity-n); //printf("bundle.[%d] numissued.%d missings.%d n.%d capacity %d -> %d\n",bp->hdrsi,bp->numissued,bp->origmissings,n,capacity,capacity-n);
bp->numissued += n; bp->numissued += n;

Loading…
Cancel
Save