From: Kyotaro Horiguchi Date: Wed, 29 May 2019 23:03:22 +0900 Subject: [PATCH 3/3] Rename smgrDoPendingDeletes to smgrDoPendingOperations The function longer does only deletions but also syncs. Rename the function to reflect that. smgrGetPendingDeletes is not renamed since it does not change behavior. --- src/backend/access/transam/xact.c | 4 +- src/backend/catalog/storage.c | 91 ++++++++++++++++++++------------------- src/include/catalog/storage.h | 2 +- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index f594d33e7a..0123fb0f7f 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2228,7 +2228,7 @@ CommitTransaction(void) * Other backends will observe the attendant catalog changes and not * attempt to access affected files. */ - smgrDoPendingDeletes(true); + smgrDoPendingOperations(true); AtCommit_Notify(); AtEOXact_GUC(true, 1); @@ -2716,7 +2716,7 @@ AbortTransaction(void) ResourceOwnerRelease(TopTransactionResourceOwner, RESOURCE_RELEASE_AFTER_LOCKS, false, true); - smgrDoPendingDeletes(false); + smgrDoPendingOperations(false); AtEOXact_GUC(false, 1); AtEOXact_SPI(false); diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 354a74c27c..544ef3aa55 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -54,18 +54,18 @@ * but I'm being paranoid. */ -/* entry type of pendingDeletes */ -typedef struct PendingRelDelete +/* entry type of pendingOperations */ +typedef struct PendingRelOp { RelFileNode relnode; /* relation that may need to be deleted */ BackendId backend; /* InvalidBackendId if not a temp rel */ bool atCommit; /* T=work at commit; F=work at abort */ PendingOpType op; /* type of operation to do */ int nestLevel; /* xact nesting level of request */ - struct PendingRelDelete *next; /* linked-list link */ -} PendingRelDelete; + struct PendingRelOp *next; /* linked-list link */ +} PendingRelOp; -static PendingRelDelete *pendingDeletes = NULL; /* head of linked list */ +static PendingRelOp *pendingOperations = NULL; /* head of linked list */ /* * RelationCreateStorage @@ -81,7 +81,7 @@ static PendingRelDelete *pendingDeletes = NULL; /* head of linked list */ SMgrRelation RelationCreateStorage(RelFileNode rnode, char relpersistence) { - PendingRelDelete *pending; + PendingRelOp *pending; SMgrRelation srel; BackendId backend; bool needs_wal; @@ -112,15 +112,15 @@ RelationCreateStorage(RelFileNode rnode, char relpersistence) log_smgrcreate(&srel->smgr_rnode.node, MAIN_FORKNUM); /* Add the relation to the list of stuff to delete at abort */ - pending = (PendingRelDelete *) - MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelDelete)); + pending = (PendingRelOp *) + MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelOp)); pending->relnode = rnode; pending->backend = backend; pending->atCommit = false; /* delete if abort */ pending->op = PENDING_DELETE; pending->nestLevel = GetCurrentTransactionNestLevel(); - pending->next = pendingDeletes; - pendingDeletes = pending; + pending->next = pendingOperations; + pendingOperations = pending; /* * We are going to skip WAL-logging for storage of persistent relations @@ -129,15 +129,15 @@ RelationCreateStorage(RelFileNode rnode, char relpersistence) */ if (relpersistence == RELPERSISTENCE_PERMANENT && !XLogIsNeeded()) { - pending = (PendingRelDelete *) - MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelDelete)); + pending = (PendingRelOp *) + MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelOp)); pending->relnode = rnode; pending->backend = backend; pending->atCommit = true; pending->op = PENDING_SYNC; pending->nestLevel = GetCurrentTransactionNestLevel(); - pending->next = pendingDeletes; - pendingDeletes = pending; + pending->next = pendingOperations; + pendingOperations = pending; } return srel; @@ -169,27 +169,27 @@ log_smgrcreate(const RelFileNode *rnode, ForkNumber forkNum) void RelationDropStorage(Relation rel) { - PendingRelDelete *pending; + PendingRelOp *pending; /* Add the relation to the list of stuff to delete at commit */ - pending = (PendingRelDelete *) - MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelDelete)); + pending = (PendingRelOp *) + MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelOp)); pending->relnode = rel->rd_node; pending->backend = rel->rd_backend; pending->atCommit = true; /* delete if commit */ pending->op = PENDING_DELETE; pending->nestLevel = GetCurrentTransactionNestLevel(); - pending->next = pendingDeletes; - pendingDeletes = pending; + pending->next = pendingOperations; + pendingOperations = pending; /* * NOTE: if the relation was created in this transaction, it will now be * present in the pending-delete list twice, once with atCommit true and * once with atCommit false. Hence, it will be physically deleted at end * of xact in either case (and the other entry will be ignored by - * smgrDoPendingDeletes, so no error will occur). We could instead remove - * the existing list entry and delete the physical file immediately, but - * for now I'll keep the logic simple. + * smgrDoPendingOperations, so no error will occur). We could instead + * remove the existing list entry and delete the physical file + * immediately, but for now I'll keep the logic simple. */ RelationCloseSmgr(rel); @@ -215,12 +215,12 @@ RelationDropStorage(Relation rel) void RelationPreserveStorage(RelFileNode rnode, bool atCommit) { - PendingRelDelete *pending; - PendingRelDelete *prev; - PendingRelDelete *next; + PendingRelOp *pending; + PendingRelOp *prev; + PendingRelOp *next; prev = NULL; - for (pending = pendingDeletes; pending != NULL; pending = next) + for (pending = pendingOperations; pending != NULL; pending = next) { next = pending->next; if (RelFileNodeEquals(rnode, pending->relnode) @@ -231,7 +231,7 @@ RelationPreserveStorage(RelFileNode rnode, bool atCommit) if (prev) prev->next = next; else - pendingDeletes = next; + pendingOperations = next; pfree(pending); /* prev does not change */ } @@ -409,7 +409,8 @@ RelationCopyStorage(SMgrRelation src, SMgrRelation dst, } /* - * smgrDoPendingDeletes() -- Take care of relation deletes at end of xact. + * smgrDoPendingOperations() -- Take care of relation deletes and syncs at + * end of xact. * * This also runs when aborting a subxact; we want to clean up a failed * subxact immediately. @@ -420,12 +421,12 @@ RelationCopyStorage(SMgrRelation src, SMgrRelation dst, * already recovered the physical storage. */ void -smgrDoPendingDeletes(bool isCommit) +smgrDoPendingOperations(bool isCommit) { int nestLevel = GetCurrentTransactionNestLevel(); - PendingRelDelete *pending; - PendingRelDelete *prev; - PendingRelDelete *next; + PendingRelOp *pending; + PendingRelOp *prev; + PendingRelOp *next; int nrels = 0, i = 0, maxrels = 0; @@ -433,7 +434,7 @@ smgrDoPendingDeletes(bool isCommit) struct HTAB *synchash = NULL; prev = NULL; - for (pending = pendingDeletes; pending != NULL; pending = next) + for (pending = pendingOperations; pending != NULL; pending = next) { next = pending->next; if (pending->nestLevel < nestLevel) @@ -447,7 +448,7 @@ smgrDoPendingDeletes(bool isCommit) if (prev) prev->next = next; else - pendingDeletes = next; + pendingOperations = next; /* do deletion if called for */ if (pending->atCommit == isCommit) { @@ -576,10 +577,10 @@ smgrGetPendingOperations(PendingOpType op, bool forCommit, RelFileNode **ptr) int nestLevel = GetCurrentTransactionNestLevel(); int nrels; RelFileNode *rptr; - PendingRelDelete *pending; + PendingRelOp *pending; nrels = 0; - for (pending = pendingDeletes; pending != NULL; pending = pending->next) + for (pending = pendingOperations; pending != NULL; pending = pending->next) { if (pending->nestLevel >= nestLevel && pending->atCommit == forCommit && pending->backend == InvalidBackendId @@ -593,7 +594,7 @@ smgrGetPendingOperations(PendingOpType op, bool forCommit, RelFileNode **ptr) } rptr = (RelFileNode *) palloc(nrels * sizeof(RelFileNode)); *ptr = rptr; - for (pending = pendingDeletes; pending != NULL; pending = pending->next) + for (pending = pendingOperations; pending != NULL; pending = pending->next) { if (pending->nestLevel >= nestLevel && pending->atCommit == forCommit && pending->backend == InvalidBackendId @@ -630,13 +631,13 @@ smgrGetPendingSyncs(bool forCommit, RelFileNode **ptr) void PostPrepare_smgr(void) { - PendingRelDelete *pending; - PendingRelDelete *next; + PendingRelOp *pending; + PendingRelOp *next; - for (pending = pendingDeletes; pending != NULL; pending = next) + for (pending = pendingOperations; pending != NULL; pending = next) { next = pending->next; - pendingDeletes = next; + pendingOperations = next; /* must explicitly free the list entry */ pfree(pending); } @@ -646,15 +647,15 @@ PostPrepare_smgr(void) /* * AtSubCommit_smgr() --- Take care of subtransaction commit. * - * Reassign all items in the pending-deletes list to the parent transaction. + * Reassign all items in the pending-operations list to the parent transaction. */ void AtSubCommit_smgr(void) { int nestLevel = GetCurrentTransactionNestLevel(); - PendingRelDelete *pending; + PendingRelOp *pending; - for (pending = pendingDeletes; pending != NULL; pending = pending->next) + for (pending = pendingOperations; pending != NULL; pending = pending->next) { if (pending->nestLevel >= nestLevel) pending->nestLevel = nestLevel - 1; @@ -671,7 +672,7 @@ AtSubCommit_smgr(void) void AtSubAbort_smgr(void) { - smgrDoPendingDeletes(false); + smgrDoPendingOperations(false); } void diff --git a/src/include/catalog/storage.h b/src/include/catalog/storage.h index 1de6f1655c..dcb3bc4b69 100644 --- a/src/include/catalog/storage.h +++ b/src/include/catalog/storage.h @@ -37,7 +37,7 @@ extern void RelationCopyStorage(SMgrRelation src, SMgrRelation dst, * These functions used to be in storage/smgr/smgr.c, which explains the * naming */ -extern void smgrDoPendingDeletes(bool isCommit); +extern void smgrDoPendingOperations(bool isCommit); extern int smgrGetPendingDeletes(bool forCommit, RelFileNode **ptr); extern int smgrGetPendingSyncs(bool forCommit, RelFileNode **ptr); extern void AtSubCommit_smgr(void); -- 2.16.3 ----Next_Part(Wed_Aug_21_16_32_38_2019_483)----