Skip to content

Commit 0184429

Browse files
authored
Merge branch 'main' into jucei
2 parents 511de97 + c80e93d commit 0184429

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

src/backend/cdb/cdbappendonlystoragewrite.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ AppendOnlyStorageWrite_TransactionCreateFile(AppendOnlyStorageWrite *storageWrit
271271
// WALREP_FIXME: Pass isRedo == true, so that you don't get an error if it
272272
// exists already. That's currently OK, but in the future, other things
273273
// might depend on the isRedo flag, like whether to WAL-log the creation.
274-
smgrcreate_ao(*relFileNode, segmentFileNum, true);
274+
smgrcreate_ao(storageWrite->smgrAO, *relFileNode, segmentFileNum, true);
275275

276276
/*
277277
* Create a WAL record, so that the segfile is also created after crash or

src/backend/storage/smgr/smgr.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ static File AORelOpenSegFileXlog(RelFileNode node, int32 segmentFileNum, int fil
127127
static const f_smgr_ao smgrswao[] = {
128128
/* regular file */
129129
{
130+
.smgr_create_ao = mdcreate_ao,
130131
.smgr_FileClose = FileClose,
131132
.smgr_FileDiskSize = FileDiskSize,
132133
.smgr_FileTruncate = FileTruncate,
@@ -492,9 +493,16 @@ smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
492493
* already because we are in a WAL replay sequence.
493494
*/
494495
void
495-
smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo)
496+
smgrcreate_ao(const struct f_smgr_ao *smgr,
497+
RelFileNodeBackend rnode,
498+
int32 segmentFileNum, bool isRedo)
496499
{
497-
mdcreate_ao(rnode, segmentFileNum, isRedo);
500+
/* If we get there, check that provided smgr structure is sane.
501+
* First off all, outer Appendonly IO utilities should
502+
* pass valid smgr. Also, in-kernel smgr interface implementation
503+
* smgr_create_ao as mdcreate_ao, and extension should define its own. */
504+
Assert(smgr != NULL && smgr->smgr_create_ao != NULL);
505+
smgr->smgr_create_ao(rnode, segmentFileNum, isRedo);
498506
if (file_create_hook)
499507
(*file_create_hook)(rnode);
500508
}

src/include/storage/smgr.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ typedef struct f_smgr
155155
} f_smgr;
156156

157157
typedef struct f_smgr_ao {
158+
void (*smgr_create_ao) (RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo);
158159
off_t (*smgr_FileDiskSize) (File file);
159160
void (*smgr_FileClose) (File file);
160161
int (*smgr_FileTruncate) (File file, int64 offset, uint32 wait_event_info);
@@ -193,7 +194,9 @@ extern void smgrclose(SMgrRelation reln);
193194
extern void smgrcloseall(void);
194195
extern void smgrclosenode(RelFileNodeBackend rnode);
195196
extern void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo);
196-
extern void smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo);
197+
extern void smgrcreate_ao(const struct f_smgr_ao *smgr,
198+
RelFileNodeBackend rnode,
199+
int32 segmentFileNum, bool isRedo);
197200
extern void smgrdosyncall(SMgrRelation *rels, int nrels);
198201
extern void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo);
199202
extern void smgrextend(SMgrRelation reln, ForkNumber forknum,

0 commit comments

Comments
 (0)