Skip to content
Merged

3.3.6 #33934

Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: compat of mountVgId and keepVersion when decode vgroup (#33933)
  • Loading branch information
kailixu authored Dec 16, 2025
commit c51febc8dc626e035bb736255b407f2265a53ada
1 change: 1 addition & 0 deletions source/dnode/mnode/impl/inc/mndDef.h
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ typedef struct {
void* pTsma;
int32_t numOfCachedTables;
int32_t syncConfChangeVer;
int32_t mountVgId;
int64_t keepVersion; // WAL keep version, -1 for disabled
int64_t keepVersionTime; // WAL keep version time
} SVgObj;
Expand Down
27 changes: 23 additions & 4 deletions source/dnode/mnode/impl/src/mndVgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@
#include "mndVgroup.h"
#include "tmisce.h"

#define VGROUP_VER_NUMBER 1
#define VGROUP_RESERVE_SIZE 64
#define VGROUP_VER_COMPAT_MOUNT_KEEP_VER 2
#define VGROUP_VER_NUMBER VGROUP_VER_COMPAT_MOUNT_KEEP_VER
#define VGROUP_RESERVE_SIZE 60
// since 3.3.6.32/3.3.8.6 mountId + keepVersion + keepVersionTime + VGROUP_RESERVE_SIZE = 8 + 8 + 64 = 80
#define DLEN_AFTER_SYNC_CONF_CHANGE_VER 80

static int32_t mndVgroupActionInsert(SSdb *pSdb, SVgObj *pVgroup);
static int32_t mndVgroupActionDelete(SSdb *pSdb, SVgObj *pVgroup);
Expand Down Expand Up @@ -115,6 +118,7 @@ SSdbRaw *mndVgroupActionEncode(SVgObj *pVgroup) {
SDB_SET_INT32(pRaw, dataPos, pVgid->dnodeId, _OVER)
}
SDB_SET_INT32(pRaw, dataPos, pVgroup->syncConfChangeVer, _OVER)
SDB_SET_INT32(pRaw, dataPos, pVgroup->mountVgId, _OVER)
SDB_SET_INT64(pRaw, dataPos, pVgroup->keepVersion, _OVER)
SDB_SET_INT64(pRaw, dataPos, pVgroup->keepVersionTime, _OVER)
SDB_SET_RESERVE(pRaw, dataPos, VGROUP_RESERVE_SIZE, _OVER)
Expand Down Expand Up @@ -172,16 +176,31 @@ SSdbRow *mndVgroupActionDecode(SSdbRaw *pRaw) {
pVgid->syncState = TAOS_SYNC_STATE_LEADER;
}
}
if (dataPos + sizeof(int32_t) + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
if (dataPos + 2 * sizeof(int32_t) + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
SDB_GET_INT32(pRaw, dataPos, &pVgroup->syncConfChangeVer, _OVER)
}

int32_t dlenAfterSyncConfChangeVer = pRaw->dataLen - dataPos;
if (dataPos + sizeof(int32_t) + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
SDB_GET_INT32(pRaw, dataPos, &pVgroup->mountVgId, _OVER)
}
if (dataPos + sizeof(int64_t) + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
SDB_GET_INT64(pRaw, dataPos, &pVgroup->keepVersion, _OVER)
}
if (dataPos + sizeof(int64_t) + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
SDB_GET_INT64(pRaw, dataPos, &pVgroup->keepVersionTime, _OVER)
}
SDB_GET_RESERVE(pRaw, dataPos, VGROUP_RESERVE_SIZE, _OVER)
if (dataPos + VGROUP_RESERVE_SIZE <= pRaw->dataLen) {
SDB_GET_RESERVE(pRaw, dataPos, VGROUP_RESERVE_SIZE, _OVER)
}

if (sver < VGROUP_VER_COMPAT_MOUNT_KEEP_VER) {
if (dlenAfterSyncConfChangeVer == DLEN_AFTER_SYNC_CONF_CHANGE_VER) {
pVgroup->mountVgId = 0;
}
pVgroup->keepVersion = -1;
pVgroup->keepVersionTime = 0;
}

terrno = 0;

Expand Down