diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 551b0a045742a56bbd879af555185c782a524c76..0eb7d4b0766a68ac7956ba0862b02f6096888736 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -4823,7 +4823,7 @@ static int32_t setTimePrecision(SSqlCmd* pCmd, SCMCreateDbMsg* pMsg, SCreateDBIn static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) { pMsg->maxTables = htonl(pCreateDb->maxTablesPerVnode); pMsg->cacheBlockSize = htonl(pCreateDb->cacheBlockSize); - pMsg->numOfBlocks = htonl(pCreateDb->numOfBlocks); + pMsg->totalBlocks = htonl(pCreateDb->numOfBlocks); pMsg->daysPerFile = htonl(pCreateDb->daysPerFile); pMsg->commitTime = htonl(pCreateDb->commitTime); pMsg->minRowsPerFileBlock = htonl(pCreateDb->minRowsPerBlock); diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 3aa75523eab5b67b19654712a2fed0854f6cd965..92e14985d091c091172e091f3cdea5d0cf90d2f0 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -485,20 +485,20 @@ typedef struct { typedef struct { char acct[TSDB_USER_LEN + 1]; char db[TSDB_DB_NAME_LEN + 1]; - int32_t maxTables; int32_t cacheBlockSize; //MB - int32_t numOfBlocks; + int32_t totalBlocks; + int32_t maxTables; int32_t daysPerFile; + int32_t daysToKeep; int32_t daysToKeep1; int32_t daysToKeep2; - int32_t daysToKeep; - int32_t commitTime; int32_t minRowsPerFileBlock; int32_t maxRowsPerFileBlock; + int32_t commitTime; + uint8_t precision; // time resolution int8_t compression; int8_t walLevel; int8_t replications; - uint8_t precision; // time resolution int8_t ignoreExist; } SCMCreateDbMsg, SCMAlterDbMsg; @@ -563,9 +563,9 @@ typedef struct { typedef struct { uint32_t vgId; int32_t cfgVersion; + int32_t maxTables; int32_t cacheBlockSize; int32_t totalBlocks; - int32_t maxTables; int32_t daysPerFile; int32_t daysToKeep; int32_t daysToKeep1; diff --git a/src/mnode/src/mgmtDb.c b/src/mnode/src/mgmtDb.c index 3f43d4bf8911c9ad8e92c76b788bfcf19d03752d..60e0f5cb1b1e704dc30f65c4d7e72fcd2d837990 100644 --- a/src/mnode/src/mgmtDb.c +++ b/src/mnode/src/mgmtDb.c @@ -187,11 +187,13 @@ static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) { if (pCfg->cacheBlockSize < TSDB_MIN_CACHE_BLOCK_SIZE || pCfg->cacheBlockSize > TSDB_MAX_CACHE_BLOCK_SIZE) { mError("invalid db option cacheBlockSize:%d valid range: [%d, %d]", pCfg->cacheBlockSize, TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MAX_CACHE_BLOCK_SIZE); + return TSDB_CODE_INVALID_OPTION; } if (pCfg->totalBlocks < TSDB_MIN_TOTAL_BLOCKS || pCfg->totalBlocks > TSDB_MAX_TOTAL_BLOCKS) { mError("invalid db option totalBlocks:%d valid range: [%d, %d]", pCfg->totalBlocks, TSDB_MIN_TOTAL_BLOCKS, TSDB_MAX_TOTAL_BLOCKS); + return TSDB_CODE_INVALID_OPTION; } if (pCfg->maxTables < TSDB_MIN_TABLES || pCfg->maxTables > TSDB_MAX_TABLES) { @@ -206,18 +208,22 @@ static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) { } if (pCfg->daysToKeep < TSDB_MIN_KEEP || pCfg->daysToKeep > TSDB_MAX_KEEP) { - mError("invalid db option daysToKeep:%d", pCfg->daysToKeep); + mError("invalid db option daysToKeep:%d valid range: [%d, %d]", pCfg->daysToKeep, TSDB_MIN_KEEP, TSDB_MAX_KEEP); return TSDB_CODE_INVALID_OPTION; } if (pCfg->daysToKeep < pCfg->daysPerFile) { - mError("invalid db option daysToKeep:%d daysPerFile:%d", pCfg->daysToKeep, pCfg->daysPerFile); + mError("invalid db option daysToKeep:%d should larger than daysPerFile:%d", pCfg->daysToKeep, pCfg->daysPerFile); return TSDB_CODE_INVALID_OPTION; } - if (pCfg->minRowsPerFileBlock < TSDB_MIN_MIN_ROW_FBLOCK || pCfg->minRowsPerFileBlock > TSDB_MAX_MIN_ROW_FBLOCK) { - mError("invalid db option minRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->minRowsPerFileBlock, - TSDB_MIN_MIN_ROW_FBLOCK, TSDB_MAX_MIN_ROW_FBLOCK); + if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > pCfg->daysToKeep) { + mError("invalid db option daysToKeep2:%d valid range: [%d, %d]", pCfg->daysToKeep, TSDB_MIN_KEEP, pCfg->daysToKeep); + return TSDB_CODE_INVALID_OPTION; + } + + if (pCfg->daysToKeep1 < TSDB_MIN_KEEP || pCfg->daysToKeep1 > pCfg->daysToKeep2) { + mError("invalid db option daysToKeep1:%d valid range: [%d, %d]", pCfg->daysToKeep1, TSDB_MIN_KEEP, pCfg->daysToKeep2); return TSDB_CODE_INVALID_OPTION; } @@ -227,9 +233,9 @@ static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) { return TSDB_CODE_INVALID_OPTION; } - if (pCfg->minRowsPerFileBlock > pCfg->maxRowsPerFileBlock) { - mError("invalid db option minRowsPerFileBlock:%d maxRowsPerFileBlock:%d", pCfg->minRowsPerFileBlock, - pCfg->maxRowsPerFileBlock); + if (pCfg->minRowsPerFileBlock < TSDB_MIN_MAX_ROW_FBLOCK || pCfg->minRowsPerFileBlock > pCfg->maxRowsPerFileBlock) { + mError("invalid db option minRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->minRowsPerFileBlock, + TSDB_MIN_MAX_ROW_FBLOCK, pCfg->maxRowsPerFileBlock); return TSDB_CODE_INVALID_OPTION; } @@ -252,7 +258,7 @@ static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) { } if (pCfg->walLevel < TSDB_MIN_WAL_LEVEL || pCfg->walLevel > TSDB_MAX_WAL_LEVEL) { - mError("invalid db option walLevel:%d, only 0-2 allowed", pCfg->walLevel); + mError("invalid db option walLevel:%d, valid range: [%d, %d]", pCfg->walLevel, TSDB_MIN_WAL_LEVEL, TSDB_MAX_WAL_LEVEL); return TSDB_CODE_INVALID_OPTION; } @@ -262,6 +268,11 @@ static int32_t mgmtCheckDbCfg(SDbCfg *pCfg) { return TSDB_CODE_INVALID_OPTION; } + if (pCfg->replications > 1 && pCfg->walLevel <= TSDB_MIN_WAL_LEVEL) { + mError("invalid db option walLevel:%d must > 0, while replica:%d > 1", pCfg->walLevel, pCfg->replications); + return TSDB_CODE_INVALID_OPTION; + } + #ifndef _SYNC if (pCfg->replications != 1) { mError("invalid db option replications:%d can only be 1 in this version", pCfg->replications); @@ -314,13 +325,13 @@ static int32_t mgmtCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate) { pDb->createdTime = taosGetTimestampMs(); pDb->cfg = (SDbCfg) { .cacheBlockSize = pCreate->cacheBlockSize, - .totalBlocks = pCreate->numOfBlocks, + .totalBlocks = pCreate->totalBlocks, .maxTables = pCreate->maxTables, .daysPerFile = pCreate->daysPerFile, .daysToKeep = pCreate->daysToKeep, .daysToKeep1 = pCreate->daysToKeep1, .daysToKeep2 = pCreate->daysToKeep2, - .minRowsPerFileBlock = pCreate->maxRowsPerFileBlock, + .minRowsPerFileBlock = pCreate->minRowsPerFileBlock, .maxRowsPerFileBlock = pCreate->maxRowsPerFileBlock, .commitTime = pCreate->commitTime, .precision = pCreate->precision, @@ -735,7 +746,7 @@ static void mgmtProcessCreateDbMsg(SQueuedMsg *pMsg) { pCreate->maxTables = htonl(pCreate->maxTables); pCreate->cacheBlockSize = htonl(pCreate->cacheBlockSize); - pCreate->numOfBlocks = htonl(pCreate->numOfBlocks); + pCreate->totalBlocks = htonl(pCreate->totalBlocks); pCreate->daysPerFile = htonl(pCreate->daysPerFile); pCreate->daysToKeep = htonl(pCreate->daysToKeep); pCreate->daysToKeep1 = htonl(pCreate->daysToKeep1); @@ -763,37 +774,47 @@ static void mgmtProcessCreateDbMsg(SQueuedMsg *pMsg) { static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) { SDbCfg newCfg = pDb->cfg; - int32_t cacheBlockSize = htonl(pAlter->daysToKeep); - int32_t totalBlocks = htonl(pAlter->numOfBlocks); - int32_t maxTables = htonl(pAlter->maxTables); - int32_t daysToKeep = htonl(pAlter->daysToKeep); - int32_t daysToKeep1 = htonl(pAlter->daysToKeep1); - int32_t daysToKeep2 = htonl(pAlter->daysToKeep2); - int8_t compression = pAlter->compression; - int8_t replications = pAlter->replications; - int8_t walLevel = pAlter->walLevel; + int32_t maxTables = htonl(pAlter->maxTables); + int32_t cacheBlockSize = htonl(pAlter->cacheBlockSize); + int32_t totalBlocks = htonl(pAlter->totalBlocks); + int32_t daysPerFile = htonl(pAlter->daysPerFile); + int32_t daysToKeep = htonl(pAlter->daysToKeep); + int32_t daysToKeep1 = htonl(pAlter->daysToKeep1); + int32_t daysToKeep2 = htonl(pAlter->daysToKeep2); + int32_t minRows = htonl(pAlter->minRowsPerFileBlock); + int32_t maxRows = htonl(pAlter->maxRowsPerFileBlock); + int32_t commitTime = htonl(pAlter->commitTime); + int8_t compression = pAlter->compression; + int8_t walLevel = pAlter->walLevel; + int8_t replications = pAlter->replications; + int8_t precision = pAlter->precision; terrno = TSDB_CODE_SUCCESS; if (cacheBlockSize > 0 && cacheBlockSize != pDb->cfg.cacheBlockSize) { - mTrace("db:%s, cache:%d change to %d", pDb->name, pDb->cfg.cacheBlockSize, cacheBlockSize); - newCfg.cacheBlockSize = cacheBlockSize; + mError("db:%s, can't alter cache option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; } if (totalBlocks > 0 && totalBlocks != pDb->cfg.totalBlocks) { - mTrace("db:%s, blocks:%d change to %d", pDb->name, pDb->cfg.totalBlocks, totalBlocks); + mPrint("db:%s, blocks:%d change to %d", pDb->name, pDb->cfg.totalBlocks, totalBlocks); newCfg.totalBlocks = totalBlocks; } - if (maxTables > 0 && maxTables != pDb->cfg.maxTables) { - mTrace("db:%s, tables:%d change to %d", pDb->name, pDb->cfg.maxTables, maxTables); + if (maxTables > 0) { + mPrint("db:%s, maxTables:%d change to %d", pDb->name, pDb->cfg.maxTables, maxTables); newCfg.maxTables = maxTables; if (newCfg.maxTables < pDb->cfg.maxTables) { - mTrace("db:%s, tables:%d should larger than origin:%d", pDb->name, newCfg.maxTables, pDb->cfg.maxTables); + mError("db:%s, tables:%d should larger than origin:%d", pDb->name, newCfg.maxTables, pDb->cfg.maxTables); terrno = TSDB_CODE_INVALID_OPTION; } } + if (daysPerFile > 0 && daysPerFile != pDb->cfg.daysPerFile) { + mError("db:%s, can't alter days option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + if (daysToKeep > 0 && daysToKeep != pDb->cfg.daysToKeep) { mTrace("db:%s, daysToKeep:%d change to %d", pDb->name, pDb->cfg.daysToKeep, daysToKeep); newCfg.daysToKeep = daysToKeep; @@ -809,15 +830,45 @@ static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) { newCfg.daysToKeep2 = daysToKeep2; } + if (minRows > 0 && minRows != pDb->cfg.minRowsPerFileBlock) { + mError("db:%s, can't alter minRows option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + + if (maxRows > 0 && maxRows != pDb->cfg.maxRowsPerFileBlock) { + mError("db:%s, can't alter maxRows option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + + if (commitTime > 0 && commitTime != pDb->cfg.commitTime) { + mError("db:%s, can't alter commitTime option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + + if (precision > 0 && precision != pDb->cfg.precision) { + mError("db:%s, can't alter precision option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + if (compression >= 0 && compression != pDb->cfg.compression) { mTrace("db:%s, compression:%d change to %d", pDb->name, pDb->cfg.compression, compression); newCfg.compression = compression; } + if (walLevel > 0 && walLevel != pDb->cfg.walLevel) { + mError("db:%s, can't alter walLevel option", pDb->name); + terrno = TSDB_CODE_INVALID_OPTION; + } + if (replications > 0 && replications != pDb->cfg.replications) { mTrace("db:%s, replications:%d change to %d", pDb->name, pDb->cfg.replications, replications); newCfg.replications = replications; + if (replications > 1 && pDb->cfg.walLevel <= TSDB_MIN_WAL_LEVEL) { + mError("db:%s, walLevel:%d must > 0, while replica:%d > 1", pDb->name, pDb->cfg.walLevel, replications); + terrno = TSDB_CODE_INVALID_OPTION; + } + if (replications > mgmtGetDnodesNum()) { mError("db:%s, no enough dnode to change replica:%d", pDb->name, replications); terrno = TSDB_CODE_NO_ENOUGH_DNODES; @@ -829,11 +880,6 @@ static SDbCfg mgmtGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) { } } - if (walLevel >= 0 && (walLevel < TSDB_MIN_WAL_LEVEL || walLevel > TSDB_MAX_WAL_LEVEL)) { - mError("db:%s, wal level %d should be between 0-2, origin:%d", pDb->name, walLevel, pDb->cfg.walLevel); - terrno = TSDB_CODE_INVALID_OPTION; - } - return newCfg; } diff --git a/tests/script/general/db/alter_option.sim b/tests/script/general/db/alter_option.sim new file mode 100644 index 0000000000000000000000000000000000000000..bb5f4f356800fcb7673c32bd91a0820baa99d517 --- /dev/null +++ b/tests/script/general/db/alter_option.sim @@ -0,0 +1,69 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/cfg.sh -n dnode1 -c wallevel -v 0 +system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 +system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 1000 + +system sh/exec.sh -n dnode1 -s start + +sleep 3000 +sql connect +print ============================ dnode1 start + +sql create database db maxTables 500 cache 2 blocks 4 days 10 keep 20 minRows 300 maxRows 400 ctime 120 precision 'ms' comp 2 wal 1 replica 1 +sql show databases +print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09 +if $data00 != db then + return -1 +endi +if $data02 != 0 then + return -1 +endi +if $data03 != 0 then + return -1 +endi +if $data04 != 1 then + return -1 +endi +if $data05 != 10 then + return -1 +endi +if $data06 != 20,20,20 then + return -1 +endi +if $data07 != 500 then + return -1 +endi +if $data08 != 2 then + return -1 +endi +if $data09 != 4 then + return -1 +endi + +print =============== step2 +system sh/exec.sh -n dnode1 -s stop -x SIGINT +return +sql_error alter database db cache 256 +sql_error alter database db blocks 1 +sql_error alter database db maxTables 10 +sql_error alter database db days 10 +sql_error alter database db keep 10 +sql_error alter database db minRows 350 +sql_error alter database db minRows 550 +sql_error alter database db ctime 5000 +sql_error alter database db precision "us" +sql_error alter database db comp 3 +sql_error alter database db walLevel 1 +sql_error alter database db replica 2 + + +print ============== step3 +sql alter database db maxTables 1000 +sql alter database db comp 1 +sql alter database db blocks 40 +sql alter database db keep 30 + + + +#system sh/exec.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index efb0a8d5698ecdf1931f57a94a6fcc0e7ecbf652..68ce299a3eefb7804213d4bd97dae3d373cee149 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -43,23 +43,24 @@ cd ../../../debug; make ./test.sh -f general/compute/sum.sim ./test.sh -f general/compute/top.sim +./test.sh -f general/db/alter_option.sim ./test.sh -f general/db/basic.sim ./test.sh -f general/db/basic1.sim ./test.sh -f general/db/basic2.sim ./test.sh -f general/db/basic3.sim ./test.sh -f general/db/basic4.sim ./test.sh -f general/db/basic5.sim -./test.sh -f general/db/delete.sim ./test.sh -f general/db/delete_reuse1.sim ./test.sh -f general/db/delete_reuse2.sim ./test.sh -f general/db/delete_reusevnode.sim #hongze ./test.sh -f general/db/delete_reusevnode2.sim ./test.sh -f general/db/delete_writing1.sim ./test.sh -f general/db/delete_writing2.sim +./test.sh -f general/db/delete.sim ./test.sh -f general/db/len.sim -#liao ./test.sh -f general/db/vnodes.sim ./test.sh -f general/db/repeat.sim ./test.sh -f general/db/tables.sim +#liao ./test.sh -f general/db/vnodes.sim ./test.sh -f general/field/2.sim ./test.sh -f general/field/3.sim @@ -250,17 +251,17 @@ cd ../../../debug; make ./test.sh -u -f unique/cluster/balance3.sim ./test.sh -u -f unique/cluster/cache.sim -#jeff ./test.sh -u -f unique/column/replica3.sim +./test.sh -u -f unique/column/replica3.sim #liao wait ./test.sh -u -f unique/db/commit.sim ./test.sh -u -f unique/db/delete.sim ./test.sh -u -f unique/db/delete_part.sim ./test.sh -u -f unique/db/replica_add12.sim -#hongze ./test.sh -u -f unique/db/replica_add13.sim +./test.sh -u -f unique/db/replica_add13.sim #hongze wait ./test.sh -u -f unique/db/replica_add23.sim -#hongze wait ./test.sh -u -f unique/db/replica_reduce21.sim +./test.sh -u -f unique/db/replica_reduce21.sim ./test.sh -u -f unique/db/replica_reduce32.sim -#hongze wait /test.sh -u -f unique/db/replica_reduce31.sim +./test.sh -u -f unique/db/replica_reduce31.sim ./test.sh -u -f unique/db/replica_part.sim ./test.sh -u -f unique/dnode/balance1.sim @@ -302,4 +303,4 @@ cd ../../../debug; make ./test.sh -u -f unique/vnode/replica2_repeat.sim ./test.sh -u -f unique/vnode/replica3_basic.sim ./test.sh -u -f unique/vnode/replica3_repeat.sim -#jeff ./test.sh -u -f unique/vnode/replica3_vgroup.sim +./test.sh -u -f unique/vnode/replica3_vgroup.sim