From d4cfeb1f6c1bc974de33f2987eeb9fa56fb63fe8 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 9 Feb 2023 21:04:11 +0800 Subject: [PATCH] add more test case --- source/dnode/vnode/src/meta/metaQuery.c | 45 ++++++++-------- source/dnode/vnode/src/meta/metaTable.c | 4 +- tests/script/tsim/tagindex/add_index.sim | 2 +- tests/script/tsim/tagindex/perf.sim | 68 ++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 28 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 63009df1f7..45ebfa7fc5 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -1085,7 +1085,10 @@ int32_t metaFilterCreateTime(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) } int32_t valid = 0; - while (1) { + int32_t count = 0; + + static const int8_t TRY_ERROR_LIMIT = 4; + do { void *entryKey = NULL; int32_t nEntryKey = -1; valid = tdbTbcGet(pCursor->pCur, (const void **)&entryKey, &nEntryKey, NULL, NULL); @@ -1094,17 +1097,17 @@ int32_t metaFilterCreateTime(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) SCtimeIdxKey *p = entryKey; int32_t cmp = (*param->filterFunc)((void *)&p->ctime, (void *)&pCtimeKey->ctime, param->type); - if (cmp == 0) taosArrayPush(pUids, &p->uid); - - if (param->reverse == false) { - if (cmp == -1) break; - } else if (param->reverse) { - if (cmp == 1) break; + if (cmp == 0) + taosArrayPush(pUids, &p->uid); + else { + if (count >= TRY_ERROR_LIMIT) { + break; + } } - + count++; valid = param->reverse ? tdbTbcMoveToPrev(pCursor->pCur) : tdbTbcMoveToNext(pCursor->pCur); if (valid < 0) break; - } + } while (1); END: if (pCursor->pMeta) metaULock(pCursor->pMeta); @@ -1139,9 +1142,11 @@ int32_t metaFilterTableName(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) { if (tdbTbcMoveTo(pCursor->pCur, pName, strlen(pName) + 1, &cmp) < 0) { goto END; } - bool first = true; int32_t valid = 0; - while (1) { + int32_t count = 0; + + int32_t TRY_ERROR_LIMIT = 4; + do { void *pEntryKey = NULL, *pEntryVal = NULL; int32_t nEntryKey = -1, nEntryVal = 0; valid = tdbTbcGet(pCursor->pCur, (const void **)pEntryKey, &nEntryKey, (const void **)&pEntryVal, &nEntryVal); @@ -1152,16 +1157,17 @@ int32_t metaFilterTableName(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) { if (cmp == 0) { tb_uid_t tuid = *(tb_uid_t *)pEntryVal; taosArrayPush(pUids, &tuid); - } else if (cmp == 1) { - // next } else { - break; + if (count >= TRY_ERROR_LIMIT) { + break; + } } + count++; valid = param->reverse ? tdbTbcMoveToPrev(pCursor->pCur) : tdbTbcMoveToNext(pCursor->pCur); if (valid < 0) { break; } - } + } while (1); END: if (pCursor->pMeta) metaULock(pCursor->pMeta); @@ -1260,11 +1266,6 @@ int32_t metaFilterTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) { if (tdbTbcMoveTo(pCursor->pCur, pKey, nKey, &cmp) < 0) { goto END; } - // if (param->reverse) { - // if (tdbTbcMoveToNext(pCursor->pCur) < 0) tdbTbcMoveToLast(pCursor->pCur); - // } else { - // if (tdbTbcMoveToPrev(pCursor->pCur) < 0) tdbTbcMoveToFirst(pCursor->pCur); - //} int count = 0; int32_t valid = 0; @@ -1306,11 +1307,7 @@ int32_t metaFilterTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) { tuid = *(tb_uid_t *)(p->data + tDataTypes[pCursor->type].bytes); } taosArrayPush(pUids, &tuid); - } else if (cmp == 1) { - if (count >= TRY_ERROR_LIMIT) break; - // not match but should continue to iter } else { - // not match and no more result if (count >= TRY_ERROR_LIMIT) break; } count++; diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index a40f0afde1..e102744f33 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -1386,9 +1386,7 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA // save to uid.idx metaUpdateUidIdx(pMeta, &ctbEntry); - if (iCol == 0) { - metaUpdateTagIdx(pMeta, &ctbEntry); - } + metaUpdateTagIdx(pMeta, &ctbEntry); if (NULL == ctbEntry.ctbEntry.pTags) { metaError("meta/table: null tags, update tag val failed."); diff --git a/tests/script/tsim/tagindex/add_index.sim b/tests/script/tsim/tagindex/add_index.sim index f6dd74eeae..4e883ef150 100644 --- a/tests/script/tsim/tagindex/add_index.sim +++ b/tests/script/tsim/tagindex/add_index.sim @@ -7,7 +7,7 @@ print ======== step0 $dbPrefix = ta_3_db $tbPrefix = ta_3_tb $mtPrefix = ta_3_mt -$tbNum = 6 +$tbNum = 100 $rowNum = 20 $totalNum = 200 diff --git a/tests/script/tsim/tagindex/perf.sim b/tests/script/tsim/tagindex/perf.sim index e69de29bb2..9849f458a3 100644 --- a/tests/script/tsim/tagindex/perf.sim +++ b/tests/script/tsim/tagindex/perf.sim @@ -0,0 +1,68 @@ + +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print ======== step0 +$dbPrefix = ta_3_db +$tbPrefix = ta_3_tb +$mtPrefix = ta_3_mt +$tbNum = 10000 +$rowNum = 20 +$totalNum = 200 + +print =============== create database +sql create database $dbPrefix +sql use $dbPrefix + +print =============== create super table and register tag index +sql create table if not exists $mtPrefix (ts timestamp, c1 int) tags (t1 int, t2 int, t3 int, t4 int, t5 int) + +sql show stables +if $rows != 1 then + return -1 +endi + +print =============== create child table + +$i = 0 +while $i < $tbNum + $tb = $tbPrefix . $i + sql create table $tb using $mtPrefix tags( $i , $i , $i , $i , $i ); + $i = $i + 1 +endw + +sql show tables +if $rows != $tbNum then + return -1 +endi + + + +print =============== insert data into each table +$i = 0 +while $i < $tbNum + $tb = $tbPrefix . $i + sql insert into $tb values(now, $i ); + $i = $i + 1 +endw + +print ========== filter data + +$i = 0 +while $i < $tbNum + sql select count(*) from $mtPrefix where t2 = $i + $i = $i + 1 +endw + +sql create index ti2 on $mtPrefix (t2) + + +$i = 0 +while $i < $tbNum + sql select count(*) from $mtPrefix where t2 = $i + $i = $i + 1 +endw + +#system sh/exec.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file