Fixed now.

This is the CORRECTED patch to bvfs.c to make .bvfs_update stay under the 128K-row transaction limit for Galera 3.



--- bacula-15.0.2/src/cats/bvfs.c.orig  2024-03-22 05:48:41.000000000 -0400
+++ bacula-15.0.2/src/cats/bvfs.c       2024-05-13 18:44:03.553492388 -0400
@@ -723,10 +723,11 @@
 }

 void bvfs_update_cache(JCR *jcr, BDB *mdb)
 {
    uint32_t nb=0;
+   int dc = 0;
    db_list_ctx jobids_list;

    mdb->bdb_lock();

 #ifdef xxx
@@ -776,17 +777,22 @@

    mdb->bdb_sql_query(mdb->cmd, db_list_handler, &jobids_list);

    bvfs_update_path_hierarchy_cache(jcr, mdb, jobids_list.list);

-   mdb->bdb_start_transaction(jcr);
-   Dmsg0(dbglevel, "Cleaning pathvisibility\n");
-   Mmsg(mdb->cmd,
-        "DELETE FROM PathVisibility "
-         "WHERE NOT EXISTS "
-        "(SELECT 1 FROM Job WHERE JobId=PathVisibility.JobId)");
-   nb = mdb->DeleteDB(jcr, mdb->cmd);
+   do {
+        mdb->bdb_start_transaction(jcr);
+        Dmsg0(dbglevel, "Cleaning pathvisibility\n");
+        Mmsg(mdb->cmd,
+            "DELETE FROM PathVisibility "
+            "WHERE NOT EXISTS "
+ "(SELECT 1 FROM Job WHERE JobId=PathVisibility.JobId) LIMIT 100000");
+        dc = mdb->DeleteDB(jcr, mdb->cmd);
+        nb += dc;
+    }
+   while (dc == 100000);
+
    Dmsg1(dbglevel, "Affected row(s) = %d\n", nb);

    mdb->bdb_end_transaction(jcr);
    mdb->bdb_unlock();
 }




--
  Phil Stracchino
  Fenian House Publishing
  ph...@caerllewys.net
  p...@co.ordinate.org
  Landline: +1.603.293.8485
  Mobile:   +1.603.998.6958



_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to