From 2f9e6e1fe4e82fbe5fce34b26b9ffe3a4fd0f420 Mon Sep 17 00:00:00 2001 From: dongning12 Date: Fri, 16 Dec 2022 15:47:37 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=85=B1=E4=BA=AB=E5=AD=98=E5=82=A8]=E4=BF=AE?= =?UTF-8?q?=E5=A4=8DCBConfirmConverting=E5=87=BA=E7=8E=B0core?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ddes/adapter/ss_dms_callback.cpp | 23 +++++++++---------- src/include/ddes/dms/ss_dms_callback.h | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 798be40fc..6bb01bd56 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -1065,7 +1065,6 @@ static void SSGetBufferDesc(char *pageid, bool *is_valid, BufferDesc** ret_buf_d { (void)LWLockAcquire(partition_lock, LW_SHARED); buf_id = BufTableLookup(tag, hash); - Assert(buf_id >= 0); if (buf_id >= 0) { buf_desc = GetBufferDescriptor(buf_id); ResourceOwnerEnlargeBuffers(t_thrd.utils_cxt.CurrentResourceOwner); @@ -1118,7 +1117,7 @@ static int CBConfirmOwner(void *db_handle, char *pageid, unsigned char *lock_mod } /* - * not acquire buf_desc->content_lock + * not acquire buf_desc->io_in_progress_lock * consistency guaranteed by reform phase */ buf_ctrl = GetDmsBufCtrl(buf_desc->buf_id); @@ -1156,23 +1155,23 @@ static int CBConfirmConverting(void *db_handle, char *pageid, unsigned char smon struct timeval begin_tv; struct timeval now_tv; (void)gettimeofday(&begin_tv, NULL); - long begin = GET_MS(begin_tv); + long begin = GET_US(begin_tv); long now; while (true) { - (void)gettimeofday(&now_tv, NULL); - now = GET_MS(now_tv); - if (now - begin > REFORM_CONFIRM_TIMEOUT) { - timeout = true; - break; - } - - bool is_locked = LWLockConditionalAcquire(buf_desc->content_lock, LW_EXCLUSIVE); + bool is_locked = LWLockConditionalAcquire(buf_desc->io_in_progress_lock, LW_EXCLUSIVE); if (is_locked) { buf_ctrl = GetDmsBufCtrl(buf_desc->buf_id); *ver = buf_ctrl->ver; *lock_mode = buf_ctrl->lock_mode; - LWLockRelease(buf_desc->content_lock); + LWLockRelease(buf_desc->io_in_progress_lock); + break; + } + + (void)gettimeofday(&now_tv, NULL); + now = GET_US(now_tv); + if (now - begin > REFORM_CONFIRM_TIMEOUT) { + timeout = true; break; } pg_usleep(REFORM_CONFIRM_INTERVAL); /* sleep 5ms */ diff --git a/src/include/ddes/dms/ss_dms_callback.h b/src/include/ddes/dms/ss_dms_callback.h index f10919bf0..233ba8c8d 100644 --- a/src/include/ddes/dms/ss_dms_callback.h +++ b/src/include/ddes/dms/ss_dms_callback.h @@ -28,7 +28,7 @@ /* 5 seconds */ #define REFORM_CONFIRM_TIMEOUT 5000000 #define REFORM_CONFIRM_INTERVAL 5000 -#define GET_MS(tv) (tv.tv_sec * 1000000 + tv.tv_usec) +#define GET_US(tv) ((int64)tv.tv_sec * 1000000U + tv.tv_usec) #define DMS_LOGGER_BUFFER_SIZE 2048 extern void DmsInitCallback(dms_callback_t *callback);