On 1/15/21 9:54 AM, Phil Stracchino wrote: > I will TRY to find time to look at the code and see whether I can patch > it myself and test. I might get time today or this weekend.
Actually, I managed to fit in a look right now. I've now rebuilt with the following patch: _____ --- src/cats/sql_create.c.orig 2020-12-10 08:26:39.000000000 -0500 +++ src/cats/sql_create.c 2021-01-15 10:31:47.537191261 -0500 @@ -581,11 +581,15 @@ return 1; } sql_free_result(); } - Mmsg(cmd, "INSERT INTO Path (Path) VALUES ('%s')", esc_name); +/** + * Use INSERT IGNORE or REPLACE INTO here to avoid failure in the + * event of a race condition between jobs + */ + Mmsg(cmd, "INSERT IGNORE INTO Path (Path) VALUES ('%s')", esc_name); if ((ar->PathId = sql_insert_autokey_record(cmd, NT_("Path"))) == 0) { Mmsg2(&errmsg, _("Create db Path record %s failed. ERR=%s\n"), cmd, sql_strerror()); Jmsg(jcr, M_FATAL, 0, "%s", errmsg); @@ -1006,11 +1010,15 @@ return ar->FilenameId > 0; } sql_free_result(); } - Mmsg(cmd, "INSERT INTO Filename (Name) VALUES ('%s')", esc_name); +/** + * Use INSERT IGNORE or REPLACE INTO here to avoid failure in the + * event of a race condition between jobs + */ + Mmsg(cmd, "INSERT IGNORE INTO Filename (Name) VALUES ('%s')", esc_name); ar->FilenameId = sql_insert_autokey_record(cmd, NT_("Filename")); if (ar->FilenameId == 0) { Mmsg2(&errmsg, _("Create db Filename record %s failed. ERR=%s\n"), cmd, sql_strerror()); _____ Manual jobs are running fine. I may have to let it run for a week or two before I have good confidence that this works around the race condition. Either INSERT IGNORE or REPLACE should have the same result here, but their semantics are slightly different. INSERT IGNORE: If the key value already exists, do not insert the row, do nothing. REPLACE INTO: If the key value already exists, delete the row and re-insert. When the row consists ONLY of the key value and the ID, the two are largely functionally equivalent, but I believe that INSERT IGNORE is the correct action here, in addition to being slightly faster. -- Phil Stracchino Babylon Communications 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