From 0d088ed4c637c6417b665597aece10c4eafd883e Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Fri, 31 Dec 2021 12:20:05 +0000 Subject: [PATCH v1] Avoid erroring out when unable to remove or parse logical rewrite files to save checkpoint work Currently the server is erroring out when unable to remove/parse a logical rewrite file in CheckPointLogicalRewriteHeap wasting the amount of work the checkpoint has done and preventing the checkpoint from finishing. This is unlike CheckPointSnapBuild does for snapshot files i.e. it just emits a message at LOG level and continues if it is unable to parse or remove the file. This patch applies the same idea to the mapping files. --- src/backend/access/heap/rewriteheap.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 986a776bbd..a53e89210a 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -1234,19 +1234,36 @@ CheckPointLogicalRewriteHeap(void) if (strncmp(mapping_de->d_name, "map-", 4) != 0) continue; + /* + * We just log a message if a file doesn't fit the pattern, it's + * probably some editors lock/state file or similar... + */ if (sscanf(mapping_de->d_name, LOGICAL_REWRITE_FORMAT, &dboid, &relid, &hi, &lo, &rewrite_xid, &create_xid) != 6) - elog(ERROR, "could not parse filename \"%s\"", mapping_de->d_name); + { + ereport(LOG, + (errmsg("could not parse file name \"%s\"", mapping_de->d_name))); + continue; + } lsn = ((uint64) hi) << 32 | lo; if (lsn < cutoff || cutoff == InvalidXLogRecPtr) { elog(DEBUG1, "removing logical rewrite file \"%s\"", path); + + /* + * It's not particularly harmful, though strange, if we can't + * remove the file here. Don't prevent the checkpoint from + * completing, that'd be a cure worse than the disease. + */ if (unlink(path) < 0) - ereport(ERROR, + { + ereport(LOG, (errcode_for_file_access(), errmsg("could not remove file \"%s\": %m", path))); + continue; + } } else { -- 2.25.1