FS-9775: Exempt local nodes from expiration. Add release_querynodes api

This commit is contained in:
colm 2016-12-14 22:31:21 -05:00 committed by Mike Jerris
parent 6013808781
commit d7222718aa
2 changed files with 36 additions and 20 deletions

View File

@ -459,7 +459,9 @@ KS_DECLARE(ks_status_t) ks_dhtrt_expire_node(ks_dhtrt_routetable_t* table
KS_DECLARE(uint8_t) ks_dhtrt_findclosest_nodes(ks_dhtrt_routetable_t* table, ks_dhtrt_querynodes_t* query); KS_DECLARE(uint8_t) ks_dhtrt_findclosest_nodes(ks_dhtrt_routetable_t* table, ks_dhtrt_querynodes_t* query);
KS_DECLARE(ks_dht_node_t*) ks_dhtrt_find_node(ks_dhtrt_routetable_t* table, ks_dht_nodeid_t id); KS_DECLARE(ks_dht_node_t*) ks_dhtrt_find_node(ks_dhtrt_routetable_t* table, ks_dht_nodeid_t id);
KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node); KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node);
KS_DECLARE(ks_status_t) ks_dhtrt_release_querynodes(ks_dhtrt_querynodes_t* query);
KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t* table); KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t* table);

View File

@ -428,7 +428,7 @@ KS_DECLARE(ks_dht_node_t *) ks_dhtrt_find_node(ks_dhtrt_routetable_t *table, ks_
if (bucket != 0) { /* probably a logic error ?*/ if (bucket != 0) { /* probably a logic error ?*/
ks_rwl_read_lock(bucket->lock); ks_rwl_read_lock(bucket->lock);
ks_dht_node_t* node = ks_dhtrt_find_nodeid(bucket, nodeid.id); node = ks_dhtrt_find_nodeid(bucket, nodeid.id);
if (node != NULL) { if (node != NULL) {
ks_rwl_read_lock(node->reflock); ks_rwl_read_lock(node->reflock);
@ -510,7 +510,11 @@ uint8_t ks_dhtrt_findclosest_locked_nodes(ks_dhtrt_routetable_t *table, ks_dhtrt
uint8_t total = 0; uint8_t total = 0;
uint8_t cnt; uint8_t cnt;
if (max == 0) return 0; /* sanity check */ if (max == 0) return 0; /* sanity checks */
if (max > KS_DHTRT_MAXQUERYSIZE) { /* enforce the maximum */
max = KS_DHTRT_MAXQUERYSIZE;
query->max = KS_DHTRT_MAXQUERYSIZE;
}
query->count = 0; query->count = 0;
@ -659,7 +663,7 @@ uint8_t ks_dhtrt_findclosest_locked_nodes(ks_dhtrt_routetable_t *table, ks_dhtrt
ks_dhtrt_sortedxors_t *x = tofree->next; ks_dhtrt_sortedxors_t *x = tofree->next;
ks_pool_free(table->pool, tofree); ks_pool_free(table->pool, tofree);
tofree = x->next; tofree = x;
} }
return query->count; return query->count;
@ -667,11 +671,16 @@ uint8_t ks_dhtrt_findclosest_locked_nodes(ks_dhtrt_routetable_t *table, ks_dhtrt
KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node) KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node)
{ {
return KS_STATUS_SUCCESS;
return ks_rwl_read_unlock(node->reflock); return ks_rwl_read_unlock(node->reflock);
} }
KS_DECLARE(ks_status_t) ks_dhtrt_release_querynodes(ks_dhtrt_querynodes_t *query)
{
for(int ix=0; ix<query->count; ++ix) {
ks_rwl_read_unlock(query->nodes[ix]->reflock);
}
return KS_STATUS_SUCCESS;
}
KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t *table) KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t *table)
{ {
@ -717,6 +726,9 @@ KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t *table)
ks_dhtrt_bucket_entry_t *e = &b->entries[ix]; ks_dhtrt_bucket_entry_t *e = &b->entries[ix];
if (e->inuse == 1) { if (e->inuse == 1) {
if (e->gptr->type != KS_DHT_LOCAL) { /* 'local' nodes do not get expired */
/* more than n pings outstanding? */ /* more than n pings outstanding? */
if (e->outstanding_pings >= KS_DHTRT_MAXPING) { if (e->outstanding_pings >= KS_DHTRT_MAXPING) {
@ -737,6 +749,8 @@ KS_DECLARE(void) ks_dhtrt_process_table(ks_dhtrt_routetable_t *table)
ks_dhtrt_ping(e); ks_dhtrt_ping(e);
} }
} /* end if not local */
} /* end if e->inuse */ } /* end if e->inuse */
} /* end for each bucket_entry */ } /* end for each bucket_entry */