summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2025-05-06 19:31:48 +0200
committerJesper Jensen <jesper@jnsn.dev>2025-05-06 19:31:48 +0200
commit63a28d5951594455e050ea3a68ab5b63cb093964 (patch)
treeef66acd00ed0ff6a2e700870ebbd09f5ad9fb2d3 /src
parent8c04d112dd3c63ee0a618bec5d24877797fb6d3a (diff)
Reset the expire time of routing table on startup
Diffstat (limited to 'src')
-rw-r--r--src/main.c3
-rw-r--r--src/proto.c2
-rw-r--r--src/routing.c18
-rw-r--r--src/routing.h1
4 files changed, 17 insertions, 7 deletions
diff --git a/src/main.c b/src/main.c
index 3169068..f984763 100644
--- a/src/main.c
+++ b/src/main.c
@@ -155,11 +155,14 @@ int main(int argc, char** argv) {
/* myID = (struct nodeid){.inner={0xebe9bbf1, 0x3cdba6b3, 0x993e0c87, 0x900d5e25, 0x00000000}}; */
routing_init(&myID);
allocate_hashtable();
+ } else {
+ routing_reset_expire(time(NULL) + PROTO_UNCTM);
}
dht.self = myID;
}
+
metric_init();
routing_update_metrics();
peer_update_metrics();
diff --git a/src/proto.c b/src/proto.c
index 9866c0a..51eb71b 100644
--- a/src/proto.c
+++ b/src/proto.c
@@ -883,7 +883,7 @@ int proto_run(struct dht* dht, char* buff, size_t recv_len, struct sockaddr_in*
struct entry* oldest = NULL;
routing_oldest(&oldest);
while(oldest != NULL) {
- if(difftime(now, oldest->expire) < 0)
+ if(difftime(now, oldest->expire) < 0.0)
break;
struct sockaddr_in dest = {0};
diff --git a/src/routing.c b/src/routing.c
index 30f0deb..a3e0b26 100644
--- a/src/routing.c
+++ b/src/routing.c
@@ -73,12 +73,6 @@ void routing_update_metrics() {
prom_gauge_set(routing_table_occupied, filled, (const char*[]){buf});
}
-
- time_t reasonable = time(NULL) + 120;
- for(size_t i = 0; i < RT_SIZE; i++) {
- if(pTable->table[i].set) continue;
- if(reasonable < pTable->table[i].expire) dbg("%d will expire quite far into the future after now? (%ld < %ld)", i, reasonable, pTable->table[i].expire);
- }
}
void routing_flush() {
@@ -300,6 +294,18 @@ void routing_oldest(struct entry** dest) {
}
}
+void routing_reset_expire(time_t expire) {
+ for(struct entry* entry = pTable->table; entry < pTable->table+RT_SIZE; entry++){
+ if(!entry->set)
+ continue;
+
+ if(entry->expire != 0)
+ continue;
+
+ entry->expire = expire;
+ }
+}
+
void routing_status(int* filled, int* size, double* load_factor, size_t load_factor_len) {
*size = RT_SIZE;
diff --git a/src/routing.h b/src/routing.h
index be1ae8d..aee2c8e 100644
--- a/src/routing.h
+++ b/src/routing.h
@@ -43,6 +43,7 @@ bool routing_interested(struct nodeid* id);
bool routing_offer(struct nodeid* id, struct entry **dest);
void routing_oldest(struct entry** dest);
size_t routing_closest(struct nodeid* needle, size_t n, struct entry** res);
+void routing_reset_expire(time_t expire);
void routing_status(int* filled, int* size, double* load_factor, size_t load_factor_len);
struct entry* routing_get(struct nodeid* id);