From f6bfd36a6c0104596ad47ffb30559527fe247285 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 6 Oct 2026 19:57:58 +0200 Subject: [PATCH] Include dataset identity in Merkle diagnostics --- src/chat/merkle_sync.c | 28 ++++++++++++++-------------- tests/test_member_adapter.c | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/chat/merkle_sync.c b/src/chat/merkle_sync.c index d850f04f..958ce7a1 100644 --- a/src/chat/merkle_sync.c +++ b/src/chat/merkle_sync.c @@ -173,8 +173,8 @@ static struct ms_session* ms_create(struct merkle_sync* ms, struct ETCP_CONN* co snprintf(s->tree_ns, sizeof(s->tree_ns), "%u:%s", dataset, s->ns); s->leader = ms->inst->node_id < s->peer; s->next = ms->sessions; ms->sessions = s; - DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: attach ns=%s peer=%016llx conn=%p leader=%d", - s->ns, (unsigned long long)s->peer, (void*)conn, s->leader); + DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: attach dataset=%u ns=%s peer=%016llx conn=%p leader=%d", + s->dataset->id, s->ns, (unsigned long long)s->peer, (void*)conn, s->leader); return s; } @@ -208,8 +208,8 @@ static void ms_sent(struct ll_queue* q, void* arg) { return; } s->sent_bytes += len; - DEBUG_DEBUG(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: TX ns=%s peer=%016llx round=%llu type=%u bytes=%zu", - s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, type, len); + DEBUG_DEBUG(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: TX dataset=%u ns=%s peer=%016llx round=%llu type=%u bytes=%zu", + s->dataset->id, s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, type, len); if (type == MS_ERROR) { s->state = MS_FAILED; ms_stop_deadline(s); @@ -221,8 +221,8 @@ static void ms_sent(struct ll_queue* q, void* arg) { ms_stop_deadline(s); if (s->revision == s->verified_revision) { s->dirty = 0; - DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: converged ns=%s peer=%016llx round=%llu tx=%llu rx=%llu", - s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, + DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: converged dataset=%u ns=%s peer=%016llx round=%llu tx=%llu rx=%llu", + s->dataset->id, s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, (unsigned long long)s->sent_bytes, (unsigned long long)s->received_bytes); ms_notify(s, MT_OK); return; @@ -254,8 +254,8 @@ static int ms_send(struct ms_session* s, int type, uint32_t request, const uint8 } static void ms_fail(struct ms_session* s, int error, const char* reason, int report) { - DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: failed ns=%s peer=%016llx round=%llu error=%d reason=%s", - s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, error, reason); + DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: failed dataset=%u ns=%s peer=%016llx round=%llu error=%d reason=%s", + s->dataset->id, s->ns, (unsigned long long)s->peer, (unsigned long long)s->round, error, reason); s->state = MS_FAILED; s->dirty = 0; s->waiting = 0; s->failure_error = error; if (s->work) { uasync_call_soon_cancel(s->ms->inst->ua, s->work); s->work = NULL; } ms_discard_tx(s); @@ -333,8 +333,8 @@ static int ms_begin(struct ms_session* s) { if (!s->round) return -1; s->request_id = s->remote_request_id = 0; s->state = MS_BEGIN_WAIT; s->dirty = 0; s->waiting = 0; - DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: begin ns=%s peer=%016llx round=%llu", - s->ns, (unsigned long long)s->peer, (unsigned long long)s->round); + DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: begin dataset=%u ns=%s peer=%016llx round=%llu", + s->dataset->id, s->ns, (unsigned long long)s->peer, (unsigned long long)s->round); return ms_send(s, MS_BEGIN, 0, NULL, 0); } @@ -485,8 +485,8 @@ static void ms_receive(struct ETCP_CONN* conn, struct ll_entry* entry) { s->received_bytes += entry->len; const uint8_t* p = d + MS_HEADER; size_t len = entry->len - MS_HEADER; - DEBUG_DEBUG(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: RX ns=%s peer=%016llx round=%llu type=%u request=%u bytes=%zu state=%d", - ns, (unsigned long long)s->peer, (unsigned long long)round, type, request, len, s->state); + DEBUG_DEBUG(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: RX dataset=%u ns=%s peer=%016llx round=%llu type=%u request=%u bytes=%zu state=%d", + dataset, ns, (unsigned long long)s->peer, (unsigned long long)round, type, request, len, s->state); int rc = 0, notify = 0; if (s->state == MS_FAILING) goto done; if (type != MS_WAKE && type != MS_BEGIN && round != s->round) { @@ -550,8 +550,8 @@ static void ms_receive(struct ETCP_CONN* conn, struct ll_entry* entry) { s->dirty = memcmp(root, p, sizeof(root)) != 0; if (s->dirty) rc = ms_schedule(s); else { - DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: converged ns=%s peer=%016llx round=%llu", - s->ns, (unsigned long long)s->peer, (unsigned long long)s->round); + DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "merkle_sync: converged dataset=%u ns=%s peer=%016llx round=%llu", + s->dataset->id, s->ns, (unsigned long long)s->peer, (unsigned long long)s->round); notify = 1; } } diff --git a/tests/test_member_adapter.c b/tests/test_member_adapter.c index 505a26bc..f0906b8f 100644 --- a/tests/test_member_adapter.c +++ b/tests/test_member_adapter.c @@ -17,7 +17,7 @@ static void put(struct UTUN_INSTANCE* inst, uint64_t id) { } static void root(struct UTUN_INSTANCE* inst, uint8_t hash[32]) { - assert(merkle_sync_read_hash(inst, "1001", 0, 0, hash) == 0); + assert(merkle_sync_read_hash(inst, MT_DATA_MEMBERS, "1001", 0, 0, hash) == 0); } static void public_key(const uint8_t priv[32], uint8_t pub[32]) { @@ -86,7 +86,7 @@ static void test_owner_sizes(struct UASYNC* ua) { root(&target, actual); assert(!memcmp(expected, actual, 32)); assert(sqlite3_exec(target.topo_sqlite_db, "SAVEPOINT hash_tail", NULL, NULL, NULL) == SQLITE_OK); assert(topo_node_sqlite_member_owner_put(target.topo_sqlite_db, "1001", nid, tags, owner, 0) == 0); - assert(merkle_sync_recompute_path(&target, "1001", nid) == 1); + assert(merkle_sync_recompute_path(&target, MT_DATA_MEMBERS, MT_DATA_MEMBERS, "1001", nid) == 1); root(&target, actual); assert(memcmp(expected, actual, 32)); assert(sqlite3_exec(target.topo_sqlite_db, "ROLLBACK TO hash_tail; RELEASE hash_tail", NULL, NULL, NULL) == SQLITE_OK); tags[flip] = 'a';