fix: use recursive mutex for relocking ring log buffer in syncNodeDoConfigChange
This commit is contained in:
parent
470441c541
commit
decb17fcb1
|
@ -55,6 +55,7 @@ typedef struct SSyncLogBuffer {
|
|||
int64_t endIndex;
|
||||
int64_t size;
|
||||
TdThreadMutex mutex;
|
||||
TdThreadMutexAttr attr;
|
||||
} SSyncLogBuffer;
|
||||
|
||||
// SSyncLogRepMgr
|
||||
|
|
|
@ -84,6 +84,7 @@ void syncOneReplicaAdvance(SSyncNode* pSyncNode) {
|
|||
}
|
||||
|
||||
void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
|
||||
ASSERT(false && "deprecated");
|
||||
if (pSyncNode == NULL) {
|
||||
sError("pSyncNode is NULL");
|
||||
return;
|
||||
|
|
|
@ -1602,7 +1602,7 @@ void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* pNewConfig, SyncInde
|
|||
|
||||
// Raft 3.6.2 Committing entries from previous terms
|
||||
syncNodeAppendNoop(pSyncNode);
|
||||
syncMaybeAdvanceCommitIndex(pSyncNode);
|
||||
// syncMaybeAdvanceCommitIndex(pSyncNode);
|
||||
|
||||
} else {
|
||||
syncNodeBecomeFollower(pSyncNode, tmpbuf);
|
||||
|
|
|
@ -916,11 +916,24 @@ SSyncLogBuffer* syncLogBufferCreate() {
|
|||
|
||||
ASSERT(pBuf->size == TSDB_SYNC_LOG_BUFFER_SIZE);
|
||||
|
||||
if (taosThreadMutexInit(&pBuf->mutex, NULL) < 0) {
|
||||
if (taosThreadMutexAttrInit(&pBuf->attr) < 0) {
|
||||
sError("failed to init log buffer mutexattr due to %s", strerror(errno));
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
goto _err;
|
||||
}
|
||||
|
||||
if (taosThreadMutexAttrSetType(&pBuf->attr, PTHREAD_MUTEX_RECURSIVE) < 0) {
|
||||
sError("failed to set log buffer mutexattr type due to %s", strerror(errno));
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
goto _err;
|
||||
}
|
||||
|
||||
if (taosThreadMutexInit(&pBuf->mutex, &pBuf->attr) < 0) {
|
||||
sError("failed to init log buffer mutex due to %s", strerror(errno));
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
goto _err;
|
||||
}
|
||||
|
||||
return pBuf;
|
||||
|
||||
_err:
|
||||
|
@ -947,6 +960,7 @@ void syncLogBufferDestroy(SSyncLogBuffer* pBuf) {
|
|||
}
|
||||
syncLogBufferClear(pBuf);
|
||||
(void)taosThreadMutexDestroy(&pBuf->mutex);
|
||||
(void)taosThreadMutexAttrDestroy(&pBuf->attr);
|
||||
(void)taosMemoryFree(pBuf);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg);
|
||||
|
||||
int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapshot) {
|
||||
ASSERT(false && "deplicated");
|
||||
ASSERT(false && "deprecated");
|
||||
// next index
|
||||
SyncIndex nextIndex = syncIndexMgrGetIndex(pSyncNode->pNextIndex, pDestId);
|
||||
|
||||
|
|
Loading…
Reference in New Issue