This is an automated email from the ASF dual-hosted git repository.
reshke pushed a commit to branch REL_2_STABLE
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/REL_2_STABLE by this push:
new 4593991494d Fix extnesible SMGR API violation in
register_dirty_segment_ao (#1917)
4593991494d is described below
commit 4593991494dd109a48ba74fffde400c94a39be0e
Author: reshke <[email protected]>
AuthorDate: Sun Aug 23 18:53:10 2026 +0500
Fix extnesible SMGR API violation in register_dirty_segment_ao (#1917)
$subj, in CBDB we allow extension to hijack all SMGR calls via
interface, but register_dirty_segment_ao didn't follow the memo.
Exntension that need this is Yezzey
---
src/backend/cdb/cdbappendonlyxlog.c | 2 +-
src/backend/storage/smgr/md.c | 4 ++--
src/include/access/aomd.h | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/backend/cdb/cdbappendonlyxlog.c
b/src/backend/cdb/cdbappendonlyxlog.c
index 0e9e96d7913..6b717978b31 100644
--- a/src/backend/cdb/cdbappendonlyxlog.c
+++ b/src/backend/cdb/cdbappendonlyxlog.c
@@ -109,7 +109,7 @@ ao_insert_replay(XLogReaderState *record)
register_dirty_segment_ao(xlrec->target.node,
xlrec->target.segment_filenum,
- file);
+ file, smgr->smgr_ao);
smgr->smgr_ao->smgr_FileClose(file);
}
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index c3553adc065..92b8f98544e 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -1052,7 +1052,7 @@ register_dirty_segment(SMgrRelation reln, ForkNumber
forknum, MdfdVec *seg)
* for AO segment files.
*/
void
-register_dirty_segment_ao(RelFileNode rnode, int segno, File vfd)
+register_dirty_segment_ao(RelFileNode rnode, int segno, File vfd, const struct
f_smgr_ao *smgrao)
{
FileTag tag;
@@ -1063,7 +1063,7 @@ register_dirty_segment_ao(RelFileNode rnode, int segno,
File vfd)
ereport(DEBUG1,
(errmsg("could not forward AO fsync request
because request queue is full")));
- if (FileSync(vfd, WAIT_EVENT_DATA_FILE_SYNC) < 0)
+ if (smgrao->smgr_FileSync(vfd, WAIT_EVENT_DATA_FILE_SYNC) < 0)
ereport(data_sync_elevel(ERROR),
(errcode_for_file_access(),
errmsg("could not fsync AO file
\"%s\": %m",
diff --git a/src/include/access/aomd.h b/src/include/access/aomd.h
index 0283df12d35..10e77735900 100644
--- a/src/include/access/aomd.h
+++ b/src/include/access/aomd.h
@@ -69,7 +69,7 @@ typedef bool (*ao_extent_callback)(int segno, void *ctx);
extern void ao_foreach_extent_file(ao_extent_callback callback, void *ctx);
-extern void register_dirty_segment_ao(RelFileNode rnode, int segno, File vfd);
+extern void register_dirty_segment_ao(RelFileNode rnode, int segno, File vfd,
const struct f_smgr_ao *smgrao);
extern uint64 ao_rel_get_physical_size(Relation aorel);
#endif /* AOMD_H */
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]