Commit e7be8e84 authored by jan.koester's avatar jan.koester
Browse files

test

parent c3da1e6f
Loading
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
authdb (20260419+5) unstable; urgency=high

  * Prevent stale manifest overwrite: pushManifestSync now compares local
    revision against cluster revision before pushing. A node with an older
    revision (e.g. after restart before sync) can no longer overwrite a
    freshly imported or updated domain manifest in the cluster.

 -- Jan Koester <jan.koester@tuxist.de>  Sat, 19 Apr 2026 00:00:00 +0200

authdb (20260418+4) unstable; urgency=medium

  * Cluster: defer recovery_epoch bump until after scrub completes,
+21 −0
Original line number Diff line number Diff line
@@ -222,6 +222,27 @@ namespace authdb {
        if (_Buffer.size() >= sizeof(AuthHeader))
            std::memcpy(&head, _Buffer.data(), sizeof(AuthHeader));

        // Safety: never overwrite a cluster manifest that has a higher revision.
        // This prevents a node with stale/empty data from wiping out freshly
        // imported or updated domain data on other nodes.
        try {
            auto &read_cli = g_Cluster->getReadClient();
            if (read_cli) {
                auto cluster_manifest = read_cli->retrieve(domainGroupId());
                if (cluster_manifest.size() >= sizeof(AuthHeader)) {
                    size_t cluster_rev = bufferRevision(cluster_manifest);
                    if (head.Revesion < cluster_rev) {
                        std::cerr << "[CLUSTER-BE] pushManifestSync domain=" << _Domain
                                  << " skipped: local rev=" << head.Revesion
                                  << " < cluster rev=" << cluster_rev << "\n";
                        return;
                    }
                }
            }
        } catch (...) {
            // Fetch failed — proceed with push (cluster may be empty)
        }

        uint32_t magic = MANIFEST_MAGIC;
        uint32_t count = static_cast<uint32_t>(keys.size());