From 5dbaf33cbdb5aa5ed7b2ff405838e9978a9200d2 Mon Sep 17 00:00:00 2001 From: muyulinzhong Date: Tue, 13 Aug 2024 17:43:26 +0800 Subject: [PATCH] =?UTF-8?q?[bugFix]=E4=BF=AE=E6=94=B9fd=20=3D=200=E7=9A=84?= =?UTF-8?q?dss=E5=BC=82=E5=B8=B8=E5=9C=BA=E6=99=AF=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/storage/smgr/segment/data_file.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gausskernel/storage/smgr/segment/data_file.cpp b/src/gausskernel/storage/smgr/segment/data_file.cpp index 16253c639..e345a98c4 100644 --- a/src/gausskernel/storage/smgr/segment/data_file.cpp +++ b/src/gausskernel/storage/smgr/segment/data_file.cpp @@ -36,6 +36,8 @@ #include "postmaster/pagerepair.h" #include "ddes/dms/ss_common_attr.h" +#define DSS_FD_CHECK(fd) (ENABLE_DSS) && (fd < DSS_HANDLE_BASE) + static const mode_t SEGMENT_FILE_MODE = S_IWUSR | S_IRUSR; static int dv_open_file(char *filename, int flags, int mode); @@ -492,6 +494,13 @@ void df_open_files(SegLogicFile *sf) void df_extend_internal(SegLogicFile *sf) { int fd = sf->segfiles[sf->file_num - 1].fd; + + if (DSS_FD_CHECK(fd)) { + /* If fd = 0 under the DSS environment, we should open again. */ + char *filename = slice_filename(sf->filename, sf->file_num - 1); + fd = dv_open_file(filename, O_RDWR | PG_BINARY, (int)SEGMENT_FILE_MODE); + sf->segfiles[sf->file_num - 1].fd = fd; + } off_t last_file_size = lseek(fd, 0L, SEEK_END); SegmentCheck(last_file_size <= DF_FILE_SLICE_SIZE);