Cleanup of message.c/.h

This commit is contained in:
2026-02-25 23:45:53 +01:00
parent e38ad93da8
commit 7591ef6ee1
15 changed files with 512 additions and 497 deletions
+41 -40
View File
@@ -97,7 +97,7 @@ static void add_vote(uint32_t *votes, int idx)
*votes |= 1 << idx;
}
// Helper: read a message from raw_message into ByteView-like usage
// Helper: read a message from raw_message into string-like usage
// raw_message is a pointer to the message bytes in the TCP read buffer
static uint64_t msg_len(void *raw_message)
{
@@ -123,7 +123,7 @@ static void begin_state_transfer(Server *state, int sender_idx)
.op_number = state->log.count,
.sender_idx = self_idx(state),
};
send_message(&state->msys,sender_idx, &message.base);
send_message(state->msys,sender_idx, &message.base);
node_log(state, "SEND GET_STATE", "to=%d op=%d", sender_idx, state->log.count);
}
@@ -165,7 +165,7 @@ process_request(Server *state, void *raw_message)
.rejected = true,
.request_id = request_message.request_id,
};
reply_to_message(&state->msys, raw_message, &reply_message.base);
reply_to_message(state->msys, raw_message, &reply_message.base);
node_log(state, "SEND REPLY", "client=%llu REJECTED (table full)", request_message.client_id);
return HR_OK;
}
@@ -190,7 +190,7 @@ process_request(Server *state, void *raw_message)
.result = entry->last_result,
.request_id = request_message.request_id,
};
reply_to_message(&state->msys, raw_message, &reply_message.base);
reply_to_message(state->msys, raw_message, &reply_message.base);
{
char result_buf[64];
@@ -230,7 +230,7 @@ process_request(Server *state, void *raw_message)
.client_id = request_message.client_id,
.request_id = request_message.request_id,
};
broadcast_message(&state->msys, self_idx(state), &prepare_message.base);
broadcast_message(state->msys, self_idx(state), &prepare_message.base);
{
char oper_buf[128];
@@ -261,8 +261,8 @@ static void reply_to_client(Server *state, ClientTableEntry *table_entry,
.result = result,
.request_id = request_id,
};
reply_to_message(&state->msys, table_entry->pending_message, &message.base);
consume_message(&state->msys, table_entry->pending_message);
reply_to_message(state->msys, table_entry->pending_message, &message.base);
consume_message(state->msys, table_entry->pending_message);
table_entry->pending_message = NULL;
}
}
@@ -393,7 +393,7 @@ complete_view_change_and_become_primary(Server *state)
.commit_index = state->commit_index,
.op_number = state->log.count,
};
broadcast_message_ex(&state->msys, self_idx(state),&begin_view_message.base, state->log.entries, state->log.count * sizeof(LogEntry));
broadcast_message_ex(state->msys, self_idx(state),&begin_view_message.base, state->log.entries, state->log.count * sizeof(LogEntry));
node_log(state, "SEND BEGIN_VIEW", "to=* view=%llu log=%d commit=%d",
state->view_number, state->log.count, state->commit_index);
@@ -478,10 +478,10 @@ process_recovery(Server *state, void *raw_message)
};
if (is_primary(state)) {
recovery_response_message.base.length += state->log.count * sizeof(LogEntry);
send_message_ex(&state->msys,recovery_message.sender_idx, &recovery_response_message.base,
send_message_ex(state->msys,recovery_message.sender_idx, &recovery_response_message.base,
state->log.entries, state->log.count * sizeof(LogEntry));
} else {
send_message(&state->msys,recovery_message.sender_idx, &recovery_response_message.base);
send_message(state->msys,recovery_message.sender_idx, &recovery_response_message.base);
}
return HR_OK;
}
@@ -511,7 +511,7 @@ perform_log_transfer_for_view_change(Server *state)
.commit_index = state->commit_index,
.sender_idx = self_idx(state),
};
send_message_ex(&state->msys,primary_idx(state), &do_view_change_message.base, state->log.entries, state->log.count * sizeof(LogEntry));
send_message_ex(state->msys,primary_idx(state), &do_view_change_message.base, state->log.entries, state->log.count * sizeof(LogEntry));
node_log(state, "SEND DO_VIEW_CHANGE", "to=%d view=%llu old_view=%llu log=%d commit=%d",
primary_idx(state), state->view_number, state->last_normal_view,
state->log.count, state->commit_index);
@@ -553,7 +553,7 @@ process_begin_view_change(Server *state, void *raw_message)
.view_number = message.view_number,
.sender_idx = self_idx(state),
};
broadcast_message(&state->msys, self_idx(state),&message_2.base);
broadcast_message(state->msys, self_idx(state),&message_2.base);
node_log(state, "SEND BEGIN_VIEW_CHG", "to=* view=%llu", message.view_number);
clear_view_change_fields(state);
@@ -621,7 +621,7 @@ process_begin_view(Server *state, void *raw_message)
.log_index = state->log.count - 1,
.view_number = state->view_number,
};
send_message(&state->msys,primary_idx(state), &ok_msg.base);
send_message(state->msys,primary_idx(state), &ok_msg.base);
node_log(state, "SEND PREPARE_OK", "to=%d idx=%d %s/%s", primary_idx(state), state->log.count - 1,
state->log.entries[state->log.count - 1].oper.bucket, state->log.entries[state->log.count - 1].oper.key);
}
@@ -669,7 +669,7 @@ process_get_state(Server *state, void *raw_message)
.commit_index = state->commit_index,
.start_index = start,
};
send_message_ex(&state->msys,get_state_message.sender_idx, &new_state_message.base,
send_message_ex(state->msys,get_state_message.sender_idx, &new_state_message.base,
state->log.entries + start, num_entries * sizeof(LogEntry));
node_log(state, "SEND NEW_STATE", "to=%d entries=%d commit=%d",
get_state_message.sender_idx, num_entries, state->commit_index);
@@ -707,7 +707,7 @@ process_store_chunk(Server *state, void *raw_message)
.hash = message.hash,
.success = (ret == 0),
};
reply_to_message(&state->msys, raw_message, &ack.base);
reply_to_message(state->msys, raw_message, &ack.base);
node_log(state, "RECV STORE_CHUNK", "size=%u ok=%d", message.size, ret == 0);
return HR_OK;
@@ -735,7 +735,7 @@ process_fetch_chunk(Server *state, void *raw_message)
.hash = message.hash,
.size = 0,
};
reply_to_message(&state->msys, raw_message, &response.base);
reply_to_message(state->msys, raw_message, &response.base);
node_log(state, "RECV FETCH_CHUNK", "NOT_FOUND");
return HR_OK;
@@ -762,7 +762,7 @@ process_fetch_chunk(Server *state, void *raw_message)
.hash = message.hash,
.size = 0,
};
reply_to_message(&state->msys, raw_message, &response.base);
reply_to_message(state->msys, raw_message, &response.base);
node_log(state, "RECV FETCH_CHUNK", "NO_META");
return HR_OK;
@@ -786,9 +786,9 @@ found_size:;
.size = 0,
};
if (message.sender_idx >= 0 && message.sender_idx < state->num_nodes)
send_message(&state->msys,message.sender_idx, &response.base);
send_message(state->msys,message.sender_idx, &response.base);
else
reply_to_message(&state->msys, raw_message, &response.base);
reply_to_message(state->msys, raw_message, &response.base);
node_log(state, "RECV FETCH_CHUNK", "READ_ERR size=%u", chunk_size);
return HR_OK;
}
@@ -802,7 +802,7 @@ found_size:;
.hash = message.hash,
.size = chunk_size,
};
reply_to_message_ex(&state->msys, raw_message, &response.base, chunk_data, chunk_size);
reply_to_message_ex(state->msys, raw_message, &response.base, chunk_data, chunk_size);
node_log(state, "RECV FETCH_CHUNK", "size=%u", chunk_size);
@@ -842,7 +842,7 @@ process_get_blob(Server *state, void *raw_message)
response.found = false;
}
reply_to_message(&state->msys, raw_message, &response.base);
reply_to_message(state->msys, raw_message, &response.base);
return HR_OK;
}
@@ -968,7 +968,7 @@ process_single_future_list_entry(Server *state)
.log_index = state->log.count-1,
.view_number = state->view_number,
};
send_message(&state->msys,state->future[i].sender_idx, &message.base);
send_message(state->msys,state->future[i].sender_idx, &message.base);
return 1;
}
@@ -1052,7 +1052,7 @@ process_prepare(Server *state, void *raw_message)
.log_index = state->log.count-1,
.view_number = state->view_number,
};
send_message(&state->msys,message.sender_idx, &ok_message.base);
send_message(state->msys,message.sender_idx, &ok_message.base);
node_log(state, "SEND PREPARE_OK", "to=%d idx=%d %s/%s",
message.sender_idx, state->log.count-1, message.oper.bucket, message.oper.key);
@@ -1140,7 +1140,7 @@ process_new_state(Server *state, void *raw_message)
.log_index = state->log.count - 1,
.view_number = state->view_number,
};
send_message(&state->msys,primary_idx(state), &prepare_ok_message.base);
send_message(state->msys,primary_idx(state), &prepare_ok_message.base);
node_log(state, "SEND PREPARE_OK", "to=%d idx=%d %s/%s", primary_idx(state), state->log.count - 1,
state->log.entries[state->log.count - 1].oper.bucket, state->log.entries[state->log.count - 1].oper.key);
}
@@ -1164,7 +1164,7 @@ send_redirect(Server *state, void *raw_message)
},
.view_number = state->view_number,
};
reply_to_message(&state->msys, raw_message, &redirect_message.base);
reply_to_message(state->msys, raw_message, &redirect_message.base);
node_log(state, "SEND REDIRECT", "view=%llu leader=%d",
(unsigned long long)state->view_number, primary_idx(state));
@@ -1401,15 +1401,16 @@ int server_init(void *state_, int argc, char **argv,
return -1;
}
if (message_system_init(&state->msys, state->node_addrs, state->num_nodes) < 0) {
state->msys = message_system_init(state->node_addrs, state->num_nodes);
if (state->msys == NULL) {
fprintf(stderr, "Node :: Couldn't setup message system\n");
return -1;
}
int ret = message_system_listen_tcp(&state->msys, state->self_addr);
int ret = message_system_listen_tcp(state->msys, state->self_addr);
if (ret < 0) {
fprintf(stderr, "Node :: Couldn't setup TCP listener\n");
message_system_free(&state->msys);
message_system_free(state->msys);
return -1;
}
@@ -1431,7 +1432,7 @@ int server_init(void *state_, int argc, char **argv,
.sender_idx = self_idx(state),
.nonce = state->recovery_nonce,
};
broadcast_message(&state->msys, self_idx(state),&recovery_message.base);
broadcast_message(state->msys, self_idx(state),&recovery_message.base);
node_log(state, "SEND RECOVERY", "to=* nonce=%llu", state->recovery_nonce);
nearest_deadline(&deadline, state->recovery_time + RECOVERY_TIMEOUT_SEC * 1000000000ULL);
@@ -1442,7 +1443,7 @@ int server_init(void *state_, int argc, char **argv,
fprintf(stderr, "Node :: Not enough poll() capacity (got %d, needed %d)\n", pcap, POLL_CAPACITY);
return -1;
}
*pnum = message_system_register_events(&state->msys, ctxs, pdata, pcap);
*pnum = message_system_register_events(state->msys, ctxs, pdata, pcap);
return 0;
}
@@ -1459,16 +1460,16 @@ int server_tick(void *state_, void **ctxs,
// NETWORK EVENTS
/////////////////////////////////////////////////////////////////
message_system_process_events(&state->msys, ctxs, pdata, *pnum);
message_system_process_events(state->msys, ctxs, pdata, *pnum);
for (void *ptr; (ptr = get_next_message(&state->msys)) != NULL; ) {
for (void *ptr; (ptr = get_next_message(state->msys)) != NULL; ) {
HandlerResult ret = process_message(state, ptr);
if (ret == HR_OUT_OF_MEMORY)
return -1;
if (ret != HR_DEFERRED)
consume_message(&state->msys, ptr);
consume_message(state->msys, ptr);
}
/////////////////////////////////////////////////////////////////
@@ -1491,7 +1492,7 @@ int server_tick(void *state_, void **ctxs,
.sender_idx = self_idx(state),
.nonce = state->recovery_nonce,
};
broadcast_message(&state->msys, self_idx(state),&recovery_message.base);
broadcast_message(state->msys, self_idx(state),&recovery_message.base);
node_log(state, "SEND RECOVERY", "to=* nonce=%llu", state->recovery_nonce);
state->recovery_time = state->now;
@@ -1523,7 +1524,7 @@ int server_tick(void *state_, void **ctxs,
.sender_idx = self_idx(state),
};
node_log(state, "SEND BEGIN_VIEW_CHG", "to=* view=%llu", state->view_number);
broadcast_message(&state->msys, self_idx(state),&begin_view_change_message.base);
broadcast_message(state->msys, self_idx(state),&begin_view_change_message.base);
} else {
nearest_deadline(&deadline, view_change_deadline);
@@ -1545,7 +1546,7 @@ int server_tick(void *state_, void **ctxs,
.sender_idx = self_idx(state),
.commit_index = state->commit_index,
};
broadcast_message(&state->msys, self_idx(state),&commit_message.base);
broadcast_message(state->msys, self_idx(state),&commit_message.base);
node_log(state, "SEND COMMIT", "to=* commit=%d", state->commit_index);
state->heartbeat = state->now;
@@ -1576,7 +1577,7 @@ int server_tick(void *state_, void **ctxs,
.view_number = state->view_number,
.sender_idx = self_idx(state),
};
broadcast_message(&state->msys, self_idx(state),&begin_view_change_message.base);
broadcast_message(state->msys, self_idx(state),&begin_view_change_message.base);
node_log(state, "SEND BEGIN_VIEW_CHG", "to=* view=%llu", state->view_number);
node_log(state, "STATUS CHANGE_VIEW", "view=%llu", state->view_number);
@@ -1602,7 +1603,7 @@ int server_tick(void *state_, void **ctxs,
.op_number = state->log.count,
.sender_idx = self_idx(state),
};
send_message(&state->msys,primary_idx(state), &get_state_message.base);
send_message(state->msys,primary_idx(state), &get_state_message.base);
node_log(state, "SEND GET_STATE", "to=%d op=%d", primary_idx(state), state->log.count);
state->state_transfer_time = state->now;
@@ -1615,7 +1616,7 @@ int server_tick(void *state_, void **ctxs,
*timeout = deadline_to_timeout(deadline, state->now);
if (pcap < POLL_CAPACITY)
return -1;
*pnum = message_system_register_events(&state->msys, ctxs, pdata, pcap);
*pnum = message_system_register_events(state->msys, ctxs, pdata, pcap);
return 0;
}
@@ -1628,7 +1629,7 @@ int server_free(void *state_)
log_free(&state->log);
log_free(&state->recovery_log);
log_free(&state->view_change_log);
message_system_free(&state->msys);
message_system_free(state->msys);
client_table_free(&state->client_table);
meta_store_free(&state->metastore);
chunk_store_free(&state->chunk_store);