FS-9775: Update touch time on existing node in create_node. Rename enums

This commit is contained in:
colm 2016-12-12 11:20:25 -05:00 committed by Mike Jerris
parent b88437fcbe
commit 0842616add
2 changed files with 23 additions and 13 deletions

View File

@ -52,15 +52,15 @@ struct ks_dht_nodeid_s {
uint8_t id[KS_DHT_NODEID_SIZE];
};
enum ipfamily { ifv4=AF_INET, ifv6=AF_INET6, ifboth=AF_INET+AF_INET6};
enum ks_dht_nodetype_t { ks_dht_remote_t=0x01,
ks_dht_local_t=0x02,
ks_dht_both_t=ks_dht_remote_t+ks_dht_local_t };
enum ks_afflags_t { ifv4=AF_INET, ifv6=AF_INET6, ifboth=AF_INET+AF_INET6};
enum ks_dht_nodetype_t { KS_DHT_REMOTE=0x01,
KS_DHT_LOCAL=0x02,
KS_DHT_BOTH=KS_DHT_REMOTE+KS_DHT_LOCAL };
struct ks_dht_node_s {
ks_dht_nodeid_t nodeid;
ks_sockaddr_t addr;
enum ipfamily family; /* AF_INET or AF_INET6 */
enum ks_afflags_t family; /* AF_INET or AF_INET6 */
enum ks_dht_nodetype_t type; /* local or remote */
ks_dhtrt_routetable_t* table;
};
@ -73,7 +73,7 @@ struct ks_dhtrt_routetable_s {
struct ks_dhtrt_querynodes_s {
ks_dht_nodeid_t nodeid; /* in: id to query */
enum ipfamily family; /* in: AF_INET or AF_INET6 or both */
enum ks_afflags_t family; /* in: AF_INET or AF_INET6 or both */
enum ks_dht_nodetype_t type; /* remote, local, or both */
uint8_t max; /* in: maximum to return */
uint8_t count; /* out: number returned */

View File

@ -55,7 +55,7 @@ typedef struct ks_dhtrt_bucket_entry_s {
uint8_t id[KS_DHT_NODEID_SIZE];
ks_dht_node_t *gptr; /* ptr to peer */
enum ks_dht_nodetype_t type;
enum ipfamily family;
enum ks_afflags_t family;
uint8_t inuse;
uint8_t outstanding_pings;
uint8_t flags; /* active, suspect, expired */
@ -151,7 +151,7 @@ uint8_t ks_dhtrt_load_query(ks_dhtrt_querynodes_t *query, ks_dhtrt_sortedxors_t
static
uint8_t ks_dhtrt_findclosest_bucketnodes(unsigned char *nodeid,
enum ks_dht_nodetype_t type,
enum ipfamily family,
enum ks_afflags_t family,
ks_dhtrt_bucket_header_t *header,
ks_dhtrt_sortedxors_t *xors,
unsigned char *hixor,
@ -210,11 +210,18 @@ KS_DECLARE(ks_status_t) ks_dhtrt_create_node( ks_dhtrt_routetable_t *table,
unsigned short port,
ks_dht_node_t **node)
{
ks_dht_node_t *tnode = ks_dhtrt_find_node(table, nodeid);
ks_dhtrt_bucket_header_t *header = ks_dhtrt_find_bucketheader(table, nodeid.id);
assert(header != NULL); /* should always find a header */
ks_dhtrt_bucket_entry_t *bentry = ks_dhtrt_find_bucketentry(header, nodeid.id);
if (bentry != 0) {
bentry->type = ks_time_now_sec();
(*node) = bentry->gptr;
return KS_STATUS_SUCCESS;
}
if (tnode != 0) return KS_STATUS_FAIL; /* protect against duplicates */
/* @todo - replace with reusable memory pool */
tnode = ks_pool_alloc(table->pool, sizeof(ks_dht_node_t));
ks_dht_node_t *tnode = ks_pool_alloc(table->pool, sizeof(ks_dht_node_t));
tnode->table = table;
for (int i = 0; i < 5; ++i) {
@ -262,10 +269,13 @@ ks_status_t ks_dhtrt_insert_node(ks_dhtrt_routetable_t *table, ks_dht_node_t *no
int insanity = 0;
ks_dhtrt_bucket_header_t *header = ks_dhtrt_find_bucketheader(table, node->nodeid.id);
assert(header != NULL); /* should always find a header */
bucket = header->bucket;
assert(bucket != 0); /* we were not able to find a bucket*/
if (bucket == 0) {
return KS_STATUS_FAIL; /* we were not able to find a bucket*/
}
while (bucket->count == KS_DHT_BUCKETSIZE) {
if (insanity > 3200) assert(insanity < 3200);
@ -932,7 +942,7 @@ void ks_dhtrt_delete_id(ks_dhtrt_bucket_t *bucket, ks_dhtrt_nodeid_t id)
static
uint8_t ks_dhtrt_findclosest_bucketnodes(ks_dhtrt_nodeid_t id,
enum ks_dht_nodetype_t type,
enum ipfamily family,
enum ks_afflags_t family,
ks_dhtrt_bucket_header_t *header,
ks_dhtrt_sortedxors_t *xors,
unsigned char *hixor, /*todo: remove */