diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 6bc1a6b46d..d18a251d51 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -2564,6 +2564,12 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) RequestCheckpoint(CHECKPOINT_CAUSE_XLOG); } } + + if (finishing_seg && + !last_iteration && + random() < 0.25 * MAX_RANDOM_VALUE) + ereport(PANIC, + (errmsg("failing at inconvenient time"))); } if (ispartialpage) diff --git a/src/backend/access/transam/xlogarchive.c b/src/backend/access/transam/xlogarchive.c index e14bcf8ea6..8ae533fea6 100644 --- a/src/backend/access/transam/xlogarchive.c +++ b/src/backend/access/transam/xlogarchive.c @@ -511,10 +511,19 @@ void XLogArchiveNotify(const char *xlog) { char archiveStatusPath[MAXPGPATH]; + char archiveStatusDonePath[MAXPGPATH]; FILE *fd; /* insert an otherwise empty file called .ready */ StatusFilePath(archiveStatusPath, xlog, ".ready"); + StatusFilePath(archiveStatusDonePath, xlog, ".done"); + + if (access(archiveStatusPath, F_OK) == 0 || + access(archiveStatusDonePath, F_OK) == 0) + ereport(LOG, + (errmsg("status file already exists for \"%s\"", + xlog))); + fd = AllocateFile(archiveStatusPath, "w"); if (fd == NULL) {