modified: src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp

modified:   src/gausskernel/ddes/adapter/ss_dms_callback.cpp
	modified:   src/gausskernel/process/threadpool/knl_instance.cpp
	modified:   src/gausskernel/storage/buffer/bufmgr.cpp
	modified:   src/gausskernel/storage/smgr/segment/segbuffer.cpp
	modified:   src/include/ddes/dms/ss_dms_recovery.h
	modified:   src/include/knl/knl_thread.h

	modified:   gausskernel/storage/buffer/bufmgr.cpp
	modified:   gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   segbuffer.cpp

	modified:   gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   ddes/adapter/ss_dms_bufmgr.cpp
	modified:   storage/smgr/segment/segbuffer.cpp

	modified:   gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   src/gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   gausskernel/storage/buffer/bufmgr.cpp
	modified:   gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   gausskernel/storage/buffer/bufmgr.cpp

	modified:   gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   gausskernel/ddes/adapter/ss_dms_callback.cpp
	modified:   gausskernel/process/threadpool/knl_instance.cpp
	modified:   gausskernel/storage/buffer/bufmgr.cpp
	modified:   include/ddes/dms/ss_dms_recovery.h

	modified:   src/gausskernel/ddes/adapter/ss_dms_callback.cpp
	modified:   src/gausskernel/process/threadpool/knl_instance.cpp
	modified:   src/gausskernel/storage/buffer/bufmgr.cpp
	modified:   src/include/ddes/dms/ss_dms_recovery.h

	modified:   src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   src/gausskernel/storage/buffer/bufmgr.cpp
	modified:   src/gausskernel/storage/smgr/segment/segbuffer.cpp

	modified:   src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp
	modified:   src/gausskernel/ddes/adapter/ss_dms_callback.cpp
	modified:   src/gausskernel/process/threadpool/knl_instance.cpp
	modified:   src/gausskernel/storage/buffer/bufmgr.cpp
	modified:   src/gausskernel/storage/smgr/segment/segbuffer.cpp
	modified:   src/include/ddes/dms/ss_dms_recovery.h
This commit is contained in:
钟承志
2024-11-20 09:37:08 +08:00
parent a9d64cfe5e
commit 2ca7da4773
5 changed files with 19 additions and 11 deletions

View File

@ -30,6 +30,7 @@
#include "utils/resowner.h"
#include "ddes/dms/ss_dms_bufmgr.h"
#include "ddes/dms/ss_reform_common.h"
#include "ddes/dms/ss_dms_recovery.h"
#include "securec_check.h"
#include "miscadmin.h"
#include "access/double_write.h"
@ -477,12 +478,10 @@ Buffer DmsReadSegPage(Buffer buffer, LWLockMode mode, ReadBufferMode read_mode,
if (buf_ctrl->state & BUF_IS_RELPERSISTENT_TEMP) {
return buffer;
}
if (!DmsCheckBufAccessible()) {
*with_io = false;
return 0;
}
if (!DmsStartBufferIO(buf_desc, mode)) {
if (!DmsCheckBufAccessible()) {
*with_io = false;

View File

@ -88,6 +88,7 @@
#include "ddes/dms/ss_common_attr.h"
#include "ddes/dms/ss_reform_common.h"
#include "ddes/dms/ss_transaction.h"
#include "knl/knl_thread.h"
const int ONE_MILLISECOND = 1;
const int TEN_MICROSECOND = 10;
@ -2589,6 +2590,10 @@ Buffer ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber fork
*/
} else if (RecoveryInProgress()) {
BlockNumber totalBlkNum = smgrnblocks_cached(smgr, forkNum);
/* when in failover, should return to worker thread exit */
if (SS_IN_FAILOVER && SS_AM_BACKENDS_WORKERS) {
return InvalidBuffer;
}
/* Update cached blocks */
if (totalBlkNum == InvalidBlockNumber || blockNum >= totalBlkNum) {
@ -2785,7 +2790,7 @@ found_branch:
return InvalidBuffer;
}
/* when in failover, should return to worker thread exit */
if ((SS_IN_FAILOVER) && ((t_thrd.role == WORKER) || (t_thrd.role == THREADPOOL_WORKER))) {
if (SS_IN_FAILOVER && SS_AM_BACKENDS_WORKERS) {
SSUnPinBuffer(bufHdr);
return InvalidBuffer;
}
@ -3333,6 +3338,11 @@ retry_new_buffer:
return buf;
}
/* when in failover, should return to worker thread exit */
if (SS_IN_FAILOVER && SS_AM_BACKENDS_WORKERS) {
ClearReadHint(buf->buf_id, true);
break;
}
/*
* Somebody could have pinned or re-dirtied the buffer while we were
* doing the I/O and making the new hashtable entry. If so, we can't
@ -3353,11 +3363,6 @@ retry_new_buffer:
ClearReadHint(buf->buf_id, true);
break;
}
/* when in failover, woker thread should return InvalidBuffer and exit */
if (SS_IN_FAILOVER && ((t_thrd.role == WORKER) || (t_thrd.role == THREADPOOL_WORKER))) {
ClearReadHint(buf->buf_id, true);
break;
}
} else {
break;
}
@ -6355,7 +6360,7 @@ retry:
}
bool with_io_in_progress = true;
/* when in failover, should return to worker thread exit */
if ((SS_IN_FAILOVER) && ((t_thrd.role == WORKER) || (t_thrd.role == THREADPOOL_WORKER))) {
if (SS_IN_FAILOVER && SS_AM_BACKENDS_WORKERS) {
return;
}
if (IsSegmentBufferID(buf->buf_id)) {

View File

@ -34,6 +34,8 @@
#include "pgstat.h"
#include "ddes/dms/ss_dms_bufmgr.h"
#include "replication/ss_disaster_cluster.h"
#include "knl/knl_thread.h"
/*
* Segment buffer, used for segment meta data, e.g., segment head, space map head. We separate segment
* meta data buffer and normal data buffer (in bufmgr.cpp) to avoid potential dead locks.
@ -619,7 +621,7 @@ Buffer ReadBufferFast(SegSpace *spc, RelFileNode rnode, ForkNumber forkNum, Bloc
return InvalidBuffer;
}
/* when in failover, should return to worker thread exit */
if ((SS_IN_FAILOVER) && ((t_thrd.role == WORKER) || (t_thrd.role == THREADPOOL_WORKER))) {
if (SS_IN_FAILOVER && SS_AM_BACKENDS_WORKERS) {
SSUnPinBuffer(bufHdr);
return InvalidBuffer;
}

View File

@ -66,7 +66,6 @@
SS_NORMAL_PRIMARY && g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl > 0)
#define SS_STANDBY_ENABLE_TARGET_RTO (SS_NORMAL_STANDBY && \
SS_ONDEMAND_REALTIME_BUILD_NORMAL && g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl > 0)
#define REFORM_CTRL_VERSION 1
typedef struct st_reformer_ctrl {
uint32 version;

View File

@ -82,6 +82,9 @@
#define MAX_PATH_LEN 1024
extern const int g_reserve_param_num;
#define PARTKEY_VALUE_MAXNUM 64
#define SS_AM_BACKENDS_WORKERS (t_thrd.role == WORKER || \
t_thrd.role == THREADPOOL_WORKER || \
t_thrd.role == TRACK_STMT_CLEANER)
typedef struct ResourceOwnerData* ResourceOwner;
typedef struct logicalLog logicalLog;