ks_rwl_read_unlock(internal->lock); /* release write lock */
/* at this point no subsequent find/query will return the node */
+ if (s == KS_STATUS_FAIL) {
+ ks_log(KS_LOG_DEBUG, "Delete node: node not found\n");
+ return KS_STATUS_FAIL; /* cannot delete what we cannot find */
+ }
+
ks_dhtrt_queue_node_fordelete(table, node);
return s;
}
KS_DECLARE(ks_status_t) ks_dhtrt_release_node(ks_dht_node_t* node)
{
+ assert(node);
return ks_rwl_read_unlock(node->reflock);
}
KS_DECLARE(ks_status_t) ks_dhtrt_sharelock_node(ks_dht_node_t* node)
{
+ assert(node);
return ks_rwl_read_lock(node->reflock);
}
if (ks_dhtrt_ismasked(source->entries[rix].id, left->mask)) {
/* move it to the left */
- memcpy(dest->entries[lix].id, source->entries[rix].id, KS_DHT_NODEID_SIZE);
- dest->entries[lix].gptr = source->entries[rix].gptr;
- dest->entries[lix].inuse = 1;
+ memcpy(&dest->entries[lix], &source->entries[rix], sizeof(ks_dhtrt_bucket_entry_t));
++lix;
++dest->count;
bucket->entries[ix].inuse );
}
#endif
- if ( bucket->entries[ix].inuse == 1 &&
+ if ( bucket->entries[ix].inuse == 1 &&
+ bucket->entries[ix].flags == DHTPEER_ACTIVE &&
(!memcmp(id, bucket->entries[ix].id, KS_DHT_NODEID_SIZE)) ) {
return bucket->entries[ix].gptr;
}
}
peer = ks_dhtrt_find_node(rt, homeid);
- if (peer == 0) {
- printf("*** ks_dhtrt_find_node test01 failed \n"); fflush(stdout);
+ if (peer != 0) {
+ printf("*** ks_dhtrt_find_node test01 failed. find should fail\n"); fflush(stdout);
exit(102);
}
+ ks_dhtrt_touch_node(rt, homeid);
+
+ peer = ks_dhtrt_find_node(rt, homeid);
+ if (peer == 0) {
+ printf("*** ks_dhtrt_find_node test01 failed. find should succeed\n"); fflush(stdout);
+ exit(102);
+ }
+
status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, &peer1);
if (status == KS_STATUS_FAIL) {
printf("**** ks_dhtrt_create_node test01 did allow duplicate createnodes!!\n");
unsigned short port = 7001;
ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_touch_node(rt, nodeid);
peer1 = ks_dhtrt_find_node(rt, nodeid);
printf("test05 - first find compelete\n"); fflush(stdout);
s = ks_dhtrt_release_node(peer2);
if (s == KS_STATUS_FAIL) printf("release 1 failed\n");
+ s = ks_dhtrt_release_node(peer2);
+ if (s == KS_STATUS_FAIL) printf("release 1 failed\n");
+
+
printf("* **testbuckets - test05 finished\n\n\n"); fflush(stdout);
return;
for(int i0=0, i1=0; i0<150; ++i0, ++i1) {
if (i0%20 == 0) {
g_nodeid2.id[0]>>=1;
+ ks_dhtrt_dump(rt, 7);
}
else {
++ g_nodeid2.id[19];
ks_dhtrt_release_node(peer);
}
+ ks_dhtrt_dump(rt, 7);
+
memset(g_nodeid2.id, 0xef, KS_DHT_NODEID_SIZE);
for (int i0=0, i1=0; i0<150; ++i0, ++i1) {
if (i0%20 == 0) {