提交 dc8e7ebc 编写于 作者: H Hongze Cheng

fix invalid write

上级 218e83f4
...@@ -382,7 +382,7 @@ int tsdbGetNextMaxTables(int tid) { ...@@ -382,7 +382,7 @@ int tsdbGetNextMaxTables(int tid) {
int maxTables = TSDB_INIT_NTABLES; int maxTables = TSDB_INIT_NTABLES;
while (true) { while (true) {
maxTables = MIN(maxTables, TSDB_MAX_TABLES); maxTables = MIN(maxTables, TSDB_MAX_TABLES);
if (tid <= maxTables + 1) break; if (tid <= maxTables) break;
maxTables *= 2; maxTables *= 2;
} }
......
...@@ -781,7 +781,9 @@ static int tsdbAddTableToMeta(STsdbRepo *pRepo, STable *pTable, bool addIdx, boo ...@@ -781,7 +781,9 @@ static int tsdbAddTableToMeta(STsdbRepo *pRepo, STable *pTable, bool addIdx, boo
goto _err; goto _err;
} }
} else { } else {
if (TABLE_TID(pTable) >= pMeta->maxTables) {
if (tsdbAdjustMetaTables(pRepo, TABLE_TID(pTable)) < 0) goto _err; if (tsdbAdjustMetaTables(pRepo, TABLE_TID(pTable)) < 0) goto _err;
}
if (TABLE_TYPE(pTable) == TSDB_CHILD_TABLE && addIdx) { // add STABLE to the index if (TABLE_TYPE(pTable) == TSDB_CHILD_TABLE && addIdx) { // add STABLE to the index
if (tsdbAddTableIntoIndex(pMeta, pTable, true) < 0) { if (tsdbAddTableIntoIndex(pMeta, pTable, true) < 0) {
tsdbDebug("vgId:%d failed to add table %s to meta while add table to index since %s", REPO_ID(pRepo), tsdbDebug("vgId:%d failed to add table %s to meta while add table to index since %s", REPO_ID(pRepo),
...@@ -789,6 +791,7 @@ static int tsdbAddTableToMeta(STsdbRepo *pRepo, STable *pTable, bool addIdx, boo ...@@ -789,6 +791,7 @@ static int tsdbAddTableToMeta(STsdbRepo *pRepo, STable *pTable, bool addIdx, boo
goto _err; goto _err;
} }
} }
ASSERT(TABLE_TID(pTable) < pMeta->maxTables);
pMeta->tables[TABLE_TID(pTable)] = pTable; pMeta->tables[TABLE_TID(pTable)] = pTable;
pMeta->nTables++; pMeta->nTables++;
} }
...@@ -1271,7 +1274,7 @@ static int tsdbRmTableFromMeta(STsdbRepo *pRepo, STable *pTable) { ...@@ -1271,7 +1274,7 @@ static int tsdbRmTableFromMeta(STsdbRepo *pRepo, STable *pTable) {
static int tsdbAdjustMetaTables(STsdbRepo *pRepo, int tid) { static int tsdbAdjustMetaTables(STsdbRepo *pRepo, int tid) {
STsdbMeta *pMeta = pRepo->tsdbMeta; STsdbMeta *pMeta = pRepo->tsdbMeta;
if (pMeta->maxTables >= tid) return 0; ASSERT(tid >= pMeta->maxTables);
int maxTables = tsdbGetNextMaxTables(tid); int maxTables = tsdbGetNextMaxTables(tid);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册