- /* What do we do? When do we use FS_CREATE?
- *
- * TYPE change: AFS->ERR, ERR->AFS: rename/unmount/remount
- * LOCKERTYPE change: rename/remount
- * PACK change: remount
- * LABEL change: rename/remount
- * Deletion: rename/unmount
- */
- if (afterc < FS_CREATE) {
- if (!strcmp(before[FS_TYPE], "AFS"))
- critical_alert("incremental",
- "Could not delete AFS filesystem %s: Operation not supported",
- before[FS_NAME]);
- return;
+ sleep(1); /* give ptserver room */
+
+ while (code = (*fn)(a1, a2, a3, a4, a5, a6, a7, a8)) {
+#ifdef DEBUG
+ long t;
+ t = time(0);
+ if (fn == pr_AddToGroup) strcpy(fname, "pr_AddToGroup");
+ else if (fn == pr_RemoveUserFromGroup)
+ strcpy(fname, "pr_RemoveUserFromGroup");
+ else if (fn == pr_CreateUser) strcpy(fname, "pr_CreateUser");
+ else if (fn == pr_CreateGroup) strcpy(fname, "pr_CreateGroup");
+ else if (fn == pr_DeleteByID) strcpy(fname, "pr_DeleteByID");
+ else if (fn == pr_ChangeEntry) strcpy(fname, "pr_ChangeEntry");
+ else if (fn == pr_SetFieldsEntry) strcpy(fname, "pr_SetFieldsEntry");
+ else if (fn == pr_AddToGroup) strcpy(fname, "pr_AddToGroup");
+ else
+ sprintf(fname, "pr_??? (0x%08x)", (long)fn);
+
+ com_err(whoami, code, "- %s failed (try %d @%u)", fname, tries+1, t);
+#endif
+ if (++tries > 2) break; /* 3 tries */
+
+ if (code == UNOQUORUM) sleep(90);
+ else sleep(15);
+
+ /* Re-initialize the prdb connection */
+ code=pr_Initialize(0, AFSCONF_CLIENTNAME, 0);
+ if (!code) code=pr_Initialize(1, AFSCONF_CLIENTNAME, 0);
+ if (code) {
+ critical_alert("incremental", "Couldn't re-initialize libprot: %s",
+ error_message(code));
+ initd = 0; /* we lost */
+ break;
+ }