[td-225] merge develop branch.
This commit is contained in:
commit
8a6d4c8ab2
|
@ -449,10 +449,13 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
||||||
tscTrace("%p update table meta in local cache, continue to process sql and send corresponding subquery", pSql);
|
tscTrace("%p update table meta in local cache, continue to process sql and send corresponding subquery", pSql);
|
||||||
|
|
||||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||||
if (pTableMetaInfo->pTableMeta == NULL){
|
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
assert(code == TSDB_CODE_SUCCESS);
|
assert(code == TSDB_CODE_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
assert((tscGetNumOfTags(pTableMetaInfo->pTableMeta) != 0) && pTableMetaInfo->vgroupIndex >= 0 && pSql->param != NULL);
|
assert((tscGetNumOfTags(pTableMetaInfo->pTableMeta) != 0) && pTableMetaInfo->vgroupIndex >= 0 && pSql->param != NULL);
|
||||||
|
|
||||||
|
@ -473,7 +476,11 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
||||||
|
|
||||||
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
||||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||||
assert(code == TSDB_CODE_SUCCESS);
|
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
assert(code == TSDB_CODE_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
// if failed to process sql, go to error handler
|
// if failed to process sql, go to error handler
|
||||||
if ((code = tscProcessSql(pSql)) == TSDB_CODE_SUCCESS) {
|
if ((code = tscProcessSql(pSql)) == TSDB_CODE_SUCCESS) {
|
||||||
|
@ -483,7 +490,6 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
||||||
// // 1. table uid, 2. ip address
|
// // 1. table uid, 2. ip address
|
||||||
// code = tscSendMsgToServer(pSql);
|
// code = tscSendMsgToServer(pSql);
|
||||||
// if (code == TSDB_CODE_SUCCESS) return;
|
// if (code == TSDB_CODE_SUCCESS) return;
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
tscTrace("%p continue parse sql after get table meta", pSql);
|
tscTrace("%p continue parse sql after get table meta", pSql);
|
||||||
|
|
||||||
|
@ -491,8 +497,11 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
||||||
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_STMT_INSERT)) {
|
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_STMT_INSERT)) {
|
||||||
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
||||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||||
assert(code == TSDB_CODE_SUCCESS && pTableMetaInfo->pTableMeta != NULL);
|
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
assert(code == TSDB_CODE_SUCCESS);
|
||||||
|
}
|
||||||
(*pSql->fp)(pSql->param, pSql, code);
|
(*pSql->fp)(pSql->param, pSql, code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,7 +279,7 @@ static void tscProcessCurrentUser(SSqlObj *pSql) {
|
||||||
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
||||||
|
|
||||||
char* vx = calloc(1, pExpr->resBytes);
|
char* vx = calloc(1, pExpr->resBytes);
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(vx, pSql->pTscObj->user, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(vx, pSql->pTscObj->user, sizeof(pSql->pTscObj->user));
|
||||||
|
|
||||||
tscSetLocalQueryResult(pSql, vx, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
tscSetLocalQueryResult(pSql, vx, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
||||||
free(vx);
|
free(vx);
|
||||||
|
|
|
@ -169,7 +169,7 @@ static int32_t handlePassword(SSqlCmd* pCmd, SSQLToken* pPwd) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pPwd->n > TSDB_PASSWORD_LEN) {
|
if (pPwd->n >= TSDB_PASSWORD_LEN) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
pzName->n = strdequote(pzName->z);
|
pzName->n = strdequote(pzName->z);
|
||||||
strncpy(pTableMetaInfo->name, pzName->z, pzName->n);
|
strncpy(pTableMetaInfo->name, pzName->z, pzName->n);
|
||||||
} else { // drop user
|
} else { // drop user
|
||||||
if (pzName->n > TSDB_USER_LEN) {
|
if (pzName->n >= TSDB_USER_LEN) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +317,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pName->n > TSDB_USER_LEN) {
|
if (pName->n >= TSDB_USER_LEN) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tscValidateTableNameLength(pToken->n)) {
|
if (!tscValidateTableNameLength(pToken->n)) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
SSQLToken* pName = &pUser->user;
|
SSQLToken* pName = &pUser->user;
|
||||||
SSQLToken* pPwd = &pUser->passwd;
|
SSQLToken* pPwd = &pUser->passwd;
|
||||||
|
|
||||||
if (pName->n > TSDB_USER_LEN) {
|
if (pName->n >= TSDB_USER_LEN) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,7 +543,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "not support sql expression");
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "not support sql expression");
|
||||||
}
|
}
|
||||||
|
|
||||||
pSql->cmd.parseFinished = true;
|
pSql->cmd.parseFinished = 1;
|
||||||
return tscBuildMsg[pCmd->command](pSql, pInfo);
|
return tscBuildMsg[pCmd->command](pSql, pInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1061,7 +1061,7 @@ int32_t setObjFullName(char* fullName, const char* account, SSQLToken* pDB, SSQL
|
||||||
}
|
}
|
||||||
} else { // pDB == NULL, the db prefix name is specified in tableName
|
} else { // pDB == NULL, the db prefix name is specified in tableName
|
||||||
/* the length limitation includes tablename + dbname + sep */
|
/* the length limitation includes tablename + dbname + sep */
|
||||||
if (tableName->n > (TSDB_TABLE_NAME_LEN - 1) + (TSDB_DB_NAME_LEN - 1) + sizeof(TS_PATH_DELIMITER)) {
|
if (tableName->n >= TSDB_TABLE_NAME_LEN + TSDB_DB_NAME_LEN) {
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1078,7 +1078,7 @@ int32_t setObjFullName(char* fullName, const char* account, SSQLToken* pDB, SSQL
|
||||||
fullName[totalLen] = 0;
|
fullName[totalLen] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (totalLen <= TSDB_TABLE_ID_LEN) ? TSDB_CODE_SUCCESS : TSDB_CODE_TSC_INVALID_SQL;
|
return (totalLen < TSDB_TABLE_ID_LEN) ? TSDB_CODE_SUCCESS : TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void extractColumnNameFromString(tSQLExprItem* pItem) {
|
static void extractColumnNameFromString(tSQLExprItem* pItem) {
|
||||||
|
@ -2048,7 +2048,7 @@ int32_t getTableIndexImpl(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColum
|
||||||
}
|
}
|
||||||
|
|
||||||
pIndex->tableIndex = COLUMN_INDEX_INITIAL_VAL;
|
pIndex->tableIndex = COLUMN_INDEX_INITIAL_VAL;
|
||||||
char tableName[TSDB_TABLE_ID_LEN + 1] = {0};
|
char tableName[TSDB_TABLE_ID_LEN] = {0};
|
||||||
|
|
||||||
for (int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
for (int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||||
|
@ -2237,7 +2237,7 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
|
|
||||||
// show vnodes may be ip addr of dnode in payload
|
// show vnodes may be ip addr of dnode in payload
|
||||||
SSQLToken* pDnodeIp = &pShowInfo->prefix;
|
SSQLToken* pDnodeIp = &pShowInfo->prefix;
|
||||||
if (pDnodeIp->n > TSDB_IPv4ADDR_LEN) { // ip addr is too long
|
if (pDnodeIp->n >= TSDB_IPv4ADDR_LEN) { // ip addr is too long
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3612,7 +3612,7 @@ static int32_t setTableCondForSTableQuery(SQueryInfo* pQueryInfo, const char* ac
|
||||||
taosStringBuilderAppendStringLen(&sb1, TBNAME_LIST_SEP, 1);
|
taosStringBuilderAppendStringLen(&sb1, TBNAME_LIST_SEP, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char idBuf[TSDB_TABLE_ID_LEN + 1] = {0};
|
char idBuf[TSDB_TABLE_ID_LEN] = {0};
|
||||||
int32_t xlen = strlen(segments[i]);
|
int32_t xlen = strlen(segments[i]);
|
||||||
SSQLToken t = {.z = segments[i], .n = xlen, .type = TK_STRING};
|
SSQLToken t = {.z = segments[i], .n = xlen, .type = TK_STRING};
|
||||||
|
|
||||||
|
@ -4376,9 +4376,10 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index.columnIndex < tscGetNumOfColumns(pTableMeta)) {
|
int32_t numOfCols = tscGetNumOfColumns(pTableMeta);
|
||||||
|
if (index.columnIndex < numOfCols) {
|
||||||
return invalidSqlErrMsg(pQueryInfo->msg, msg10);
|
return invalidSqlErrMsg(pQueryInfo->msg, msg10);
|
||||||
} else if (index.columnIndex == 0) {
|
} else if (index.columnIndex == numOfCols) {
|
||||||
return invalidSqlErrMsg(pQueryInfo->msg, msg11);
|
return invalidSqlErrMsg(pQueryInfo->msg, msg11);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5229,9 +5230,9 @@ static int32_t doAddGroupbyColumnsOnDemand(SQueryInfo* pQueryInfo) {
|
||||||
int16_t colIndex = pColIndex->colIndex;
|
int16_t colIndex = pColIndex->colIndex;
|
||||||
if (colIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
if (colIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
||||||
SSchema s = tGetTableNameColumnSchema();
|
SSchema s = tGetTableNameColumnSchema();
|
||||||
type = s.type;
|
type = s.type;
|
||||||
bytes = s.bytes;
|
bytes = s.bytes;
|
||||||
name = s.name;
|
name = s.name;
|
||||||
} else {
|
} else {
|
||||||
if (TSDB_COL_IS_TAG(pColIndex->flag)) {
|
if (TSDB_COL_IS_TAG(pColIndex->flag)) {
|
||||||
SSchema* tagSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
SSchema* tagSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||||
|
@ -5599,7 +5600,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get meter meta from mnode
|
// get meter meta from mnode
|
||||||
strncpy(pCreateTable->usingInfo.tagdata.name, pStableMeterMetaInfo->name, TSDB_TABLE_ID_LEN);
|
tstrncpy(pCreateTable->usingInfo.tagdata.name, pStableMeterMetaInfo->name, sizeof(pCreateTable->usingInfo.tagdata.name));
|
||||||
tVariantList* pList = pInfo->pCreateTableInfo->usingInfo.pTagVals;
|
tVariantList* pList = pInfo->pCreateTableInfo->usingInfo.pTagVals;
|
||||||
|
|
||||||
int32_t code = tscGetTableMeta(pSql, pStableMeterMetaInfo);
|
int32_t code = tscGetTableMeta(pSql, pStableMeterMetaInfo);
|
||||||
|
|
|
@ -1705,8 +1705,8 @@ int tscBuildSTableVgroupMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
|
|
||||||
for(int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
for(int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, i);
|
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, i);
|
||||||
strncpy(pMsg, pTableMetaInfo->name, TSDB_TABLE_ID_LEN);
|
tstrncpy(pMsg, pTableMetaInfo->name, sizeof(pTableMetaInfo->name));
|
||||||
pMsg += TSDB_TABLE_ID_LEN;
|
pMsg += sizeof(pTableMetaInfo->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
pCmd->msgType = TSDB_MSG_TYPE_CM_STABLE_VGROUP;
|
pCmd->msgType = TSDB_MSG_TYPE_CM_STABLE_VGROUP;
|
||||||
|
|
|
@ -45,11 +45,11 @@ static bool validImpl(const char* str, size_t maxsize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool validUserName(const char* user) {
|
static bool validUserName(const char* user) {
|
||||||
return validImpl(user, TSDB_USER_LEN);
|
return validImpl(user, TSDB_USER_LEN - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool validPassword(const char* passwd) {
|
static bool validPassword(const char* passwd) {
|
||||||
return validImpl(passwd, TSDB_PASSWORD_LEN);
|
return validImpl(passwd, TSDB_PASSWORD_LEN - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, const char *db, uint16_t port,
|
SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, const char *db, uint16_t port,
|
||||||
|
|
|
@ -69,8 +69,8 @@ typedef struct {
|
||||||
int version; // version
|
int version; // version
|
||||||
int numOfCols; // Number of columns appended
|
int numOfCols; // Number of columns appended
|
||||||
int tlen; // maximum length of a SDataRow without the header part
|
int tlen; // maximum length of a SDataRow without the header part
|
||||||
int16_t flen; // First part length in a SDataRow after the header part
|
uint16_t flen; // First part length in a SDataRow after the header part
|
||||||
int16_t vlen; // pure value part length, excluded the overhead
|
uint16_t vlen; // pure value part length, excluded the overhead
|
||||||
STColumn columns[];
|
STColumn columns[];
|
||||||
} STSchema;
|
} STSchema;
|
||||||
|
|
||||||
|
@ -107,8 +107,8 @@ typedef struct {
|
||||||
int tCols;
|
int tCols;
|
||||||
int nCols;
|
int nCols;
|
||||||
int tlen;
|
int tlen;
|
||||||
int16_t flen;
|
uint16_t flen;
|
||||||
int16_t vlen;
|
uint16_t vlen;
|
||||||
int version;
|
int version;
|
||||||
STColumn *columns;
|
STColumn *columns;
|
||||||
} STSchemaBuilder;
|
} STSchemaBuilder;
|
||||||
|
@ -125,16 +125,16 @@ STSchema *tdGetSchemaFromBuilder(STSchemaBuilder *pBuilder);
|
||||||
* |<--------------------+--------------------------- len ---------------------------------->|
|
* |<--------------------+--------------------------- len ---------------------------------->|
|
||||||
* |<-- Head -->|<--------- flen -------------->| |
|
* |<-- Head -->|<--------- flen -------------->| |
|
||||||
* +---------------------+---------------------------------+---------------------------------+
|
* +---------------------+---------------------------------+---------------------------------+
|
||||||
* | int16_t | int16_t | | |
|
* | uint16_t | int16_t | | |
|
||||||
* +----------+----------+---------------------------------+---------------------------------+
|
* +----------+----------+---------------------------------+---------------------------------+
|
||||||
* | len | sversion | First part | Second part |
|
* | len | sversion | First part | Second part |
|
||||||
* +----------+----------+---------------------------------+---------------------------------+
|
* +----------+----------+---------------------------------+---------------------------------+
|
||||||
*/
|
*/
|
||||||
typedef void *SDataRow;
|
typedef void *SDataRow;
|
||||||
|
|
||||||
#define TD_DATA_ROW_HEAD_SIZE sizeof(int16_t)*2
|
#define TD_DATA_ROW_HEAD_SIZE (sizeof(uint16_t) + sizeof(int16_t))
|
||||||
|
|
||||||
#define dataRowLen(r) (*(int16_t *)(r))
|
#define dataRowLen(r) (*(uint16_t *)(r))
|
||||||
#define dataRowVersion(r) *(int16_t *)POINTER_SHIFT(r, sizeof(int16_t))
|
#define dataRowVersion(r) *(int16_t *)POINTER_SHIFT(r, sizeof(int16_t))
|
||||||
#define dataRowTuple(r) POINTER_SHIFT(r, TD_DATA_ROW_HEAD_SIZE)
|
#define dataRowTuple(r) POINTER_SHIFT(r, TD_DATA_ROW_HEAD_SIZE)
|
||||||
#define dataRowKey(r) (*(TSKEY *)(dataRowTuple(r)))
|
#define dataRowKey(r) (*(TSKEY *)(dataRowTuple(r)))
|
||||||
|
|
|
@ -718,7 +718,7 @@ static void doInitGlobalConfig() {
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT;
|
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT;
|
||||||
cfg.minValue = 0;
|
cfg.minValue = 0;
|
||||||
cfg.maxValue = 0;
|
cfg.maxValue = 0;
|
||||||
cfg.ptrLength = TSDB_USER_LEN;
|
cfg.ptrLength = TSDB_USER_LEN - 1;
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
|
@ -728,7 +728,7 @@ static void doInitGlobalConfig() {
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT;
|
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT;
|
||||||
cfg.minValue = 0;
|
cfg.minValue = 0;
|
||||||
cfg.maxValue = 0;
|
cfg.maxValue = 0;
|
||||||
cfg.ptrLength = TSDB_PASSWORD_LEN;
|
cfg.ptrLength = TSDB_PASSWORD_LEN - 1;
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
|
|
|
@ -130,9 +130,9 @@ _CONVERT_FUNC = {
|
||||||
|
|
||||||
# Corresponding TAOS_FIELD structure in C
|
# Corresponding TAOS_FIELD structure in C
|
||||||
class TaosField(ctypes.Structure):
|
class TaosField(ctypes.Structure):
|
||||||
_fields_ = [('name', ctypes.c_char * 64),
|
_fields_ = [('name', ctypes.c_char * 65),
|
||||||
('bytes', ctypes.c_short),
|
('type', ctypes.c_char),
|
||||||
('type', ctypes.c_char)]
|
('bytes', ctypes.c_short)]
|
||||||
|
|
||||||
# C interface class
|
# C interface class
|
||||||
class CTaosInterface(object):
|
class CTaosInterface(object):
|
||||||
|
|
|
@ -226,8 +226,8 @@ class CTaosInterface(object):
|
||||||
if connection.value == None:
|
if connection.value == None:
|
||||||
print('connect to TDengine failed')
|
print('connect to TDengine failed')
|
||||||
# sys.exit(1)
|
# sys.exit(1)
|
||||||
else:
|
#else:
|
||||||
print('connect to TDengine success')
|
# print('connect to TDengine success')
|
||||||
|
|
||||||
return connection
|
return connection
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ class CTaosInterface(object):
|
||||||
'''Close the TDengine handle
|
'''Close the TDengine handle
|
||||||
'''
|
'''
|
||||||
CTaosInterface.libtaos.taos_close(connection)
|
CTaosInterface.libtaos.taos_close(connection)
|
||||||
print('connection is closed')
|
#print('connection is closed')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def query(connection, sql):
|
def query(connection, sql):
|
||||||
|
|
|
@ -130,9 +130,9 @@ _CONVERT_FUNC = {
|
||||||
|
|
||||||
# Corresponding TAOS_FIELD structure in C
|
# Corresponding TAOS_FIELD structure in C
|
||||||
class TaosField(ctypes.Structure):
|
class TaosField(ctypes.Structure):
|
||||||
_fields_ = [('name', ctypes.c_char * 64),
|
_fields_ = [('name', ctypes.c_char * 65),
|
||||||
('bytes', ctypes.c_short),
|
('type', ctypes.c_char),
|
||||||
('type', ctypes.c_char)]
|
('bytes', ctypes.c_short)]
|
||||||
|
|
||||||
# C interface class
|
# C interface class
|
||||||
class CTaosInterface(object):
|
class CTaosInterface(object):
|
||||||
|
|
|
@ -130,9 +130,9 @@ _CONVERT_FUNC = {
|
||||||
|
|
||||||
# Corresponding TAOS_FIELD structure in C
|
# Corresponding TAOS_FIELD structure in C
|
||||||
class TaosField(ctypes.Structure):
|
class TaosField(ctypes.Structure):
|
||||||
_fields_ = [('name', ctypes.c_char * 64),
|
_fields_ = [('name', ctypes.c_char * 65),
|
||||||
('bytes', ctypes.c_short),
|
('type', ctypes.c_char),
|
||||||
('type', ctypes.c_char)]
|
('bytes', ctypes.c_short)]
|
||||||
|
|
||||||
# C interface class
|
# C interface class
|
||||||
class CTaosInterface(object):
|
class CTaosInterface(object):
|
||||||
|
|
|
@ -428,7 +428,7 @@ static bool dnodeCheckMnodeInfos(SDMMnodeInfos *pMnodes) {
|
||||||
for (int32_t i = 0; i < pMnodes->nodeNum; ++i) {
|
for (int32_t i = 0; i < pMnodes->nodeNum; ++i) {
|
||||||
SDMMnodeInfo *pMnodeInfo = &pMnodes->nodeInfos[i];
|
SDMMnodeInfo *pMnodeInfo = &pMnodes->nodeInfos[i];
|
||||||
if (pMnodeInfo->nodeId <= 0 || strlen(pMnodeInfo->nodeEp) <= 5) {
|
if (pMnodeInfo->nodeId <= 0 || strlen(pMnodeInfo->nodeEp) <= 5) {
|
||||||
dError("invalid mnode info:%d, nodeId:%d nodeEp:%s", pMnodeInfo->nodeId, pMnodeInfo->nodeEp);
|
dError("invalid mnode info:%d, nodeId:%d nodeEp:%s", i, pMnodeInfo->nodeId, pMnodeInfo->nodeEp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,8 @@ static void dnodeProcessReqMsgFromDnode(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
||||||
.contLen = 0
|
.contLen = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (pMsg->pCont == NULL) return;
|
||||||
|
|
||||||
if (dnodeGetRunStatus() != TSDB_DNODE_RUN_STATUS_RUNING) {
|
if (dnodeGetRunStatus() != TSDB_DNODE_RUN_STATUS_RUNING) {
|
||||||
rspMsg.code = TSDB_CODE_RPC_NOT_READY;
|
rspMsg.code = TSDB_CODE_RPC_NOT_READY;
|
||||||
rpcSendResponse(&rspMsg);
|
rpcSendResponse(&rspMsg);
|
||||||
|
|
|
@ -115,6 +115,8 @@ void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
||||||
.contLen = 0
|
.contLen = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (pMsg->pCont == NULL) return;
|
||||||
|
|
||||||
if (dnodeGetRunStatus() != TSDB_DNODE_RUN_STATUS_RUNING) {
|
if (dnodeGetRunStatus() != TSDB_DNODE_RUN_STATUS_RUNING) {
|
||||||
dError("RPC %p, shell msg:%s is ignored since dnode not running", pMsg->handle, taosMsg[pMsg->msgType]);
|
dError("RPC %p, shell msg:%s is ignored since dnode not running", pMsg->handle, taosMsg[pMsg->msgType]);
|
||||||
rpcMsg.code = TSDB_CODE_RPC_NOT_READY;
|
rpcMsg.code = TSDB_CODE_RPC_NOT_READY;
|
||||||
|
@ -145,7 +147,7 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char
|
||||||
if (code != TSDB_CODE_RPC_NOT_READY) return code;
|
if (code != TSDB_CODE_RPC_NOT_READY) return code;
|
||||||
|
|
||||||
SDMAuthMsg *pMsg = rpcMallocCont(sizeof(SDMAuthMsg));
|
SDMAuthMsg *pMsg = rpcMallocCont(sizeof(SDMAuthMsg));
|
||||||
tstrncpy(pMsg->user, user, TSDB_USER_LEN);
|
tstrncpy(pMsg->user, user, sizeof(pMsg->user));
|
||||||
|
|
||||||
SRpcMsg rpcMsg = {0};
|
SRpcMsg rpcMsg = {0};
|
||||||
rpcMsg.pCont = pMsg;
|
rpcMsg.pCont = pMsg;
|
||||||
|
|
|
@ -29,7 +29,7 @@ int32_t main(int32_t argc, char *argv[]) {
|
||||||
for (int32_t i = 1; i < argc; ++i) {
|
for (int32_t i = 1; i < argc; ++i) {
|
||||||
if (strcmp(argv[i], "-c") == 0) {
|
if (strcmp(argv[i], "-c") == 0) {
|
||||||
if (i < argc - 1) {
|
if (i < argc - 1) {
|
||||||
if (strlen(argv[++i]) > TSDB_FILENAME_LEN - 1) {
|
if (strlen(argv[++i]) >= TSDB_FILENAME_LEN) {
|
||||||
printf("config file path overflow");
|
printf("config file path overflow");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,13 +26,6 @@
|
||||||
#include "dnodeVRead.h"
|
#include "dnodeVRead.h"
|
||||||
#include "vnode.h"
|
#include "vnode.h"
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SRspRet rspRet;
|
|
||||||
void *pCont;
|
|
||||||
int32_t contLen;
|
|
||||||
SRpcMsg rpcMsg;
|
|
||||||
} SReadMsg;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
pthread_t thread; // thread
|
pthread_t thread; // thread
|
||||||
int32_t workerId; // worker ID
|
int32_t workerId; // worker ID
|
||||||
|
@ -218,7 +211,7 @@ static void *dnodeProcessReadQueue(void *param) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dTrace("%p, msg:%s will be processed in vread queue", pReadMsg->rpcMsg.ahandle, taosMsg[pReadMsg->rpcMsg.msgType]);
|
dTrace("%p, msg:%s will be processed in vread queue", pReadMsg->rpcMsg.ahandle, taosMsg[pReadMsg->rpcMsg.msgType]);
|
||||||
int32_t code = vnodeProcessRead(pVnode, pReadMsg->rpcMsg.msgType, pReadMsg->pCont, pReadMsg->contLen, &pReadMsg->rspRet);
|
int32_t code = vnodeProcessRead(pVnode, pReadMsg);
|
||||||
dnodeSendRpcReadRsp(pVnode, pReadMsg, code);
|
dnodeSendRpcReadRsp(pVnode, pReadMsg, code);
|
||||||
taosFreeQitem(pReadMsg);
|
taosFreeQitem(pReadMsg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,12 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp** pRsp, int32_t* co
|
||||||
*/
|
*/
|
||||||
bool qHasMoreResultsToRetrieve(qinfo_t qinfo);
|
bool qHasMoreResultsToRetrieve(qinfo_t qinfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kill current ongoing query and free query handle automatically
|
||||||
|
* @param qinfo
|
||||||
|
*/
|
||||||
|
int32_t qKillQuery(qinfo_t qinfo);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -186,14 +186,14 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
||||||
#define TSDB_BINARY_OP_MULTIPLY 14
|
#define TSDB_BINARY_OP_MULTIPLY 14
|
||||||
#define TSDB_BINARY_OP_DIVIDE 15
|
#define TSDB_BINARY_OP_DIVIDE 15
|
||||||
#define TSDB_BINARY_OP_REMAINDER 16
|
#define TSDB_BINARY_OP_REMAINDER 16
|
||||||
#define TSDB_USERID_LEN 9
|
|
||||||
#define TS_PATH_DELIMITER_LEN 1
|
#define TS_PATH_DELIMITER_LEN 1
|
||||||
|
|
||||||
#define TSDB_METER_ID_LEN_MARGIN 8
|
|
||||||
#define TSDB_TABLE_ID_LEN (TSDB_DB_NAME_LEN+TSDB_TABLE_NAME_LEN+2*TS_PATH_DELIMITER_LEN+TSDB_USERID_LEN+TSDB_METER_ID_LEN_MARGIN) //TSDB_DB_NAME_LEN+TSDB_TABLE_NAME_LEN+2*strlen(TS_PATH_DELIMITER)+strlen(USERID)
|
|
||||||
#define TSDB_UNI_LEN 24
|
#define TSDB_UNI_LEN 24
|
||||||
#define TSDB_USER_LEN TSDB_UNI_LEN
|
#define TSDB_USER_LEN TSDB_UNI_LEN
|
||||||
#define TSDB_ACCT_LEN TSDB_UNI_LEN
|
// ACCOUNT is a 32 bit positive integer
|
||||||
|
// this is the length of its string representation
|
||||||
|
// including the terminator zero
|
||||||
|
#define TSDB_ACCT_LEN 11
|
||||||
#define TSDB_PASSWORD_LEN TSDB_UNI_LEN
|
#define TSDB_PASSWORD_LEN TSDB_UNI_LEN
|
||||||
|
|
||||||
#define TSDB_MAX_COLUMNS 1024
|
#define TSDB_MAX_COLUMNS 1024
|
||||||
|
@ -202,14 +202,15 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
||||||
#define TSDB_NODE_NAME_LEN 64
|
#define TSDB_NODE_NAME_LEN 64
|
||||||
#define TSDB_TABLE_NAME_LEN 193 // it is a null-terminated string
|
#define TSDB_TABLE_NAME_LEN 193 // it is a null-terminated string
|
||||||
#define TSDB_DB_NAME_LEN 33
|
#define TSDB_DB_NAME_LEN 33
|
||||||
|
#define TSDB_TABLE_ID_LEN (TSDB_ACCT_LEN + TSDB_DB_NAME_LEN + TSDB_TABLE_NAME_LEN)
|
||||||
#define TSDB_COL_NAME_LEN 65
|
#define TSDB_COL_NAME_LEN 65
|
||||||
#define TSDB_MAX_SAVED_SQL_LEN TSDB_MAX_COLUMNS * 64
|
#define TSDB_MAX_SAVED_SQL_LEN TSDB_MAX_COLUMNS * 64
|
||||||
#define TSDB_MAX_SQL_LEN TSDB_PAYLOAD_SIZE
|
#define TSDB_MAX_SQL_LEN TSDB_PAYLOAD_SIZE
|
||||||
#define TSDB_MAX_SQL_SHOW_LEN 256
|
#define TSDB_MAX_SQL_SHOW_LEN 256
|
||||||
#define TSDB_MAX_ALLOWED_SQL_LEN (8*1024*1024U) // sql length should be less than 8mb
|
#define TSDB_MAX_ALLOWED_SQL_LEN (8*1024*1024U) // sql length should be less than 8mb
|
||||||
|
|
||||||
#define TSDB_MAX_BYTES_PER_ROW TSDB_MAX_COLUMNS * 64
|
#define TSDB_MAX_BYTES_PER_ROW 65535
|
||||||
#define TSDB_MAX_TAGS_LEN 65536
|
#define TSDB_MAX_TAGS_LEN 65535
|
||||||
#define TSDB_MAX_TAGS 128
|
#define TSDB_MAX_TAGS 128
|
||||||
|
|
||||||
#define TSDB_AUTH_LEN 16
|
#define TSDB_AUTH_LEN 16
|
||||||
|
|
|
@ -243,13 +243,13 @@ typedef struct {
|
||||||
uint64_t uid;
|
uint64_t uid;
|
||||||
uint64_t superTableUid;
|
uint64_t superTableUid;
|
||||||
uint64_t createdTime;
|
uint64_t createdTime;
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
char superTableId[TSDB_TABLE_ID_LEN + 1];
|
char superTableId[TSDB_TABLE_ID_LEN];
|
||||||
char data[];
|
char data[];
|
||||||
} SMDCreateTableMsg;
|
} SMDCreateTableMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
char db[TSDB_DB_NAME_LEN];
|
char db[TSDB_DB_NAME_LEN];
|
||||||
int8_t igExists;
|
int8_t igExists;
|
||||||
int8_t getMeta;
|
int8_t getMeta;
|
||||||
|
@ -262,12 +262,12 @@ typedef struct {
|
||||||
} SCMCreateTableMsg;
|
} SCMCreateTableMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
int8_t igNotExists;
|
int8_t igNotExists;
|
||||||
} SCMDropTableMsg;
|
} SCMDropTableMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
char db[TSDB_DB_NAME_LEN];
|
char db[TSDB_DB_NAME_LEN];
|
||||||
int16_t type; /* operation type */
|
int16_t type; /* operation type */
|
||||||
int16_t numOfCols; /* number of schema */
|
int16_t numOfCols; /* number of schema */
|
||||||
|
@ -292,7 +292,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char clientVersion[TSDB_VERSION_LEN];
|
char clientVersion[TSDB_VERSION_LEN];
|
||||||
char msgVersion[TSDB_VERSION_LEN];
|
char msgVersion[TSDB_VERSION_LEN];
|
||||||
char db[TSDB_TABLE_ID_LEN + 1];
|
char db[TSDB_TABLE_ID_LEN];
|
||||||
} SCMConnectMsg;
|
} SCMConnectMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -321,18 +321,18 @@ typedef struct {
|
||||||
} SAcctCfg;
|
} SAcctCfg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
char pass[TSDB_KEY_LEN + 1];
|
char pass[TSDB_KEY_LEN];
|
||||||
SAcctCfg cfg;
|
SAcctCfg cfg;
|
||||||
} SCMCreateAcctMsg, SCMAlterAcctMsg;
|
} SCMCreateAcctMsg, SCMAlterAcctMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
} SCMDropUserMsg, SCMDropAcctMsg;
|
} SCMDropUserMsg, SCMDropAcctMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
char pass[TSDB_KEY_LEN + 1];
|
char pass[TSDB_KEY_LEN];
|
||||||
int8_t privilege;
|
int8_t privilege;
|
||||||
int8_t flag;
|
int8_t flag;
|
||||||
} SCMCreateUserMsg, SCMAlterUserMsg;
|
} SCMCreateUserMsg, SCMAlterUserMsg;
|
||||||
|
@ -342,14 +342,14 @@ typedef struct {
|
||||||
int32_t vgId;
|
int32_t vgId;
|
||||||
int32_t sid;
|
int32_t sid;
|
||||||
uint64_t uid;
|
uint64_t uid;
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
} SMDDropTableMsg;
|
} SMDDropTableMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t contLen;
|
int32_t contLen;
|
||||||
int32_t vgId;
|
int32_t vgId;
|
||||||
uint64_t uid;
|
uint64_t uid;
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
} SMDDropSTableMsg;
|
} SMDDropSTableMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -501,7 +501,7 @@ typedef struct {
|
||||||
} SVnodeLoad;
|
} SVnodeLoad;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char acct[TSDB_USER_LEN + 1];
|
char acct[TSDB_USER_LEN];
|
||||||
char db[TSDB_DB_NAME_LEN];
|
char db[TSDB_DB_NAME_LEN];
|
||||||
int32_t cacheBlockSize; //MB
|
int32_t cacheBlockSize; //MB
|
||||||
int32_t totalBlocks;
|
int32_t totalBlocks;
|
||||||
|
@ -521,7 +521,7 @@ typedef struct {
|
||||||
} SCMCreateDbMsg, SCMAlterDbMsg;
|
} SCMCreateDbMsg, SCMAlterDbMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char db[TSDB_TABLE_ID_LEN + 1];
|
char db[TSDB_TABLE_ID_LEN];
|
||||||
uint8_t ignoreNotExists;
|
uint8_t ignoreNotExists;
|
||||||
} SCMDropDbMsg, SCMUseDbMsg;
|
} SCMDropDbMsg, SCMUseDbMsg;
|
||||||
|
|
||||||
|
@ -612,7 +612,7 @@ typedef struct {
|
||||||
} SMDCreateVnodeMsg;
|
} SMDCreateVnodeMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
int16_t createFlag;
|
int16_t createFlag;
|
||||||
char tags[];
|
char tags[];
|
||||||
} SCMTableInfoMsg;
|
} SCMTableInfoMsg;
|
||||||
|
@ -639,7 +639,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct STableMetaMsg {
|
typedef struct STableMetaMsg {
|
||||||
int32_t contLen;
|
int32_t contLen;
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1]; // table id
|
char tableId[TSDB_TABLE_ID_LEN]; // table id
|
||||||
uint8_t numOfTags;
|
uint8_t numOfTags;
|
||||||
uint8_t precision;
|
uint8_t precision;
|
||||||
uint8_t tableType;
|
uint8_t tableType;
|
||||||
|
@ -660,7 +660,7 @@ typedef struct SMultiTableMeta {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t dataLen;
|
int32_t dataLen;
|
||||||
char name[TSDB_TABLE_ID_LEN + 1];
|
char name[TSDB_TABLE_ID_LEN];
|
||||||
char data[TSDB_MAX_TAGS_LEN];
|
char data[TSDB_MAX_TAGS_LEN];
|
||||||
} STagData;
|
} STagData;
|
||||||
|
|
||||||
|
@ -746,15 +746,15 @@ typedef struct {
|
||||||
uint64_t uid;
|
uint64_t uid;
|
||||||
uint64_t stime; // stream starting time
|
uint64_t stime; // stream starting time
|
||||||
int32_t status;
|
int32_t status;
|
||||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
char tableId[TSDB_TABLE_ID_LEN];
|
||||||
} SMDAlterStreamMsg;
|
} SMDAlterStreamMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
char spi;
|
char spi;
|
||||||
char encrypt;
|
char encrypt;
|
||||||
char secret[TSDB_KEY_LEN + 1];
|
char secret[TSDB_KEY_LEN];
|
||||||
char ckey[TSDB_KEY_LEN + 1];
|
char ckey[TSDB_KEY_LEN];
|
||||||
} SDMAuthMsg, SDMAuthRsp;
|
} SDMAuthMsg, SDMAuthRsp;
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
|
@ -83,6 +83,7 @@ void rpcSendResponse(const SRpcMsg *pMsg);
|
||||||
void rpcSendRedirectRsp(void *pConn, const SRpcIpSet *pIpSet);
|
void rpcSendRedirectRsp(void *pConn, const SRpcIpSet *pIpSet);
|
||||||
int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo);
|
int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo);
|
||||||
void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, const SRpcMsg *pReq, SRpcMsg *pRsp);
|
void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, const SRpcMsg *pReq, SRpcMsg *pRsp);
|
||||||
|
void rpcReportProgress(void *pConn, char *pCont, int contLen);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,13 @@ typedef struct {
|
||||||
void *qhandle; //used by query and retrieve msg
|
void *qhandle; //used by query and retrieve msg
|
||||||
} SRspRet;
|
} SRspRet;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
SRspRet rspRet;
|
||||||
|
void *pCont;
|
||||||
|
int32_t contLen;
|
||||||
|
SRpcMsg rpcMsg;
|
||||||
|
} SReadMsg;
|
||||||
|
|
||||||
int32_t vnodeCreate(SMDCreateVnodeMsg *pVnodeCfg);
|
int32_t vnodeCreate(SMDCreateVnodeMsg *pVnodeCfg);
|
||||||
int32_t vnodeDrop(int32_t vgId);
|
int32_t vnodeDrop(int32_t vgId);
|
||||||
int32_t vnodeOpen(int32_t vgId, char *rootDir);
|
int32_t vnodeOpen(int32_t vgId, char *rootDir);
|
||||||
|
@ -52,7 +59,7 @@ void* vnodeGetWal(void *pVnode);
|
||||||
int32_t vnodeProcessWrite(void *pVnode, int qtype, void *pHead, void *item);
|
int32_t vnodeProcessWrite(void *pVnode, int qtype, void *pHead, void *item);
|
||||||
void vnodeBuildStatusMsg(void * param);
|
void vnodeBuildStatusMsg(void * param);
|
||||||
|
|
||||||
int32_t vnodeProcessRead(void *pVnode, int msgType, void *pCont, int32_t contLen, SRspRet *ret);
|
int32_t vnodeProcessRead(void *pVnode, SReadMsg *pReadMsg);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ void shellParseArgument(int argc, char *argv[], struct arguments *arguments) {
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv[i], "-c") == 0) {
|
} else if (strcmp(argv[i], "-c") == 0) {
|
||||||
if (i < argc - 1) {
|
if (i < argc - 1) {
|
||||||
if (strlen(argv[++i]) > TSDB_FILENAME_LEN - 1) {
|
if (strlen(argv[++i]) >= TSDB_FILENAME_LEN) {
|
||||||
fprintf(stderr, "config file path: %s overflow max len %d\n", argv[i], TSDB_FILENAME_LEN - 1);
|
fprintf(stderr, "config file path: %s overflow max len %d\n", argv[i], TSDB_FILENAME_LEN - 1);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||||
fprintf(stderr, "Invalid path %s\n", arg);
|
fprintf(stderr, "Invalid path %s\n", arg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (strlen(full_path.we_wordv[0]) > TSDB_FILENAME_LEN - 1) {
|
if (strlen(full_path.we_wordv[0]) >= TSDB_FILENAME_LEN) {
|
||||||
fprintf(stderr, "config file path: %s overflow max len %d\n", full_path.we_wordv[0], TSDB_FILENAME_LEN - 1);
|
fprintf(stderr, "config file path: %s overflow max len %d\n", full_path.we_wordv[0], TSDB_FILENAME_LEN - 1);
|
||||||
wordfree(&full_path);
|
wordfree(&full_path);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -77,7 +77,7 @@ void shellParseArgument(int argc, char *argv[], struct arguments *arguments) {
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv[i], "-c") == 0) {
|
} else if (strcmp(argv[i], "-c") == 0) {
|
||||||
if (i < argc - 1) {
|
if (i < argc - 1) {
|
||||||
if (strlen(argv[++i]) > TSDB_FILENAME_LEN - 1) {
|
if (strlen(argv[++i]) >= TSDB_FILENAME_LEN) {
|
||||||
fprintf(stderr, "config file path: %s overflow max len %d\n", argv[i], TSDB_FILENAME_LEN - 1);
|
fprintf(stderr, "config file path: %s overflow max len %d\n", argv[i], TSDB_FILENAME_LEN - 1);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,8 +177,8 @@ typedef struct SDumpArguments {
|
||||||
char *password;
|
char *password;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
// output file
|
// output file
|
||||||
char output[TSDB_FILENAME_LEN + 1];
|
char output[TSDB_FILENAME_LEN];
|
||||||
char input[TSDB_FILENAME_LEN + 1];
|
char input[TSDB_FILENAME_LEN];
|
||||||
char *encode;
|
char *encode;
|
||||||
// dump unit option
|
// dump unit option
|
||||||
bool all_databases;
|
bool all_databases;
|
||||||
|
|
|
@ -155,7 +155,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct SDbObj {
|
typedef struct SDbObj {
|
||||||
char name[TSDB_DB_NAME_LEN];
|
char name[TSDB_DB_NAME_LEN];
|
||||||
char acct[TSDB_USER_LEN + 1];
|
char acct[TSDB_USER_LEN];
|
||||||
int64_t createdTime;
|
int64_t createdTime;
|
||||||
int32_t cfgVersion;
|
int32_t cfgVersion;
|
||||||
SDbCfg cfg;
|
SDbCfg cfg;
|
||||||
|
@ -172,9 +172,9 @@ typedef struct SDbObj {
|
||||||
} SDbObj;
|
} SDbObj;
|
||||||
|
|
||||||
typedef struct SUserObj {
|
typedef struct SUserObj {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
char pass[TSDB_KEY_LEN + 1];
|
char pass[TSDB_KEY_LEN];
|
||||||
char acct[TSDB_USER_LEN + 1];
|
char acct[TSDB_USER_LEN];
|
||||||
int64_t createdTime;
|
int64_t createdTime;
|
||||||
int8_t superAuth;
|
int8_t superAuth;
|
||||||
int8_t writeAuth;
|
int8_t writeAuth;
|
||||||
|
@ -203,8 +203,8 @@ typedef struct {
|
||||||
} SAcctInfo;
|
} SAcctInfo;
|
||||||
|
|
||||||
typedef struct SAcctObj {
|
typedef struct SAcctObj {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
char pass[TSDB_KEY_LEN + 1];
|
char pass[TSDB_KEY_LEN];
|
||||||
SAcctCfg cfg;
|
SAcctCfg cfg;
|
||||||
int32_t acctId;
|
int32_t acctId;
|
||||||
int64_t createdTime;
|
int64_t createdTime;
|
||||||
|
|
|
@ -22,7 +22,7 @@ extern "C" {
|
||||||
#include "mnodeDef.h"
|
#include "mnodeDef.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char user[TSDB_USER_LEN + 1];
|
char user[TSDB_USER_LEN];
|
||||||
int8_t killed;
|
int8_t killed;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
uint32_t ip;
|
uint32_t ip;
|
||||||
|
|
|
@ -97,7 +97,7 @@ SConnObj *mnodeCreateConn(char *user, uint32_t ip, uint16_t port) {
|
||||||
.connId = connId,
|
.connId = connId,
|
||||||
.stime = taosGetTimestampMs()
|
.stime = taosGetTimestampMs()
|
||||||
};
|
};
|
||||||
tstrncpy(connObj.user, user, TSDB_USER_LEN);
|
tstrncpy(connObj.user, user, sizeof(connObj.user));
|
||||||
|
|
||||||
char key[10];
|
char key[10];
|
||||||
sprintf(key, "%u", connId);
|
sprintf(key, "%u", connId);
|
||||||
|
@ -222,7 +222,7 @@ static int32_t mnodeRetrieveConns(SShowObj *pShow, char *data, int32_t rows, voi
|
||||||
SConnObj *pConnObj = NULL;
|
SConnObj *pConnObj = NULL;
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
char * pWrite;
|
char * pWrite;
|
||||||
char ipStr[TSDB_IPv4ADDR_LEN + 7];
|
char ipStr[TSDB_IPv4ADDR_LEN + 6];
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
while (numOfRows < rows) {
|
||||||
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
||||||
|
@ -235,12 +235,12 @@ static int32_t mnodeRetrieveConns(SShowObj *pShow, char *data, int32_t rows, voi
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, sizeof(pConnObj->user));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
snprintf(ipStr, TSDB_IPv4ADDR_LEN + 6, "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
snprintf(ipStr, sizeof(ipStr), "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, TSDB_IPv4ADDR_LEN + 6);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, sizeof(ipStr));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
@ -342,7 +342,7 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
SConnObj *pConnObj = NULL;
|
SConnObj *pConnObj = NULL;
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
char * pWrite;
|
char * pWrite;
|
||||||
char ipStr[TSDB_IPv4ADDR_LEN + 7];
|
char ipStr[TSDB_IPv4ADDR_LEN + 6];
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
while (numOfRows < rows) {
|
||||||
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
||||||
|
@ -358,12 +358,12 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, sizeof(pConnObj->user));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
snprintf(ipStr, TSDB_IPv4ADDR_LEN + 6, "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
snprintf(ipStr, sizeof(ipStr), "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, TSDB_IPv4ADDR_LEN + 6);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, sizeof(ipStr));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
@ -463,7 +463,7 @@ static int32_t mnodeRetrieveStreams(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
SConnObj *pConnObj = NULL;
|
SConnObj *pConnObj = NULL;
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
char * pWrite;
|
char * pWrite;
|
||||||
char ipStr[TSDB_IPv4ADDR_LEN + 7];
|
char ipStr[TSDB_IPv4ADDR_LEN + 6];
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
while (numOfRows < rows) {
|
||||||
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
|
||||||
|
@ -479,12 +479,12 @@ static int32_t mnodeRetrieveStreams(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pConnObj->user, sizeof(pConnObj->user));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
snprintf(ipStr, TSDB_IPv4ADDR_LEN + 6, "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
snprintf(ipStr, sizeof(ipStr), "%s:%u", taosIpStr(pConnObj->ip), pConnObj->port);
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, TSDB_IPv4ADDR_LEN + 6);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, ipStr, sizeof(ipStr));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
|
|
@ -201,7 +201,7 @@ static int32_t mnodeChildTableActionEncode(SSdbOper *pOper) {
|
||||||
assert(pTable != NULL && pOper->rowData != NULL);
|
assert(pTable != NULL && pOper->rowData != NULL);
|
||||||
|
|
||||||
int32_t len = strlen(pTable->info.tableId);
|
int32_t len = strlen(pTable->info.tableId);
|
||||||
if (len > TSDB_TABLE_ID_LEN) return TSDB_CODE_MND_INVALID_TABLE_ID;
|
if (len >= TSDB_TABLE_ID_LEN) return TSDB_CODE_MND_INVALID_TABLE_ID;
|
||||||
|
|
||||||
memcpy(pOper->rowData, pTable->info.tableId, len);
|
memcpy(pOper->rowData, pTable->info.tableId, len);
|
||||||
memset(pOper->rowData + len, 0, 1);
|
memset(pOper->rowData + len, 0, 1);
|
||||||
|
@ -232,7 +232,7 @@ static int32_t mnodeChildTableActionDecode(SSdbOper *pOper) {
|
||||||
if (pTable == NULL) return TSDB_CODE_MND_OUT_OF_MEMORY;
|
if (pTable == NULL) return TSDB_CODE_MND_OUT_OF_MEMORY;
|
||||||
|
|
||||||
int32_t len = strlen(pOper->rowData);
|
int32_t len = strlen(pOper->rowData);
|
||||||
if (len > TSDB_TABLE_ID_LEN) {
|
if (len >= TSDB_TABLE_ID_LEN) {
|
||||||
free(pTable);
|
free(pTable);
|
||||||
return TSDB_CODE_MND_INVALID_TABLE_ID;
|
return TSDB_CODE_MND_INVALID_TABLE_ID;
|
||||||
}
|
}
|
||||||
|
@ -453,7 +453,7 @@ static int32_t mnodeSuperTableActionEncode(SSdbOper *pOper) {
|
||||||
assert(pOper->pObj != NULL && pOper->rowData != NULL);
|
assert(pOper->pObj != NULL && pOper->rowData != NULL);
|
||||||
|
|
||||||
int32_t len = strlen(pStable->info.tableId);
|
int32_t len = strlen(pStable->info.tableId);
|
||||||
if (len > TSDB_TABLE_ID_LEN) len = TSDB_CODE_MND_INVALID_TABLE_ID;
|
if (len >= TSDB_TABLE_ID_LEN) len = TSDB_CODE_MND_INVALID_TABLE_ID;
|
||||||
|
|
||||||
memcpy(pOper->rowData, pStable->info.tableId, len);
|
memcpy(pOper->rowData, pStable->info.tableId, len);
|
||||||
memset(pOper->rowData + len, 0, 1);
|
memset(pOper->rowData + len, 0, 1);
|
||||||
|
@ -477,7 +477,7 @@ static int32_t mnodeSuperTableActionDecode(SSdbOper *pOper) {
|
||||||
if (pStable == NULL) return TSDB_CODE_MND_OUT_OF_MEMORY;
|
if (pStable == NULL) return TSDB_CODE_MND_OUT_OF_MEMORY;
|
||||||
|
|
||||||
int32_t len = strlen(pOper->rowData);
|
int32_t len = strlen(pOper->rowData);
|
||||||
if (len > TSDB_TABLE_ID_LEN){
|
if (len >= TSDB_TABLE_ID_LEN){
|
||||||
free(pStable);
|
free(pStable);
|
||||||
return TSDB_CODE_MND_INVALID_TABLE_ID;
|
return TSDB_CODE_MND_INVALID_TABLE_ID;
|
||||||
}
|
}
|
||||||
|
@ -1250,12 +1250,12 @@ static int32_t mnodeGetSuperTableMeta(SMnodeMsg *pMsg) {
|
||||||
pMeta->numOfColumns = htons((int16_t)pTable->numOfColumns);
|
pMeta->numOfColumns = htons((int16_t)pTable->numOfColumns);
|
||||||
pMeta->tableType = pTable->info.type;
|
pMeta->tableType = pTable->info.type;
|
||||||
pMeta->contLen = sizeof(STableMetaMsg) + mnodeSetSchemaFromSuperTable(pMeta->schema, pTable);
|
pMeta->contLen = sizeof(STableMetaMsg) + mnodeSetSchemaFromSuperTable(pMeta->schema, pTable);
|
||||||
strncpy(pMeta->tableId, pTable->info.tableId, TSDB_TABLE_ID_LEN);
|
tstrncpy(pMeta->tableId, pTable->info.tableId, sizeof(pMeta->tableId));
|
||||||
|
|
||||||
|
pMsg->rpcRsp.len = pMeta->contLen;
|
||||||
pMeta->contLen = htons(pMeta->contLen);
|
pMeta->contLen = htons(pMeta->contLen);
|
||||||
|
|
||||||
pMsg->rpcRsp.rsp = pMeta;
|
pMsg->rpcRsp.rsp = pMeta;
|
||||||
pMsg->rpcRsp.len = pMeta->contLen;
|
|
||||||
|
|
||||||
mTrace("stable:%s, uid:%" PRIu64 " table meta is retrieved", pTable->info.tableId, pTable->uid);
|
mTrace("stable:%s, uid:%" PRIu64 " table meta is retrieved", pTable->info.tableId, pTable->uid);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -2033,7 +2033,7 @@ static int32_t mnodeProcessMultiTableMetaMsg(SMnodeMsg *pMsg) {
|
||||||
pMultiMeta->numOfTables = 0;
|
pMultiMeta->numOfTables = 0;
|
||||||
|
|
||||||
for (int32_t t = 0; t < pInfo->numOfTables; ++t) {
|
for (int32_t t = 0; t < pInfo->numOfTables; ++t) {
|
||||||
char * tableId = (char *)(pInfo->tableIds + t * TSDB_TABLE_ID_LEN + 1);
|
char * tableId = (char *)(pInfo->tableIds + t * TSDB_TABLE_ID_LEN);
|
||||||
SChildTableObj *pTable = mnodeGetChildTable(tableId);
|
SChildTableObj *pTable = mnodeGetChildTable(tableId);
|
||||||
if (pTable == NULL) continue;
|
if (pTable == NULL) continue;
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ static int32_t mnodeRetrieveUsers(SShowObj *pShow, char *data, int32_t rows, voi
|
||||||
cols = 0;
|
cols = 0;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pUser->user, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pUser->user, sizeof(pUser->user));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
@ -336,7 +336,7 @@ static int32_t mnodeRetrieveUsers(SShowObj *pShow, char *data, int32_t rows, voi
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pUser->acct, TSDB_USER_LEN);
|
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pUser->acct, sizeof(pUser->user));
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
numOfRows++;
|
numOfRows++;
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
#define HTTP_COMPRESS_IDENTITY 0
|
#define HTTP_COMPRESS_IDENTITY 0
|
||||||
#define HTTP_COMPRESS_GZIP 2
|
#define HTTP_COMPRESS_GZIP 2
|
||||||
|
|
||||||
#define HTTP_SESSION_ID_LEN (TSDB_USER_LEN * 2 + 1)
|
#define HTTP_SESSION_ID_LEN (TSDB_USER_LEN + TSDB_PASSWORD_LEN)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HTTP_CONTEXT_STATE_READY,
|
HTTP_CONTEXT_STATE_READY,
|
||||||
|
@ -84,7 +84,7 @@ typedef struct {
|
||||||
int expire;
|
int expire;
|
||||||
int access;
|
int access;
|
||||||
void *taos;
|
void *taos;
|
||||||
char id[HTTP_SESSION_ID_LEN + 1];
|
char id[HTTP_SESSION_ID_LEN];
|
||||||
} HttpSession;
|
} HttpSession;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -48,7 +48,7 @@ void gcInitHandle(HttpServer* pServer) { httpAddMethod(pServer, &gcDecodeMethod)
|
||||||
|
|
||||||
bool gcGetUserFromUrl(HttpContext* pContext) {
|
bool gcGetUserFromUrl(HttpContext* pContext) {
|
||||||
HttpParser* pParser = &pContext->parser;
|
HttpParser* pParser = &pContext->parser;
|
||||||
if (pParser->path[GC_USER_URL_POS].len > TSDB_USER_LEN - 1 || pParser->path[GC_USER_URL_POS].len <= 0) {
|
if (pParser->path[GC_USER_URL_POS].len >= TSDB_USER_LEN || pParser->path[GC_USER_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ bool gcGetUserFromUrl(HttpContext* pContext) {
|
||||||
|
|
||||||
bool gcGetPassFromUrl(HttpContext* pContext) {
|
bool gcGetPassFromUrl(HttpContext* pContext) {
|
||||||
HttpParser* pParser = &pContext->parser;
|
HttpParser* pParser = &pContext->parser;
|
||||||
if (pParser->path[GC_PASS_URL_POS].len > TSDB_PASSWORD_LEN - 1 || pParser->path[GC_PASS_URL_POS].len <= 0) {
|
if (pParser->path[GC_PASS_URL_POS].len >= TSDB_PASSWORD_LEN || pParser->path[GC_PASS_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ bool httpParseTaosdAuthToken(HttpContext *pContext, char *token, int len) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
tstrncpy(pContext->user, descrypt, sizeof(pContext->user));
|
tstrncpy(pContext->user, descrypt, sizeof(pContext->user));
|
||||||
tstrncpy(pContext->pass, descrypt + TSDB_USER_LEN, TSDB_PASSWORD_LEN);
|
tstrncpy(pContext->pass, descrypt + TSDB_USER_LEN, sizeof(pContext->pass));
|
||||||
|
|
||||||
httpTrace("context:%p, fd:%d, ip:%s, taosd token:%s parsed success, user:%s", pContext, pContext->fd,
|
httpTrace("context:%p, fd:%d, ip:%s, taosd token:%s parsed success, user:%s", pContext, pContext->fd,
|
||||||
pContext->ipstr, token, pContext->user);
|
pContext->ipstr, token, pContext->user);
|
||||||
|
@ -100,14 +100,15 @@ bool httpParseTaosdAuthToken(HttpContext *pContext, char *token, int len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool httpGenTaosdAuthToken(HttpContext *pContext, char *token, int maxLen) {
|
bool httpGenTaosdAuthToken(HttpContext *pContext, char *token, int maxLen) {
|
||||||
char buffer[TSDB_USER_LEN + TSDB_PASSWORD_LEN] = {0};
|
char buffer[sizeof(pContext->user) + sizeof(pContext->pass)] = {0};
|
||||||
strncpy(buffer, pContext->user, TSDB_USER_LEN);
|
tstrncpy(buffer, pContext->user, sizeof(pContext->user));
|
||||||
strncpy(buffer + TSDB_USER_LEN, pContext->pass, TSDB_PASSWORD_LEN);
|
tstrncpy(buffer + sizeof(pContext->user), pContext->pass, sizeof(pContext->pass));
|
||||||
|
|
||||||
char *encrypt = taosDesEncode(KEY_DES_4, buffer, TSDB_USER_LEN + TSDB_PASSWORD_LEN);
|
char *encrypt = taosDesEncode(KEY_DES_4, buffer, TSDB_USER_LEN + TSDB_PASSWORD_LEN);
|
||||||
char *base64 = base64_encode((const unsigned char *)encrypt, TSDB_USER_LEN + TSDB_PASSWORD_LEN);
|
char *base64 = base64_encode((const unsigned char *)encrypt, TSDB_USER_LEN + TSDB_PASSWORD_LEN);
|
||||||
|
|
||||||
strncpy(token, base64, (size_t)strlen(base64));
|
size_t len = strlen(base64);
|
||||||
|
tstrncpy(token, base64, len + 1);
|
||||||
free(encrypt);
|
free(encrypt);
|
||||||
free(base64);
|
free(base64);
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ void restInitHandle(HttpServer* pServer) {
|
||||||
|
|
||||||
bool restGetUserFromUrl(HttpContext* pContext) {
|
bool restGetUserFromUrl(HttpContext* pContext) {
|
||||||
HttpParser* pParser = &pContext->parser;
|
HttpParser* pParser = &pContext->parser;
|
||||||
if (pParser->path[REST_USER_URL_POS].len > TSDB_USER_LEN - 1 || pParser->path[REST_USER_URL_POS].len <= 0) {
|
if (pParser->path[REST_USER_URL_POS].len >= TSDB_USER_LEN || pParser->path[REST_USER_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ bool restGetUserFromUrl(HttpContext* pContext) {
|
||||||
|
|
||||||
bool restGetPassFromUrl(HttpContext* pContext) {
|
bool restGetPassFromUrl(HttpContext* pContext) {
|
||||||
HttpParser* pParser = &pContext->parser;
|
HttpParser* pParser = &pContext->parser;
|
||||||
if (pParser->path[REST_PASS_URL_POS].len > TSDB_PASSWORD_LEN - 1 || pParser->path[REST_PASS_URL_POS].len <= 0) {
|
if (pParser->path[REST_PASS_URL_POS].len >= TSDB_PASSWORD_LEN || pParser->path[REST_PASS_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -306,21 +306,21 @@ void tgCleanupHandle() {
|
||||||
|
|
||||||
bool tgGetUserFromUrl(HttpContext *pContext) {
|
bool tgGetUserFromUrl(HttpContext *pContext) {
|
||||||
HttpParser *pParser = &pContext->parser;
|
HttpParser *pParser = &pContext->parser;
|
||||||
if (pParser->path[TG_USER_URL_POS].len > TSDB_USER_LEN - 1 || pParser->path[TG_USER_URL_POS].len <= 0) {
|
if (pParser->path[TG_USER_URL_POS].len >= TSDB_USER_LEN || pParser->path[TG_USER_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tstrncpy(pContext->user, pParser->path[TG_USER_URL_POS].pos, TSDB_USER_LEN);
|
tstrncpy(pContext->user, pParser->path[TG_USER_URL_POS].pos, sizeof(pContext->user));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tgGetPassFromUrl(HttpContext *pContext) {
|
bool tgGetPassFromUrl(HttpContext *pContext) {
|
||||||
HttpParser *pParser = &pContext->parser;
|
HttpParser *pParser = &pContext->parser;
|
||||||
if (pParser->path[TG_PASS_URL_POS].len > TSDB_PASSWORD_LEN - 1 || pParser->path[TG_PASS_URL_POS].len <= 0) {
|
if (pParser->path[TG_PASS_URL_POS].len >= TSDB_PASSWORD_LEN || pParser->path[TG_PASS_URL_POS].len <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tstrncpy(pContext->pass, pParser->path[TG_PASS_URL_POS].pos, TSDB_PASSWORD_LEN);
|
tstrncpy(pContext->pass, pParser->path[TG_PASS_URL_POS].pos, sizeof(pContext->pass));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
|
||||||
", totalConns smallint, maxConns smallint"
|
", totalConns smallint, maxConns smallint"
|
||||||
", accessState smallint"
|
", accessState smallint"
|
||||||
") tags (acctId binary(%d))",
|
") tags (acctId binary(%d))",
|
||||||
tsMonitorDbName, TSDB_USER_LEN + 1);
|
tsMonitorDbName, TSDB_USER_LEN);
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) {
|
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) {
|
||||||
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, "root",
|
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, "root",
|
||||||
tsMonitorDbName, "root");
|
tsMonitorDbName, "root");
|
||||||
|
@ -183,7 +183,7 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
|
||||||
snprintf(sql, SQL_LENGTH,
|
snprintf(sql, SQL_LENGTH,
|
||||||
"create table if not exists %s.slowquery(ts timestamp, username "
|
"create table if not exists %s.slowquery(ts timestamp, username "
|
||||||
"binary(%d), created_time timestamp, time bigint, sql binary(%d))",
|
"binary(%d), created_time timestamp, time bigint, sql binary(%d))",
|
||||||
tsMonitorDbName, TSDB_TABLE_ID_LEN, TSDB_SLOW_QUERY_SQL_LEN);
|
tsMonitorDbName, TSDB_TABLE_ID_LEN - 1, TSDB_SLOW_QUERY_SQL_LEN);
|
||||||
} else if (cmd == MONITOR_CMD_CREATE_TB_LOG) {
|
} else if (cmd == MONITOR_CMD_CREATE_TB_LOG) {
|
||||||
snprintf(sql, SQL_LENGTH,
|
snprintf(sql, SQL_LENGTH,
|
||||||
"create table if not exists %s.log(ts timestamp, level tinyint, "
|
"create table if not exists %s.log(ts timestamp, level tinyint, "
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "qfill.h"
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "qfill.h"
|
||||||
|
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "hashfunc.h"
|
#include "hashfunc.h"
|
||||||
|
@ -5826,20 +5826,36 @@ _over:
|
||||||
//pQInfo already freed in initQInfo, but *pQInfo may not pointer to null;
|
//pQInfo already freed in initQInfo, but *pQInfo may not pointer to null;
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
*pQInfo = NULL;
|
*pQInfo = NULL;
|
||||||
|
} else {
|
||||||
|
SQInfo* pq = (SQInfo*) (*pQInfo);
|
||||||
|
|
||||||
|
T_REF_INC(pq);
|
||||||
|
T_REF_INC(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if failed to add ref for all meters in this query, abort current query
|
// if failed to add ref for all meters in this query, abort current query
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qDestroyQueryInfo(qinfo_t pQInfo) {
|
static void doDestoryQueryInfo(SQInfo* pQInfo) {
|
||||||
|
assert(pQInfo != NULL);
|
||||||
qTrace("QInfo:%p query completed", pQInfo);
|
qTrace("QInfo:%p query completed", pQInfo);
|
||||||
|
queryCostStatis(pQInfo); // print the query cost summary
|
||||||
// print the query cost summary
|
|
||||||
queryCostStatis(pQInfo);
|
|
||||||
freeQInfo(pQInfo);
|
freeQInfo(pQInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qDestroyQueryInfo(qinfo_t qHandle) {
|
||||||
|
SQInfo* pQInfo = (SQInfo*) qHandle;
|
||||||
|
if (!isValidQInfo(pQInfo)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t ref = T_REF_DEC(pQInfo);
|
||||||
|
if (ref == 0) {
|
||||||
|
doDestoryQueryInfo(pQInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void qTableQuery(qinfo_t qinfo) {
|
void qTableQuery(qinfo_t qinfo) {
|
||||||
SQInfo *pQInfo = (SQInfo *)qinfo;
|
SQInfo *pQInfo = (SQInfo *)qinfo;
|
||||||
|
|
||||||
|
@ -5850,6 +5866,7 @@ void qTableQuery(qinfo_t qinfo) {
|
||||||
|
|
||||||
if (isQueryKilled(pQInfo)) {
|
if (isQueryKilled(pQInfo)) {
|
||||||
qTrace("QInfo:%p it is already killed, abort", pQInfo);
|
qTrace("QInfo:%p it is already killed, abort", pQInfo);
|
||||||
|
qDestroyQueryInfo(pQInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5865,7 +5882,7 @@ void qTableQuery(qinfo_t qinfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sem_post(&pQInfo->dataReady);
|
sem_post(&pQInfo->dataReady);
|
||||||
// vnodeDecRefCount(pQInfo);
|
qDestroyQueryInfo(pQInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qRetrieveQueryResultInfo(qinfo_t qinfo) {
|
int32_t qRetrieveQueryResultInfo(qinfo_t qinfo) {
|
||||||
|
@ -5891,20 +5908,29 @@ int32_t qRetrieveQueryResultInfo(qinfo_t qinfo) {
|
||||||
bool qHasMoreResultsToRetrieve(qinfo_t qinfo) {
|
bool qHasMoreResultsToRetrieve(qinfo_t qinfo) {
|
||||||
SQInfo *pQInfo = (SQInfo *)qinfo;
|
SQInfo *pQInfo = (SQInfo *)qinfo;
|
||||||
|
|
||||||
if (pQInfo == NULL || pQInfo->signature != pQInfo || pQInfo->code != TSDB_CODE_SUCCESS) {
|
if (!isValidQInfo(pQInfo) || pQInfo->code != TSDB_CODE_SUCCESS) {
|
||||||
|
qTrace("QInfo:%p invalid qhandle or error occurs, abort query, code:%x", pQInfo, pQInfo->code);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQuery *pQuery = pQInfo->runtimeEnv.pQuery;
|
SQuery *pQuery = pQInfo->runtimeEnv.pQuery;
|
||||||
|
bool ret = false;
|
||||||
if (Q_STATUS_EQUAL(pQuery->status, QUERY_OVER)) {
|
if (Q_STATUS_EQUAL(pQuery->status, QUERY_OVER)) {
|
||||||
return false;
|
ret = false;
|
||||||
} else if (Q_STATUS_EQUAL(pQuery->status, QUERY_RESBUF_FULL)) {
|
} else if (Q_STATUS_EQUAL(pQuery->status, QUERY_RESBUF_FULL)) {
|
||||||
return true;
|
ret = true;
|
||||||
} else if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
|
} else if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
|
||||||
return true;
|
ret = true;
|
||||||
} else {
|
} else {
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
T_REF_INC(pQInfo);
|
||||||
|
qTrace("QInfo:%p has more results waits for client retrieve", pQInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *contLen) {
|
int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *contLen) {
|
||||||
|
@ -5949,6 +5975,19 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *co
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t qKillQuery(qinfo_t qinfo) {
|
||||||
|
SQInfo *pQInfo = (SQInfo *)qinfo;
|
||||||
|
|
||||||
|
if (pQInfo == NULL || !isValidQInfo(pQInfo)) {
|
||||||
|
return TSDB_CODE_QRY_INVALID_QHANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
setQueryKilled(pQInfo);
|
||||||
|
qDestroyQueryInfo(pQInfo);
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static void buildTagQueryResult(SQInfo* pQInfo) {
|
static void buildTagQueryResult(SQInfo* pQInfo) {
|
||||||
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
|
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
|
||||||
SQuery * pQuery = pRuntimeEnv->pQuery;
|
SQuery * pQuery = pRuntimeEnv->pQuery;
|
||||||
|
|
|
@ -425,6 +425,8 @@ void rpcSendResponse(const SRpcMsg *pRsp) {
|
||||||
taosTmrReset(rpcProcessIdleTimer, pRpc->idleTime, pConn, pRpc->tmrCtrl, &pConn->pIdleTimer);
|
taosTmrReset(rpcProcessIdleTimer, pRpc->idleTime, pConn, pRpc->tmrCtrl, &pConn->pIdleTimer);
|
||||||
rpcSendMsgToPeer(pConn, msg, msgLen);
|
rpcSendMsgToPeer(pConn, msg, msgLen);
|
||||||
pConn->secured = 1; // connection shall be secured
|
pConn->secured = 1; // connection shall be secured
|
||||||
|
pConn->pReqMsg = NULL;
|
||||||
|
pConn->reqMsgLen = 0;
|
||||||
|
|
||||||
rpcUnlockConn(pConn);
|
rpcUnlockConn(pConn);
|
||||||
rpcDecRef(pRpc); // decrease the referene count
|
rpcDecRef(pRpc); // decrease the referene count
|
||||||
|
@ -482,6 +484,15 @@ void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, const SRpcMsg *pMsg, SRpcMsg
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this API is used by server app to keep an APP context in case connection is broken
|
||||||
|
void rpcReportProgress(void *handle, char *pCont, int contLen) {
|
||||||
|
SRpcConn *pConn = (SRpcConn *)handle;
|
||||||
|
|
||||||
|
// pReqMsg and reqMsgLen is re-used to store the context from app server
|
||||||
|
pConn->pReqMsg = pCont;
|
||||||
|
pConn->reqMsgLen = contLen;
|
||||||
|
}
|
||||||
|
|
||||||
static void rpcFreeMsg(void *msg) {
|
static void rpcFreeMsg(void *msg) {
|
||||||
if ( msg ) {
|
if ( msg ) {
|
||||||
char *temp = (char *)msg - sizeof(SRpcReqContext);
|
char *temp = (char *)msg - sizeof(SRpcReqContext);
|
||||||
|
@ -542,7 +553,7 @@ static void rpcCloseConn(void *thandle) {
|
||||||
|
|
||||||
if ( pRpc->connType == TAOS_CONN_SERVER) {
|
if ( pRpc->connType == TAOS_CONN_SERVER) {
|
||||||
char hashstr[40] = {0};
|
char hashstr[40] = {0};
|
||||||
size_t size = sprintf(hashstr, "%x:%x:%x:%d", pConn->peerIp, pConn->linkUid, pConn->peerId, pConn->connType);
|
size_t size = snprintf(hashstr, sizeof(hashstr), "%x:%x:%x:%d", pConn->peerIp, pConn->linkUid, pConn->peerId, pConn->connType);
|
||||||
taosHashRemove(pRpc->hash, hashstr, size);
|
taosHashRemove(pRpc->hash, hashstr, size);
|
||||||
|
|
||||||
rpcFreeMsg(pConn->pRspMsg); // it may have a response msg saved, but not request msg
|
rpcFreeMsg(pConn->pRspMsg); // it may have a response msg saved, but not request msg
|
||||||
|
@ -592,7 +603,7 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) {
|
||||||
char hashstr[40] = {0};
|
char hashstr[40] = {0};
|
||||||
SRpcHead *pHead = (SRpcHead *)pRecv->msg;
|
SRpcHead *pHead = (SRpcHead *)pRecv->msg;
|
||||||
|
|
||||||
size_t size = sprintf(hashstr, "%x:%x:%x:%d", pRecv->ip, pHead->linkUid, pHead->sourceId, pRecv->connType);
|
size_t size = snprintf(hashstr, sizeof(hashstr), "%x:%x:%x:%d", pRecv->ip, pHead->linkUid, pHead->sourceId, pRecv->connType);
|
||||||
|
|
||||||
// check if it is already allocated
|
// check if it is already allocated
|
||||||
SRpcConn **ppConn = (SRpcConn **)(taosHashGet(pRpc->hash, hashstr, size));
|
SRpcConn **ppConn = (SRpcConn **)(taosHashGet(pRpc->hash, hashstr, size));
|
||||||
|
@ -682,7 +693,7 @@ static SRpcConn *rpcSetupConnToServer(SRpcReqContext *pContext) {
|
||||||
if (pConn) {
|
if (pConn) {
|
||||||
pConn->tretry = 0;
|
pConn->tretry = 0;
|
||||||
pConn->ahandle = pContext->ahandle;
|
pConn->ahandle = pContext->ahandle;
|
||||||
sprintf(pConn->info, "%s %p %p", pRpc->label, pConn, pConn->ahandle);
|
snprintf(pConn->info, sizeof(pConn->info), "%s %p %p", pRpc->label, pConn, pConn->ahandle);
|
||||||
pConn->tretry = 0;
|
pConn->tretry = 0;
|
||||||
} else {
|
} else {
|
||||||
tError("%s %p, failed to set up connection(%s)", pRpc->label, pContext->ahandle, tstrerror(terrno));
|
tError("%s %p, failed to set up connection(%s)", pRpc->label, pContext->ahandle, tstrerror(terrno));
|
||||||
|
@ -811,7 +822,7 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv) {
|
||||||
|
|
||||||
if (rpcIsReq(pHead->msgType)) {
|
if (rpcIsReq(pHead->msgType)) {
|
||||||
pConn->ahandle = (void *)pHead->ahandle;
|
pConn->ahandle = (void *)pHead->ahandle;
|
||||||
sprintf(pConn->info, "%s %p %p", pRpc->label, pConn, pConn->ahandle);
|
snprintf(pConn->info, sizeof(pConn->info), "%s %p %p", pRpc->label, pConn, pConn->ahandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
sid = pConn->sid;
|
sid = pConn->sid;
|
||||||
|
@ -846,6 +857,21 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv) {
|
||||||
return pConn;
|
return pConn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rpcReportBrokenLinkToServer(SRpcConn *pConn) {
|
||||||
|
SRpcInfo *pRpc = pConn->pRpc;
|
||||||
|
|
||||||
|
// if there are pending request, notify the app
|
||||||
|
tTrace("%s, notify the server app, connection is gone", pConn->info);
|
||||||
|
|
||||||
|
SRpcMsg rpcMsg;
|
||||||
|
rpcMsg.pCont = pConn->pReqMsg; // pReqMsg is re-used to store the APP context from server
|
||||||
|
rpcMsg.contLen = pConn->reqMsgLen; // reqMsgLen is re-used to store the APP context length
|
||||||
|
rpcMsg.handle = pConn;
|
||||||
|
rpcMsg.msgType = pConn->inType;
|
||||||
|
rpcMsg.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
||||||
|
if (pRpc->cfp) (*(pRpc->cfp))(&rpcMsg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void rpcProcessBrokenLink(SRpcConn *pConn) {
|
static void rpcProcessBrokenLink(SRpcConn *pConn) {
|
||||||
if (pConn == NULL) return;
|
if (pConn == NULL) return;
|
||||||
SRpcInfo *pRpc = pConn->pRpc;
|
SRpcInfo *pRpc = pConn->pRpc;
|
||||||
|
@ -859,19 +885,7 @@ static void rpcProcessBrokenLink(SRpcConn *pConn) {
|
||||||
taosTmrStart(rpcProcessConnError, 0, pContext, pRpc->tmrCtrl);
|
taosTmrStart(rpcProcessConnError, 0, pContext, pRpc->tmrCtrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pConn->inType) {
|
if (pConn->inType) rpcReportBrokenLinkToServer(pConn);
|
||||||
// if there are pending request, notify the app
|
|
||||||
tTrace("%s, connection is gone, notify the app", pConn->info);
|
|
||||||
/*
|
|
||||||
SRpcMsg rpcMsg;
|
|
||||||
rpcMsg.pCont = NULL;
|
|
||||||
rpcMsg.contLen = 0;
|
|
||||||
rpcMsg.handle = pConn;
|
|
||||||
rpcMsg.msgType = pConn->inType;
|
|
||||||
rpcMsg.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
|
||||||
(*(pRpc->cfp))(&rpcMsg);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
rpcUnlockConn(pConn);
|
rpcUnlockConn(pConn);
|
||||||
rpcCloseConn(pConn);
|
rpcCloseConn(pConn);
|
||||||
|
@ -1210,23 +1224,10 @@ static void rpcProcessRetryTimer(void *param, void *tmrId) {
|
||||||
|
|
||||||
static void rpcProcessIdleTimer(void *param, void *tmrId) {
|
static void rpcProcessIdleTimer(void *param, void *tmrId) {
|
||||||
SRpcConn *pConn = (SRpcConn *)param;
|
SRpcConn *pConn = (SRpcConn *)param;
|
||||||
SRpcInfo *pRpc = pConn->pRpc;
|
|
||||||
|
|
||||||
if (pConn->user[0]) {
|
if (pConn->user[0]) {
|
||||||
tTrace("%s, close the connection since no activity", pConn->info);
|
tTrace("%s, close the connection since no activity", pConn->info);
|
||||||
if (pConn->inType && pRpc->cfp) {
|
if (pConn->inType) rpcReportBrokenLinkToServer(pConn);
|
||||||
// if there are pending request, notify the app
|
|
||||||
tTrace("%s, notify the app, connection is gone", pConn->info);
|
|
||||||
/*
|
|
||||||
SRpcMsg rpcMsg;
|
|
||||||
rpcMsg.pCont = NULL;
|
|
||||||
rpcMsg.contLen = 0;
|
|
||||||
rpcMsg.handle = pConn;
|
|
||||||
rpcMsg.msgType = pConn->inType;
|
|
||||||
rpcMsg.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
|
||||||
(*(pRpc->cfp))(&rpcMsg);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
rpcCloseConn(pConn);
|
rpcCloseConn(pConn);
|
||||||
} else {
|
} else {
|
||||||
tTrace("%s, idle timer:%p not processed", pConn->info, tmrId);
|
tTrace("%s, idle timer:%p not processed", pConn->info, tmrId);
|
||||||
|
|
|
@ -242,7 +242,7 @@ void taosReadGlobalLogCfg() {
|
||||||
wordexp_t full_path;
|
wordexp_t full_path;
|
||||||
wordexp(configDir, &full_path, 0);
|
wordexp(configDir, &full_path, 0);
|
||||||
if (full_path.we_wordv != NULL && full_path.we_wordv[0] != NULL) {
|
if (full_path.we_wordv != NULL && full_path.we_wordv[0] != NULL) {
|
||||||
if (strlen(full_path.we_wordv[0]) > TSDB_FILENAME_LEN - 1) {
|
if (strlen(full_path.we_wordv[0]) >= TSDB_FILENAME_LEN) {
|
||||||
printf("\nconfig file: %s path overflow max len %d, all variables are set to default\n", full_path.we_wordv[0], TSDB_FILENAME_LEN - 1);
|
printf("\nconfig file: %s path overflow max len %d, all variables are set to default\n", full_path.we_wordv[0], TSDB_FILENAME_LEN - 1);
|
||||||
wordfree(&full_path);
|
wordfree(&full_path);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -27,17 +27,18 @@
|
||||||
#include "vnodeLog.h"
|
#include "vnodeLog.h"
|
||||||
#include "query.h"
|
#include "query.h"
|
||||||
|
|
||||||
static int32_t (*vnodeProcessReadMsgFp[TSDB_MSG_TYPE_MAX])(SVnodeObj *, void *pCont, int32_t contLen, SRspRet *pRet);
|
static int32_t (*vnodeProcessReadMsgFp[TSDB_MSG_TYPE_MAX])(SVnodeObj *pVnode, SReadMsg *pReadMsg);
|
||||||
static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, void *pCont, int32_t contLen, SRspRet *pRet);
|
static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg);
|
||||||
static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, void *pCont, int32_t contLen, SRspRet *pRet);
|
static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg);
|
||||||
|
|
||||||
void vnodeInitReadFp(void) {
|
void vnodeInitReadFp(void) {
|
||||||
vnodeProcessReadMsgFp[TSDB_MSG_TYPE_QUERY] = vnodeProcessQueryMsg;
|
vnodeProcessReadMsgFp[TSDB_MSG_TYPE_QUERY] = vnodeProcessQueryMsg;
|
||||||
vnodeProcessReadMsgFp[TSDB_MSG_TYPE_FETCH] = vnodeProcessFetchMsg;
|
vnodeProcessReadMsgFp[TSDB_MSG_TYPE_FETCH] = vnodeProcessFetchMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t vnodeProcessRead(void *param, int msgType, void *pCont, int32_t contLen, SRspRet *ret) {
|
int32_t vnodeProcessRead(void *param, SReadMsg *pReadMsg) {
|
||||||
SVnodeObj *pVnode = (SVnodeObj *)param;
|
SVnodeObj *pVnode = (SVnodeObj *)param;
|
||||||
|
int msgType = pReadMsg->rpcMsg.msgType;
|
||||||
|
|
||||||
if (vnodeProcessReadMsgFp[msgType] == NULL) {
|
if (vnodeProcessReadMsgFp[msgType] == NULL) {
|
||||||
vTrace("vgId:%d, msgType:%s not processed, no handle", pVnode->vgId, taosMsg[msgType]);
|
vTrace("vgId:%d, msgType:%s not processed, no handle", pVnode->vgId, taosMsg[msgType]);
|
||||||
|
@ -55,16 +56,44 @@ int32_t vnodeProcessRead(void *param, int msgType, void *pCont, int32_t contLen,
|
||||||
return TSDB_CODE_RPC_NOT_READY;
|
return TSDB_CODE_RPC_NOT_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (*vnodeProcessReadMsgFp[msgType])(pVnode, pCont, contLen, ret);
|
return (*vnodeProcessReadMsgFp[msgType])(pVnode, pReadMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, void *pCont, int32_t contLen, SRspRet *pRet) {
|
// notify connection(handle) that current qhandle is created, if current connection from
|
||||||
|
// client is broken, the query needs to be killed immediately.
|
||||||
|
static void vnodeNotifyCurrentQhandle(void* handle, void* qhandle, int32_t vgId) {
|
||||||
|
SRetrieveTableMsg* killQueryMsg = rpcMallocCont(sizeof(SRetrieveTableMsg));
|
||||||
|
killQueryMsg->qhandle = htobe64((uint64_t) qhandle);
|
||||||
|
killQueryMsg->free = htons(1);
|
||||||
|
killQueryMsg->header.vgId = htonl(vgId);
|
||||||
|
killQueryMsg->header.contLen = htonl(sizeof(SRetrieveTableMsg));
|
||||||
|
|
||||||
|
rpcReportProgress(handle, (char*) killQueryMsg, sizeof(SRetrieveTableMsg));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
||||||
|
void * pCont = pReadMsg->pCont;
|
||||||
|
int32_t contLen = pReadMsg->contLen;
|
||||||
|
SRspRet *pRet = &pReadMsg->rspRet;
|
||||||
|
|
||||||
SQueryTableMsg* pQueryTableMsg = (SQueryTableMsg*) pCont;
|
SQueryTableMsg* pQueryTableMsg = (SQueryTableMsg*) pCont;
|
||||||
memset(pRet, 0, sizeof(SRspRet));
|
memset(pRet, 0, sizeof(SRspRet));
|
||||||
|
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
// qHandle needs to be freed correctly
|
||||||
|
if (pReadMsg->rpcMsg.code == TSDB_CODE_RPC_NETWORK_UNAVAIL) {
|
||||||
|
SRetrieveTableMsg* killQueryMsg = (SRetrieveTableMsg*) pReadMsg->pCont;
|
||||||
|
killQueryMsg->free = htons(killQueryMsg->free);
|
||||||
|
killQueryMsg->qhandle = htobe64(killQueryMsg->qhandle);
|
||||||
|
|
||||||
|
assert(pReadMsg->rpcMsg.contLen > 0 && killQueryMsg->free == 1);
|
||||||
|
qDestroyQueryInfo((qinfo_t) killQueryMsg->qhandle);
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
qinfo_t pQInfo = NULL;
|
qinfo_t pQInfo = NULL;
|
||||||
|
|
||||||
if (contLen != 0) {
|
if (contLen != 0) {
|
||||||
code = qCreateQueryInfo(pVnode->tsdb, pVnode->vgId, pQueryTableMsg, &pQInfo);
|
code = qCreateQueryInfo(pVnode->tsdb, pVnode->vgId, pQueryTableMsg, &pQInfo);
|
||||||
|
|
||||||
|
@ -74,7 +103,9 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, void *pCont, int32_t cont
|
||||||
|
|
||||||
pRet->len = sizeof(SQueryTableRsp);
|
pRet->len = sizeof(SQueryTableRsp);
|
||||||
pRet->rsp = pRsp;
|
pRet->rsp = pRsp;
|
||||||
|
|
||||||
|
vnodeNotifyCurrentQhandle(pReadMsg->rpcMsg.handle, pQInfo, pVnode->vgId);
|
||||||
|
|
||||||
vTrace("vgId:%d, QInfo:%p, dnode query msg disposed", pVnode->vgId, pQInfo);
|
vTrace("vgId:%d, QInfo:%p, dnode query msg disposed", pVnode->vgId, pQInfo);
|
||||||
} else {
|
} else {
|
||||||
assert(pCont != NULL);
|
assert(pCont != NULL);
|
||||||
|
@ -91,13 +122,34 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, void *pCont, int32_t cont
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, void *pCont, int32_t contLen, SRspRet *pRet) {
|
static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
||||||
|
void * pCont = pReadMsg->pCont;
|
||||||
|
SRspRet *pRet = &pReadMsg->rspRet;
|
||||||
|
|
||||||
SRetrieveTableMsg *pRetrieve = pCont;
|
SRetrieveTableMsg *pRetrieve = pCont;
|
||||||
void *pQInfo = (void*) htobe64(pRetrieve->qhandle);
|
void *pQInfo = (void*) htobe64(pRetrieve->qhandle);
|
||||||
|
pRetrieve->free = htons(pRetrieve->free);
|
||||||
|
|
||||||
memset(pRet, 0, sizeof(SRspRet));
|
memset(pRet, 0, sizeof(SRspRet));
|
||||||
|
|
||||||
|
if (pRetrieve->free == 1) {
|
||||||
|
vTrace("vgId:%d, QInfo:%p, retrieve msg received to kill query and free qhandle", pVnode->vgId, pQInfo);
|
||||||
|
int32_t ret = qKillQuery(pQInfo);
|
||||||
|
|
||||||
|
pRet->rsp = (SRetrieveTableRsp *)rpcMallocCont(sizeof(SRetrieveTableRsp));
|
||||||
|
pRet->len = sizeof(SRetrieveTableRsp);
|
||||||
|
|
||||||
|
memset(pRet->rsp, 0, sizeof(SRetrieveTableRsp));
|
||||||
|
SRetrieveTableRsp* pRsp = pRet->rsp;
|
||||||
|
pRsp->numOfRows = 0;
|
||||||
|
pRsp->completed = true;
|
||||||
|
pRsp->useconds = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
vTrace("vgId:%d, QInfo:%p, retrieve msg is received", pVnode->vgId, pQInfo);
|
vTrace("vgId:%d, QInfo:%p, retrieve msg is received", pVnode->vgId, pQInfo);
|
||||||
|
|
||||||
int32_t code = qRetrieveQueryResultInfo(pQInfo);
|
int32_t code = qRetrieveQueryResultInfo(pQInfo);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
//TODO
|
//TODO
|
||||||
|
@ -110,8 +162,7 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, void *pCont, int32_t cont
|
||||||
if (qHasMoreResultsToRetrieve(pQInfo)) {
|
if (qHasMoreResultsToRetrieve(pQInfo)) {
|
||||||
pRet->qhandle = pQInfo;
|
pRet->qhandle = pQInfo;
|
||||||
code = TSDB_CODE_VND_ACTION_NEED_REPROCESSED;
|
code = TSDB_CODE_VND_ACTION_NEED_REPROCESSED;
|
||||||
} else {
|
} else { // no further execution invoked, release the ref to vnode
|
||||||
// no further execution invoked, release the ref to vnode
|
|
||||||
qDestroyQueryInfo(pQInfo);
|
qDestroyQueryInfo(pQInfo);
|
||||||
vnodeRelease(pVnode);
|
vnodeRelease(pVnode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ typedef struct {
|
||||||
uint32_t id; // increase continuously
|
uint32_t id; // increase continuously
|
||||||
int num; // number of wal files
|
int num; // number of wal files
|
||||||
char path[TSDB_FILENAME_LEN];
|
char path[TSDB_FILENAME_LEN];
|
||||||
char name[TSDB_FILENAME_LEN];
|
char name[TSDB_FILENAME_LEN+16];
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
} SWal;
|
} SWal;
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ void walClose(void *handle) {
|
||||||
if (pWal->keep == 0) {
|
if (pWal->keep == 0) {
|
||||||
// remove all files in the directory
|
// remove all files in the directory
|
||||||
for (int i=0; i<pWal->num; ++i) {
|
for (int i=0; i<pWal->num; ++i) {
|
||||||
sprintf(pWal->name, "%s/%s%d", pWal->path, walPrefix, pWal->id-i);
|
snprintf(pWal->name, sizeof(pWal->name), "%s/%s%d", pWal->path, walPrefix, pWal->id-i);
|
||||||
if (remove(pWal->name) <0) {
|
if (remove(pWal->name) <0) {
|
||||||
wError("wal:%s, failed to remove", pWal->name);
|
wError("wal:%s, failed to remove", pWal->name);
|
||||||
} else {
|
} else {
|
||||||
|
@ -140,7 +140,7 @@ int walRenew(void *handle) {
|
||||||
|
|
||||||
pWal->num++;
|
pWal->num++;
|
||||||
|
|
||||||
sprintf(pWal->name, "%s/%s%d", pWal->path, walPrefix, pWal->id);
|
snprintf(pWal->name, sizeof(pWal->name), "%s/%s%d", pWal->path, walPrefix, pWal->id);
|
||||||
pWal->fd = open(pWal->name, O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
|
pWal->fd = open(pWal->name, O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||||
|
|
||||||
if (pWal->fd < 0) {
|
if (pWal->fd < 0) {
|
||||||
|
@ -152,7 +152,7 @@ int walRenew(void *handle) {
|
||||||
if (pWal->num > pWal->max) {
|
if (pWal->num > pWal->max) {
|
||||||
// remove the oldest wal file
|
// remove the oldest wal file
|
||||||
char name[TSDB_FILENAME_LEN * 3];
|
char name[TSDB_FILENAME_LEN * 3];
|
||||||
sprintf(name, "%s/%s%d", pWal->path, walPrefix, pWal->id - pWal->max);
|
snprintf(name, sizeof(name), "%s/%s%d", pWal->path, walPrefix, pWal->id - pWal->max);
|
||||||
if (remove(name) <0) {
|
if (remove(name) <0) {
|
||||||
wError("wal:%s, failed to remove(%s)", name, strerror(errno));
|
wError("wal:%s, failed to remove(%s)", name, strerror(errno));
|
||||||
} else {
|
} else {
|
||||||
|
@ -214,7 +214,7 @@ int walRestore(void *handle, void *pVnode, int (*writeFp)(void *, void *, int))
|
||||||
int plen = strlen(walPrefix);
|
int plen = strlen(walPrefix);
|
||||||
char opath[TSDB_FILENAME_LEN+5];
|
char opath[TSDB_FILENAME_LEN+5];
|
||||||
|
|
||||||
int slen = sprintf(opath, "%s", pWal->path);
|
int slen = snprintf(opath, sizeof(opath), "%s", pWal->path);
|
||||||
if ( pWal->keep == 0)
|
if ( pWal->keep == 0)
|
||||||
strcpy(opath+slen, "/old");
|
strcpy(opath+slen, "/old");
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ int walRestore(void *handle, void *pVnode, int (*writeFp)(void *, void *, int))
|
||||||
wTrace("wal:%s, %d files will be restored", opath, count);
|
wTrace("wal:%s, %d files will be restored", opath, count);
|
||||||
|
|
||||||
for (index = minId; index<=maxId; ++index) {
|
for (index = minId; index<=maxId; ++index) {
|
||||||
sprintf(pWal->name, "%s/%s%d", opath, walPrefix, index);
|
snprintf(pWal->name, sizeof(pWal->name), "%s/%s%d", opath, walPrefix, index);
|
||||||
terrno = walRestoreWalFile(pWal, pVnode, writeFp);
|
terrno = walRestoreWalFile(pWal, pVnode, writeFp);
|
||||||
if (terrno < 0) break;
|
if (terrno < 0) break;
|
||||||
}
|
}
|
||||||
|
@ -264,7 +264,7 @@ int walRestore(void *handle, void *pVnode, int (*writeFp)(void *, void *, int))
|
||||||
// open the existing WAL file in append mode
|
// open the existing WAL file in append mode
|
||||||
pWal->num = count;
|
pWal->num = count;
|
||||||
pWal->id = maxId;
|
pWal->id = maxId;
|
||||||
sprintf(pWal->name, "%s/%s%d", opath, walPrefix, maxId);
|
snprintf(pWal->name, sizeof(pWal->name), "%s/%s%d", opath, walPrefix, maxId);
|
||||||
pWal->fd = open(pWal->name, O_WRONLY | O_CREAT | O_APPEND, S_IRWXU | S_IRWXG | S_IRWXO);
|
pWal->fd = open(pWal->name, O_WRONLY | O_CREAT | O_APPEND, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||||
if (pWal->fd < 0) {
|
if (pWal->fd < 0) {
|
||||||
wError("wal:%s, failed to open file(%s)", pWal->name, strerror(errno));
|
wError("wal:%s, failed to open file(%s)", pWal->name, strerror(errno));
|
||||||
|
@ -361,7 +361,7 @@ int walHandleExistingFiles(const char *path) {
|
||||||
char nname[TSDB_FILENAME_LEN * 3];
|
char nname[TSDB_FILENAME_LEN * 3];
|
||||||
char opath[TSDB_FILENAME_LEN];
|
char opath[TSDB_FILENAME_LEN];
|
||||||
|
|
||||||
sprintf(opath, "%s/old", path);
|
snprintf(opath, sizeof(opath), "%s/old", path);
|
||||||
|
|
||||||
struct dirent *ent;
|
struct dirent *ent;
|
||||||
DIR *dir = opendir(path);
|
DIR *dir = opendir(path);
|
||||||
|
@ -377,8 +377,8 @@ int walHandleExistingFiles(const char *path) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while ((ent = readdir(dir))!= NULL) {
|
while ((ent = readdir(dir))!= NULL) {
|
||||||
if ( strncmp(ent->d_name, walPrefix, plen) == 0) {
|
if ( strncmp(ent->d_name, walPrefix, plen) == 0) {
|
||||||
sprintf(oname, "%s/%s", path, ent->d_name);
|
snprintf(oname, sizeof(oname), "%s/%s", path, ent->d_name);
|
||||||
sprintf(nname, "%s/old/%s", path, ent->d_name);
|
snprintf(nname, sizeof(nname), "%s/old/%s", path, ent->d_name);
|
||||||
if (access(opath, F_OK) != 0) {
|
if (access(opath, F_OK) != 0) {
|
||||||
if (mkdir(opath, 0755) != 0) {
|
if (mkdir(opath, 0755) != 0) {
|
||||||
wError("wal:%s, failed to create directory:%s(%s)", oname, opath, strerror(errno));
|
wError("wal:%s, failed to create directory:%s(%s)", oname, opath, strerror(errno));
|
||||||
|
@ -416,7 +416,7 @@ static int walRemoveWalFiles(const char *path) {
|
||||||
|
|
||||||
while ((ent = readdir(dir))!= NULL) {
|
while ((ent = readdir(dir))!= NULL) {
|
||||||
if ( strncmp(ent->d_name, walPrefix, plen) == 0) {
|
if ( strncmp(ent->d_name, walPrefix, plen) == 0) {
|
||||||
sprintf(name, "%s/%s", path, ent->d_name);
|
snprintf(name, sizeof(name), "%s/%s", path, ent->d_name);
|
||||||
if (remove(name) <0) {
|
if (remove(name) <0) {
|
||||||
wError("wal:%s, failed to remove(%s)", name, strerror(errno));
|
wError("wal:%s, failed to remove(%s)", name, strerror(errno));
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
|
|
@ -30,7 +30,7 @@ static int32_t doQuery(TAOS* taos, const char* sql) {
|
||||||
|
|
||||||
TAOS_RES* res = taos_query(taos, sql);
|
TAOS_RES* res = taos_query(taos, sql);
|
||||||
if (taos_errno(res) != 0) {
|
if (taos_errno(res) != 0) {
|
||||||
printf("failed to execute query, reason:%s\n", taos_errstr(res));
|
printf("failed to execute query, reason:%s\n", taos_errstr(taos));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ static __attribute__((unused)) void multiThreadTest(int32_t numOfThreads, void*
|
||||||
pthread_attr_init(&thattr);
|
pthread_attr_init(&thattr);
|
||||||
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
||||||
|
|
||||||
pthread_t* threadId = malloc(sizeof(pthread_t)*numOfThreads);
|
pthread_t* threadId = (pthread_t*)malloc(sizeof(pthread_t)*(uint32_t)numOfThreads);
|
||||||
|
|
||||||
for (int i = 0; i < numOfThreads; ++i) {
|
for (int i = 0; i < numOfThreads; ++i) {
|
||||||
pthread_create(&threadId[i], NULL, oneLoader, conn);
|
pthread_create(&threadId[i], NULL, oneLoader, conn);
|
||||||
|
@ -115,15 +115,15 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
printf("success to connect to server\n");
|
printf("success to connect to server\n");
|
||||||
// doQuery(taos, "select c1,count(*) from group_db0.group_mt0 where c1<8 group by c1");
|
// doQuery(taos, "select c1,count(*) from group_db0.group_mt0 where c1<8 group by c1");
|
||||||
doQuery(taos, "select * from test.m1");
|
// doQuery(taos, "select * from test.m1");
|
||||||
|
|
||||||
// multiThreadTest(1, taos);
|
// multiThreadTest(1, taos);
|
||||||
// doQuery(taos, "select tbname from test.m1");
|
// doQuery(taos, "select tbname from test.m1");
|
||||||
// doQuery(taos, "select max(c1), min(c2), sum(c3), avg(c4), first(c7), last(c8), first(c9) from lm2_db0.lm2_stb0 where ts >= 1537146000000 and ts <= 1543145400000 and tbname in ('lm2_tb0') interval(1s) group by t1");
|
// doQuery(taos, "select max(c1), min(c2), sum(c3), avg(c4), first(c7), last(c8), first(c9) from lm2_db0.lm2_stb0 where ts >= 1537146000000 and ts <= 1543145400000 and tbname in ('lm2_tb0') interval(1s) group by t1");
|
||||||
// doQuery(taos, "select max(c1), min(c2), sum(c3), avg(c4), first(c7), last(c8), first(c9) from lm2_db0.lm2_stb0 where ts >= 1537146000000 and ts <= 1543145400000 and tbname in ('lm2_tb0', 'lm2_tb1', 'lm2_tb2') interval(1s)");
|
// doQuery(taos, "select max(c1), min(c2), sum(c3), avg(c4), first(c7), last(c8), first(c9) from lm2_db0.lm2_stb0 where ts >= 1537146000000 and ts <= 1543145400000 and tbname in ('lm2_tb0', 'lm2_tb1', 'lm2_tb2') interval(1s)");
|
||||||
// for(int32_t i = 0; i < 100000; ++i) {
|
for(int32_t i = 0; i < 200; ++i) {
|
||||||
// doQuery(taos, "insert into t1 values(now, 2)");
|
doQuery(taos, "select * from lm2_db0.lm2_stb0");
|
||||||
// }
|
}
|
||||||
// doQuery(taos, "create table t1(ts timestamp, k binary(12), f nchar(2))");
|
// doQuery(taos, "create table t1(ts timestamp, k binary(12), f nchar(2))");
|
||||||
|
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
|
|
|
@ -141,7 +141,7 @@ class TDTestCase:
|
||||||
tdSql.prepare()
|
tdSql.prepare()
|
||||||
|
|
||||||
# 8 bytes for timestamp
|
# 8 bytes for timestamp
|
||||||
maxRowSize = 65536 - 8
|
maxRowSize = 65535 - 8
|
||||||
maxCols = self.getLimitFromSourceCode('TSDB_MAX_COLUMNS') - 1
|
maxCols = self.getLimitFromSourceCode('TSDB_MAX_COLUMNS') - 1
|
||||||
|
|
||||||
# for binary cols, 2 bytes are used for length
|
# for binary cols, 2 bytes are used for length
|
||||||
|
|
|
@ -50,6 +50,7 @@ endi
|
||||||
|
|
||||||
print =============== step2
|
print =============== step2
|
||||||
system sh/exec.sh -n dnode1 -s stop
|
system sh/exec.sh -n dnode1 -s stop
|
||||||
|
sleep 5000
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
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 walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 10
|
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 10
|
||||||
|
|
|
@ -34,6 +34,7 @@ endi
|
||||||
|
|
||||||
print =============== step2
|
print =============== step2
|
||||||
system sh/exec.sh -n dnode1 -s stop
|
system sh/exec.sh -n dnode1 -s stop
|
||||||
|
sleep 5000
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
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 walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 10
|
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 10
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode2 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c alternativeRole -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode2 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode3 -c arbitrator -v $arbitrator
|
||||||
|
|
||||||
|
print ============== step0: start tarbitrator
|
||||||
|
system sh/exec_tarbitrator.sh -s start
|
||||||
|
|
||||||
|
print ============== step1: start dnode1, only deploy mnode
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ============== step2: start dnode2/dnode3/dnode4 and add into cluster , then create database with replica 3, and create table to max tables
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
system sh/exec.sh -n dnode3 -s start
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sql create dnode $hostname3
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$totalTableNum = 16
|
||||||
|
$sleepTimer = 3000
|
||||||
|
|
||||||
|
$db = db
|
||||||
|
sql create database $db replica 3
|
||||||
|
sql use $db
|
||||||
|
|
||||||
|
# create table , insert data
|
||||||
|
$stb = stb
|
||||||
|
sql create table $stb (ts timestamp, c1 int) tags(t1 int)
|
||||||
|
$rowNum = 10
|
||||||
|
$tblNum = $totalTableNum
|
||||||
|
$totalRows = 0
|
||||||
|
$tsStart = 1420041600000
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
|
||||||
|
print ============== step3: create one table, should return error for not more vnode
|
||||||
|
sql_error create table tbm using $stb tags( 10000 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode2 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c alternativeRole -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode2 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode3 -c arbitrator -v $arbitrator
|
||||||
|
|
||||||
|
print ============== step0: start tarbitrator
|
||||||
|
system sh/exec_tarbitrator.sh -s start
|
||||||
|
|
||||||
|
print ============== step1: start dnode1, only deploy mnode
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ============== step2: start dnode2/dnode3/dnode4 and add into cluster , then create database with replica 3, and create table to max tables
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
system sh/exec.sh -n dnode3 -s start
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sql create dnode $hostname3
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$totalTableNum = 16
|
||||||
|
$sleepTimer = 3000
|
||||||
|
|
||||||
|
$db = db
|
||||||
|
sql create database $db replica 3
|
||||||
|
sql use $db
|
||||||
|
|
||||||
|
# create table , insert data
|
||||||
|
$stb = stb
|
||||||
|
sql create table $stb (ts timestamp, c1 int) tags(t1 int)
|
||||||
|
$rowNum = 10
|
||||||
|
$tblNum = $totalTableNum
|
||||||
|
$totalRows = 0
|
||||||
|
$tsStart = 1420041600000
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
|
||||||
|
print ============== step3: drop dnode4, should return error for not more dnode
|
||||||
|
sql_error drop dnode $hostname4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,309 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode2 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c walLevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c alternativeRole -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode2 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode3 -c arbitrator -v $arbitrator
|
||||||
|
|
||||||
|
print ============== step0: start tarbitrator
|
||||||
|
system sh/exec_tarbitrator.sh -s start
|
||||||
|
|
||||||
|
print ============== step1: start dnode1, only deploy mnode
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ============== step2: start dnode2/dnode3/dnode4 and add into cluster , then create database with replica 3, and create table, insert data
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
system sh/exec.sh -n dnode3 -s start
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sql create dnode $hostname3
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$totalTableNum = 10
|
||||||
|
$sleepTimer = 3000
|
||||||
|
|
||||||
|
$db = db
|
||||||
|
sql create database $db replica 3 maxTables $totalTableNum
|
||||||
|
sql use $db
|
||||||
|
|
||||||
|
# create table , insert data
|
||||||
|
$stb = stb
|
||||||
|
sql create table $stb (ts timestamp, c1 int) tags(t1 int)
|
||||||
|
$rowNum = 10
|
||||||
|
$tblNum = $totalTableNum
|
||||||
|
$totalRows = 0
|
||||||
|
$tsStart = 1420041600000
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step3: drop the middle table 5
|
||||||
|
sql drop table tb5
|
||||||
|
$totalRows = $totalRows - 10
|
||||||
|
sleep 6000
|
||||||
|
|
||||||
|
print ============== step4: insert data into other tables
|
||||||
|
$tsStart = 1420041610000
|
||||||
|
$i = 0
|
||||||
|
$tblNum = 5
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
$i = 6
|
||||||
|
$tblNum = 10
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
|
||||||
|
print ============== step5: create the middle table 5 and insert data
|
||||||
|
sql create table tb5 using $stb tags( 5 )
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$tsStart = 1420041620000
|
||||||
|
$i = 5
|
||||||
|
$tblNum = 6
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select count(*) from tb5
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step6: drop the first table 0
|
||||||
|
sql drop table tb0
|
||||||
|
$totalRows = $totalRows - 20
|
||||||
|
sleep 6000
|
||||||
|
|
||||||
|
print ============== step7: insert data into other tables
|
||||||
|
$tsStart = 1420041630000
|
||||||
|
$i = 1
|
||||||
|
$tblNum = 10
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from tb5
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != 20 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step8: create the first table 0 and insert data
|
||||||
|
sql create table tb0 using $stb tags( 0 )
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$tsStart = 1420041640000
|
||||||
|
$i = 0
|
||||||
|
$tblNum = 10
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select count(*) from tb0
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step9: drop the last table 9
|
||||||
|
sql drop table tb9
|
||||||
|
$totalRows = $totalRows - 40
|
||||||
|
sleep 6000
|
||||||
|
|
||||||
|
print ============== step10: insert data into other tables
|
||||||
|
$tsStart = 1420041650000
|
||||||
|
$i = 0
|
||||||
|
$tblNum = 9
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
|
||||||
|
print ============== step11: create the last table 9 and insert data
|
||||||
|
sql create table tb9 using $stb tags( 9 )
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$tsStart = 1420041660000
|
||||||
|
$i = 0
|
||||||
|
$tblNum = 10
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
#sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select count(*) from tb9
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
|
@ -0,0 +1,168 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
system sh/deploy.sh -n dnode5 -i 5
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c numOfMPeers -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c walLevel -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode5 -c balanceInterval -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c numOfTotalVnodes -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c alternativeRole -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode2 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode3 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode4 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode5 -c arbitrator -v $arbitrator
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode5 -c offlineThreshold -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c enableCoreFile -v 1
|
||||||
|
|
||||||
|
print ============== step0: start tarbitrator
|
||||||
|
system sh/exec_tarbitrator.sh -s start
|
||||||
|
|
||||||
|
print ============== step1: start dnode1, only deploy mnode
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ============== step2: start dnode2/dnode3 and add into cluster, then create database, create table , and insert data
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
system sh/exec.sh -n dnode3 -s start
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sql create dnode $hostname3
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$rowNum = 10
|
||||||
|
$tblNum = 16
|
||||||
|
$totalRows = 0
|
||||||
|
$tsStart = 1420041600000
|
||||||
|
|
||||||
|
$db = db
|
||||||
|
sql create database $db replica 2
|
||||||
|
sql use $db
|
||||||
|
|
||||||
|
# create table , insert data
|
||||||
|
$stb = stb
|
||||||
|
sql create table $stb (ts timestamp, c1 int) tags(t1 int)
|
||||||
|
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
print info: select count(*) from $stb
|
||||||
|
sleep 1000
|
||||||
|
sql reset query cache
|
||||||
|
sleep 1000
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step3: stop dnode4, after timerout dnode4 will be auto-dropped.
|
||||||
|
### The script using down port to stop the network is invalid, so temp it stops the service instead
|
||||||
|
system sh/exec.sh -n dnode4 -s stop
|
||||||
|
#system sh/port.sh -p 7400 -s down
|
||||||
|
sleep 12000
|
||||||
|
|
||||||
|
wait_dnode4_dropped:
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 3 then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||||
|
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||||
|
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||||
|
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||||
|
#print $data0_5 $data1_5 $data2_5 $data3_5 $data4_5
|
||||||
|
#print $data0_6 $data1_6 $data2_6 $data3_6 $data4_6
|
||||||
|
#$dnode1Status = $data4_1
|
||||||
|
$dnode2Status = $data4_2
|
||||||
|
$dnode3Status = $data4_3
|
||||||
|
$dnode4Status = $data4_4
|
||||||
|
#$dnode5Status = $data4_5
|
||||||
|
|
||||||
|
if $dnode2Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
if $dnode3Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step4: restart dnode4, but there no dnode4 in cluster
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
|
@ -0,0 +1,224 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
system sh/deploy.sh -n dnode5 -i 5
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c numOfMPeers -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c walLevel -v 1
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode5 -c balanceInterval -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c numOfTotalVnodes -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode5 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c alternativeRole -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode3 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode2 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode3 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode4 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode5 -c arbitrator -v $arbitrator
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode2 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode3 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode5 -c offlineThreshold -v 10
|
||||||
|
|
||||||
|
system sh/cfg.sh -n dnode1 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode2 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode3 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c enableCoreFile -v 1
|
||||||
|
system sh/cfg.sh -n dnode5 -c enableCoreFile -v 1
|
||||||
|
|
||||||
|
print ============== step0: start tarbitrator
|
||||||
|
system sh/exec_tarbitrator.sh -s start
|
||||||
|
|
||||||
|
print ============== step1: start dnode1, only deploy mnode
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ============== step2: start dnode2/dnode3 and add into cluster, then create database, create table , and insert data
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
system sh/exec.sh -n dnode3 -s start
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sql create dnode $hostname3
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 3000
|
||||||
|
|
||||||
|
$rowNum = 10
|
||||||
|
$tblNum = 16
|
||||||
|
$totalRows = 0
|
||||||
|
$tsStart = 1420041600000
|
||||||
|
|
||||||
|
$db = db
|
||||||
|
sql create database $db replica 2
|
||||||
|
sql use $db
|
||||||
|
|
||||||
|
# create table , insert data
|
||||||
|
$stb = stb
|
||||||
|
sql create table $stb (ts timestamp, c1 int) tags(t1 int)
|
||||||
|
|
||||||
|
|
||||||
|
$i = 0
|
||||||
|
while $i < $tblNum
|
||||||
|
$tb = tb . $i
|
||||||
|
sql create table $tb using $stb tags( $i )
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
while $x < $rowNum
|
||||||
|
$ts = $tsStart + $x
|
||||||
|
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 1a , $x ) ( $ts + 2a , $x ) ( $ts + 3a , $x ) ( $ts + 4a , $x ) ( $ts + 5a , $x ) ( $ts + 6a , $x ) ( $ts + 7a , $x ) ( $ts + 8a , $x ) ( $ts + 9a , $x )
|
||||||
|
$x = $x + 10
|
||||||
|
endw
|
||||||
|
$totalRows = $totalRows + $x
|
||||||
|
print info: inserted $x rows into $tb and totalRows: $totalRows
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
print info: select count(*) from $stb
|
||||||
|
sleep 1000
|
||||||
|
sql reset query cache
|
||||||
|
sleep 1000
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step3: stop dnode4, after timerout dnode4 will be auto-dropped.
|
||||||
|
system sh/exec.sh -n dnode4 -s stop
|
||||||
|
sleep 12000
|
||||||
|
|
||||||
|
wait_dnode4_dropped:
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 3 then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||||
|
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||||
|
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||||
|
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||||
|
#print $data0_5 $data1_5 $data2_5 $data3_5 $data4_5
|
||||||
|
#print $data0_6 $data1_6 $data2_6 $data3_6 $data4_6
|
||||||
|
#$dnode1Status = $data4_1
|
||||||
|
$dnode2Status = $data4_2
|
||||||
|
$dnode3Status = $data4_3
|
||||||
|
$dnode4Status = $data4_4
|
||||||
|
#$dnode5Status = $data4_5
|
||||||
|
|
||||||
|
if $dnode2Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
if $dnode3Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_dropped
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select count(*) from $stb
|
||||||
|
print data00 $data00
|
||||||
|
if $data00 != $totalRows then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step4: restart dnode4, but there are not dnode4 in cluster
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step5: recreate dnode4 into cluster, result should fail
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 12000
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============== step5: remove dnode4 director, then recreate dnode4 into cluster, result should success
|
||||||
|
system sh/exec.sh -n dnode4 -s stop
|
||||||
|
system rm -rf ../../../sim/dnode4
|
||||||
|
|
||||||
|
system sh/deploy.sh -n dnode4 -i 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfMPeers -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c walLevel -v 1
|
||||||
|
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
system sh/cfg.sh -n dnode4 -c alternativeRole -v 2
|
||||||
|
system sh/cfg.sh -n dnode4 -c arbitrator -v $arbitrator
|
||||||
|
system sh/cfg.sh -n dnode4 -c offlineThreshold -v 10
|
||||||
|
system sh/cfg.sh -n dnode4 -c enableCoreFile -v 1
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode4 -s start
|
||||||
|
sql create dnode $hostname4
|
||||||
|
sleep 6000
|
||||||
|
|
||||||
|
wait_dnode4_ready:
|
||||||
|
sql show dnodes
|
||||||
|
if $rows != 4 then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_ready
|
||||||
|
endi
|
||||||
|
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||||
|
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||||
|
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||||
|
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||||
|
#print $data0_5 $data1_5 $data2_5 $data3_5 $data4_5
|
||||||
|
#print $data0_6 $data1_6 $data2_6 $data3_6 $data4_6
|
||||||
|
#$dnode1Status = $data4_1
|
||||||
|
$dnode2Status = $data4_2
|
||||||
|
$dnode3Status = $data4_3
|
||||||
|
$dnode4Status = $data4_6
|
||||||
|
#$dnode5Status = $data4_5
|
||||||
|
|
||||||
|
if $dnode2Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_ready
|
||||||
|
endi
|
||||||
|
if $dnode3Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_ready
|
||||||
|
endi
|
||||||
|
if $dnode4Status != ready then
|
||||||
|
sleep 2000
|
||||||
|
goto wait_dnode4_ready
|
||||||
|
endi
|
Loading…
Reference in New Issue