Commit 87bba766 authored by jan.koester's avatar jan.koester
Browse files

test

parent 75e14a57
Loading
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -1872,20 +1872,14 @@ namespace authdb {

            // Vacuum cluster block stores when cluster mode is active
            if (g_Cluster && g_Cluster->isRunning()) {
                auto &pclient = g_Cluster->getClient();
                if (pclient) {
                size_t nodes_ok = 0;
                try {
                        nodes_ok = pclient->vacuum_all_nodes();
                    nodes_ok = g_Cluster->vacuumAllNodes();
                } catch (...) {}
                json_object_object_add(jobj, "cluster_vacuum",
                                       json_object_new_boolean(true));
                json_object_object_add(jobj, "cluster_nodes_vacuumed",
                                       json_object_new_int64(static_cast<int64_t>(nodes_ok)));
                } else {
                    json_object_object_add(jobj, "cluster_vacuum",
                                           json_object_new_boolean(false));
                }
            }

            sendJson(curreq, jobj);
+22 −0
Original line number Diff line number Diff line
@@ -1130,6 +1130,28 @@ namespace authdb {
        return true;
    }

    // --- Vacuum: compact block stores on all nodes (cluster-locked) ---

    size_t Cluster::vacuumAllNodes() {
        if (!scrub_client_) return 0;

        std::unique_lock<std::mutex> scrub_lk(scrub_mutex_, std::try_to_lock);
        if (!scrub_lk.owns_lock()) {
            std::cerr << "[VACUUM] skipped — scrub/rebalance is running" << std::endl;
            return 0;
        }

        if (!scrub_client_->try_scrub_lock()) {
            std::cerr << "[VACUUM] skipped — another node holds the scrub lock" << std::endl;
            return 0;
        }

        size_t result = scrub_client_->vacuum_all_nodes();

        scrub_client_->release_scrub_lock();
        return result;
    }

    // --- Scrub: verify and repair all data groups ---

    Cluster::ScrubResult Cluster::scrub() {
+3 −0
Original line number Diff line number Diff line
@@ -161,6 +161,9 @@ namespace authdb {
        std::unique_ptr<paritypp::client> &getReadClient() { return read_client_; }
        std::unique_ptr<paritypp::client> &getSessionReadClient() { return session_read_client_; }

        // Vacuum all cluster nodes (acquires cluster-wide scrub lock)
        size_t vacuumAllNodes();

        // Push a session to the cluster (after local addSession)
        void pushSession(const SessionData &sess);