From f553cd3defa0051e4504ac7c590918ecf344ced5 Mon Sep 17 00:00:00 2001 From: slguan Date: Wed, 29 Apr 2020 13:44:43 +0800 Subject: [PATCH] [TD-202] --- src/dnode/src/dnodeMClient.c | 2 + src/mnode/src/mgmtDnode.c | 2 +- src/mnode/src/mgmtTable.c | 36 ++++---- tests/script/basicSuite.sim | 28 +++++- tests/script/general/table/autocreate.sim | 102 ++++++++++++++++++++++ tests/script/general/table/testSuite.sim | 29 +++--- 6 files changed, 164 insertions(+), 35 deletions(-) create mode 100644 tests/script/general/table/autocreate.sim diff --git a/src/dnode/src/dnodeMClient.c b/src/dnode/src/dnodeMClient.c index 8b3f21b103..fc25d9f3c5 100644 --- a/src/dnode/src/dnodeMClient.c +++ b/src/dnode/src/dnodeMClient.c @@ -88,12 +88,14 @@ int32_t dnodeInitMClient() { if (strcmp(tsSecond, tsMaster) != 0) { tsMnodeIpSet.numOfIps = 2; taosGetFqdnPortFromEp(tsSecond, tsMnodeIpSet.fqdn[1], &tsMnodeIpSet.port[1]); + tsMnodeIpSet.port[0] += TSDB_PORT_MNODEDNODE; } } else { tsMnodeIpSet.inUse = tsMnodeInfos.inUse; tsMnodeIpSet.numOfIps = tsMnodeInfos.nodeNum; for (int32_t i = 0; i < tsMnodeInfos.nodeNum; i++) { taosGetFqdnPortFromEp(tsMnodeInfos.nodeInfos[i].nodeEp, tsMnodeIpSet.fqdn[i], &tsMnodeIpSet.port[i]); + tsMnodeIpSet.port[i] += TSDB_PORT_MNODEDNODE; } } diff --git a/src/mnode/src/mgmtDnode.c b/src/mnode/src/mgmtDnode.c index 97360e49ea..44838d35ef 100644 --- a/src/mnode/src/mgmtDnode.c +++ b/src/mnode/src/mgmtDnode.c @@ -324,7 +324,7 @@ void mgmtProcessDnodeStatusMsg(SRpcMsg *rpcMsg) { if (pStatus->dnodeId == 0) { mTrace("dnode:%d %s, first access", pDnode->dnodeId, pDnode->dnodeEp); } else { - //mTrace("dnode:%d, status received, access times %d", pDnode->dnodeId, pDnode->lastAccess); + mTrace("dnode:%d, status received, access times %d", pDnode->dnodeId, pDnode->lastAccess); } int32_t openVnodes = htons(pStatus->openVnodes); diff --git a/src/mnode/src/mgmtTable.c b/src/mnode/src/mgmtTable.c index 073251a7da..096022d6e6 100644 --- a/src/mnode/src/mgmtTable.c +++ b/src/mnode/src/mgmtTable.c @@ -613,11 +613,18 @@ static void mgmtExtractTableName(char* tableId, char* name) { static void mgmtProcessCreateTableMsg(SQueuedMsg *pMsg) { SCMCreateTableMsg *pCreate = pMsg->pCont; + if (pMsg->pDb == NULL) pMsg->pDb = mgmtGetDb(pCreate->db); + if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) { + mError("table:%s, failed to create, db not selected", pCreate->tableId); + mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED); + return; + } + if (pMsg->pTable == NULL) pMsg->pTable = mgmtGetTable(pCreate->tableId); if (pMsg->pTable != NULL && pMsg->retry == 0) { if (pCreate->getMeta) { mTrace("table:%s, continue to get meta", pCreate->tableId); - mgmtProcessTableMetaMsg(pMsg); + mgmtGetChildTableMeta(pMsg); } else if (pCreate->igExists) { mTrace("table:%s, is already exist", pCreate->tableId); mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SUCCESS); @@ -628,13 +635,6 @@ static void mgmtProcessCreateTableMsg(SQueuedMsg *pMsg) { return; } - if (pMsg->pDb == NULL) pMsg->pDb = mgmtGetDb(pCreate->db); - if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) { - mError("table:%s, failed to create, db not selected", pCreate->tableId); - mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED); - return; - } - if (pCreate->numOfTags != 0) { mTrace("table:%s, create msg is received from thandle:%p", pCreate->tableId, pMsg->thandle); mgmtProcessCreateSuperTableMsg(pMsg); @@ -646,7 +646,7 @@ static void mgmtProcessCreateTableMsg(SQueuedMsg *pMsg) { static void mgmtProcessDropTableMsg(SQueuedMsg *pMsg) { SCMDropTableMsg *pDrop = pMsg->pCont; - pMsg->pDb = mgmtGetDbByTableId(pDrop->tableId); + if (pMsg->pDb == NULL) pMsg->pDb = mgmtGetDbByTableId(pDrop->tableId); if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) { mError("table:%s, failed to drop table, db not selected", pDrop->tableId); mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED); @@ -659,8 +659,8 @@ static void mgmtProcessDropTableMsg(SQueuedMsg *pMsg) { return; } - pMsg->pTable = mgmtGetTable(pDrop->tableId); - if (pMsg->pTable == NULL) { + if (pMsg->pTable == NULL) pMsg->pTable = mgmtGetTable(pDrop->tableId); + if (pMsg->pTable == NULL) { if (pDrop->igNotExists) { mTrace("table:%s, table is not exist, think drop success", pDrop->tableId); mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SUCCESS); @@ -683,7 +683,8 @@ static void mgmtProcessDropTableMsg(SQueuedMsg *pMsg) { static void mgmtProcessTableMetaMsg(SQueuedMsg *pMsg) { SCMTableInfoMsg *pInfo = pMsg->pCont; - mTrace("table:%s, table meta msg is received from thandle:%p", pInfo->tableId, pMsg->thandle); + pInfo->createFlag = htons(pInfo->createFlag); + mTrace("table:%s, table meta msg is received from thandle:%p, createFlag:%d", pInfo->tableId, pMsg->thandle, pInfo->createFlag); if (pMsg->pDb == NULL) pMsg->pDb = mgmtGetDbByTableId(pInfo->tableId); if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) { @@ -694,7 +695,7 @@ static void mgmtProcessTableMetaMsg(SQueuedMsg *pMsg) { if (pMsg->pTable == NULL) pMsg->pTable = mgmtGetTable(pInfo->tableId); if (pMsg->pTable == NULL) { - if (htons(pInfo->createFlag) != 1) { + if (!pInfo->createFlag) { mError("table:%s, failed to get table meta, table not exist", pInfo->tableId); mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_INVALID_TABLE); } else { @@ -1672,10 +1673,12 @@ static void mgmtAutoCreateChildTable(SQueuedMsg *pMsg) { strcpy(pCreateMsg->db, pMsg->pDb->name); pCreateMsg->igExists = 1; pCreateMsg->getMeta = 1; + pCreateMsg->contLen = htonl(contLen); memcpy(pCreateMsg->schema, pInfo->tags, sizeof(STagData)); SQueuedMsg *newMsg = mgmtCloneQueuedMsg(pMsg); pMsg->pCont = newMsg->pCont; + newMsg->msgType = TSDB_MSG_TYPE_CM_CREATE_TABLE; newMsg->pCont = pCreateMsg; mTrace("table:%s, start to create on demand", pInfo->tableId); @@ -1889,9 +1892,10 @@ static void mgmtProcessCreateChildTableRsp(SRpcMsg *rpcMsg) { } else { mTrace("table:%s, created in dnode, thandle:%p result:%s", pTable->info.tableId, queueMsg->thandle, tstrerror(rpcMsg->code)); - - if (queueMsg->msgType != TSDB_MSG_TYPE_CM_CREATE_TABLE) { - mTrace("table:%s, start to get meta", pTable->info.tableId); + SCMCreateTableMsg *pCreate = queueMsg->pCont; + if (pCreate->getMeta) { + mTrace("table:%s, continue to get meta", pTable->info.tableId); + queueMsg->retry = 0; mgmtAddToShellQueue(queueMsg); } else { mgmtSendSimpleResp(queueMsg->thandle, rpcMsg->code); diff --git a/tests/script/basicSuite.sim b/tests/script/basicSuite.sim index aad021e3b5..c9c2023ffe 100644 --- a/tests/script/basicSuite.sim +++ b/tests/script/basicSuite.sim @@ -1,8 +1,28 @@ ################################# +run general/db/basic1.sim +run general/db/basic2.sim +run general/db/basic3.sim +run general/db/basic4.sim +run general/db/basic5.sim -run general/db/testSuite.sim -run general/insert/testSuite.sim -run general/table/testSuite.sim -run general/user/basicSuite.sim +run general/table/basic1.sim +run general/table/basic2.sim +run general/table/basic3.sim +run general/table/column_num.sim +run general/table/column_name.sim +run general/table/bigint.sim +run general/table/bool.sim +run general/table/double.sim +run general/table/float.sim +run general/table/int.sim +run general/table/smallint.sim +run general/table/tinyint.sim +run general/table/db.table.sim + +run general/user/basic1.sim +run general/user/pass_alter.sim +run general/user/pass_len.sim +run general/user/user_create.sim +run general/user/user_len.sim ################################## diff --git a/tests/script/general/table/autocreate.sim b/tests/script/general/table/autocreate.sim new file mode 100644 index 0000000000..9aa28b2cec --- /dev/null +++ b/tests/script/general/table/autocreate.sim @@ -0,0 +1,102 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print =============== create database +sql create database db +sql show databases +if $rows != 1 then + return -1 +endi + +print $data00 $data01 $data02 + +print =============== create super table +sql create table db.st1 (ts timestamp, i int) tags (j int) +sql create table db.st2 (ts timestamp, i int, j int) tags (t1 int, t2 int, t3 int) +sql show db.stables +if $rows != 2 then + return -1 +endi + +print $data00 $data01 $data02 + +print =============== create child table +sql insert into db.c1 using db.st1 tags(1) values(now, 1); +sql insert into db.c2 using db.st1 tags(2) values(now, 2); +sql insert into db.c3 using db.st1 tags(3) values(now, 3); +sql insert into db.c4 using db.st1 tags(4) values(now, 4); +sql insert into db.c1 using db.st1 tags(1) values(now, 1); +sql insert into db.c2 using db.st1 tags(2) values(now, 2); +sql insert into db.c3 using db.st1 tags(3) values(now, 3); +sql insert into db.c4 using db.st1 tags(4) values(now, 4); + +sql show db.tables +if $rows != 4 then + return -1 +endi + +sql select * from db.c1 +if $rows != 2 then + return -1 +endi + +sql select * from db.c2 +if $rows != 2 then + return -1 +endi + +sql select * from db.c3 +if $rows != 2 then + return -1 +endi + +sql select * from db.c4 +if $rows != 2 then + return -1 +endi + +sql select * from db.st1 +if $rows != 8 then + return -1 +endi + +print =============== insert data +sql insert into db.s1 using db.st2 tags(1, 1, 1) values(now, 1, 2); +sql insert into db.s2 using db.st2 tags(2, 2, 2) values(now, 2, 3); +sql insert into db.s3 using db.st2 tags(3, 3, 3) values(now, 3, 4); +sql insert into db.s4 using db.st2 tags(4, 4, 4) values(now, 4, 5); +sql insert into db.s1 using db.st2 tags(1, 1, 1) values(now, 1, 2); +sql insert into db.s2 using db.st2 tags(2, 2, 2) values(now, 2, 3); +sql insert into db.s3 using db.st2 tags(3, 3, 3) values(now, 3, 4); +sql insert into db.s4 using db.st2 tags(4, 4, 4) values(now, 4, 5); +sql insert into db.s1 using db.st2 tags(1, 1, 1) values(now, 1, 2); +sql insert into db.s2 using db.st2 tags(2, 2, 2) values(now, 2, 3); +sql insert into db.s3 using db.st2 tags(3, 3, 3) values(now, 3, 4); +sql insert into db.s4 using db.st2 tags(4, 4, 4) values(now, 4, 5); + +sql show db.tables +if $rows != 8 then + return -1 +endi + +sql select * from db.s1 +if $rows != 3 then + return -1 +endi + +sql select * from db.s2 +if $rows != 3 then + return -1 +endi + +sql select * from db.s3 +if $rows != 3 then + return -1 +endi + +sql select * from db.s4 +if $rows != 3 then + return -1 +endi diff --git a/tests/script/general/table/testSuite.sim b/tests/script/general/table/testSuite.sim index 8a8698a60d..5e4388619b 100644 --- a/tests/script/general/table/testSuite.sim +++ b/tests/script/general/table/testSuite.sim @@ -1,25 +1,26 @@ +run general/table/autocreate.sim run general/table/basic1.sim run general/table/basic2.sim run general/table/basic3.sim -#run general/table/table.sim -#run general/table/vgroup.sim -#run general/table/limit.sim -#run general/table/table_len.sim -run general/table/column_num.sim -#run general/table/column2.sim -run general/table/column_name.sim -#run general/table/column_value.sim -#run general/table/describe.sim -#run general/table/date.sim run general/table/bigint.sim #run general/table/binary.sim run general/table/bool.sim +run general/table/column_name.sim +run general/table/column_num.sim +#run general/table/column_value.sim +#run general/table/column2.sim +#run general/table/date.sim +run general/table/db.table.sim +#run general/table/delete_reuse1.sim +#run general/table/delete_reuse2.sim +#run general/table/delete_writing.sim +#run general/table/describe.sim run general/table/double.sim run general/table/float.sim run general/table/int.sim +#run general/table/limit.sim run general/table/smallint.sim +#run general/table/table_len.sim +#run general/table/table.sim run general/table/tinyint.sim -run general/table/db.table.sim -#run general/table/delete_reuse1.sim -#run general/table/delete_reuse2.sim -#run general/table/delete_writing.sim +#run general/table/vgroup.sim -- GitLab