[TD-17]
This commit is contained in:
parent
036b3d3514
commit
b58f945982
|
@ -48,7 +48,7 @@ int32_t mgmtInitMnodes() {
|
||||||
void mgmtCleanupMnodes() {}
|
void mgmtCleanupMnodes() {}
|
||||||
bool mgmtInServerStatus() { return tsMnodeObj.status == TSDB_MN_STATUS_SERVING; }
|
bool mgmtInServerStatus() { return tsMnodeObj.status == TSDB_MN_STATUS_SERVING; }
|
||||||
bool mgmtIsMaster() { return tsMnodeObj.role == TSDB_MN_ROLE_MASTER; }
|
bool mgmtIsMaster() { return tsMnodeObj.role == TSDB_MN_ROLE_MASTER; }
|
||||||
bool mgmtCheckRedirect(void *handle) { return false; }
|
bool mgmtCheckRedirect(void *thandle) { return false; }
|
||||||
|
|
||||||
static int32_t mgmtGetMnodesNum() {
|
static int32_t mgmtGetMnodesNum() {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -117,7 +117,7 @@ static int32_t mgmtGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
|
||||||
pShow->offset[i] = pShow->offset[i - 1] + pShow->bytes[i - 1];
|
pShow->offset[i] = pShow->offset[i - 1] + pShow->bytes[i - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
pShow->numOfRows = mgmtGetDnodesNum();
|
pShow->numOfRows = mgmtGetMnodesNum();
|
||||||
pShow->rowSize = pShow->offset[cols - 1] + pShow->bytes[cols - 1];
|
pShow->rowSize = pShow->offset[cols - 1] + pShow->bytes[cols - 1];
|
||||||
pShow->pNode = NULL;
|
pShow->pNode = NULL;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ typedef int32_t (*SShowMetaFp)(STableMetaMsg *pMeta, SShowObj *pShow, void *pCon
|
||||||
typedef int32_t (*SShowRetrieveFp)(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
typedef int32_t (*SShowRetrieveFp)(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
||||||
|
|
||||||
static int mgmtShellRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
static int mgmtShellRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
||||||
static bool mgmtCheckMsgReadOnly(int8_t type, void *pCont);
|
static bool mgmtCheckMsgReadOnly(SQueuedMsg *pMsg);
|
||||||
static void mgmtProcessMsgFromShell(SRpcMsg *pMsg);
|
static void mgmtProcessMsgFromShell(SRpcMsg *pMsg);
|
||||||
static void mgmtProcessUnSupportMsg(SRpcMsg *rpcMsg);
|
static void mgmtProcessUnSupportMsg(SRpcMsg *rpcMsg);
|
||||||
static void mgmtProcessMsgWhileNotReady(SRpcMsg *rpcMsg);
|
static void mgmtProcessMsgWhileNotReady(SRpcMsg *rpcMsg);
|
||||||
|
@ -135,7 +135,7 @@ static void mgmtProcessMsgFromShell(SRpcMsg *rpcMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mgmtCheckRedirect(rpcMsg->handle)) {
|
if (mgmtCheckRedirect(rpcMsg->handle)) {
|
||||||
// send resp in redirect func
|
// rpcSendRedirectRsp(rpcMsg->handle, mgmtGetMnodeIpListForRedirect());
|
||||||
rpcFreeCont(rpcMsg->pCont);
|
rpcFreeCont(rpcMsg->pCont);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ static void mgmtProcessMsgFromShell(SRpcMsg *rpcMsg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mgmtCheckMsgReadOnly(rpcMsg->msgType, rpcMsg->pCont)) {
|
if (mgmtCheckMsgReadOnly(pMsg)) {
|
||||||
(*tsMgmtProcessShellMsgFp[rpcMsg->msgType])(pMsg);
|
(*tsMgmtProcessShellMsgFp[rpcMsg->msgType])(pMsg);
|
||||||
mgmtFreeQueuedMsg(pMsg);
|
mgmtFreeQueuedMsg(pMsg);
|
||||||
} else {
|
} else {
|
||||||
|
@ -185,7 +185,7 @@ static void mgmtProcessShowMsg(SQueuedMsg *pMsg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tsMgmtShowMetaFp[pShowMsg->type]) {
|
if (!tsMgmtShowMetaFp[pShowMsg->type] || !tsMgmtShowRetrieveFp[pShowMsg->type]) {
|
||||||
mError("show type:%s is not support", taosGetShowTypeStr(pShowMsg->type));
|
mError("show type:%s is not support", taosGetShowTypeStr(pShowMsg->type));
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_OPS_NOT_SUPPORT);
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_OPS_NOT_SUPPORT);
|
||||||
return;
|
return;
|
||||||
|
@ -299,22 +299,13 @@ static void mgmtProcessRetrieveMsg(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessHeartBeatMsg(SQueuedMsg *pMsg) {
|
static void mgmtProcessHeartBeatMsg(SQueuedMsg *pMsg) {
|
||||||
//SCMHeartBeatMsg *pHBMsg = (SCMHeartBeatMsg *) rpcMsg->pCont;
|
|
||||||
//mgmtSaveQueryStreamList(pHBMsg);
|
|
||||||
|
|
||||||
SCMHeartBeatRsp *pHBRsp = (SCMHeartBeatRsp *) rpcMallocCont(sizeof(SCMHeartBeatRsp));
|
SCMHeartBeatRsp *pHBRsp = (SCMHeartBeatRsp *) rpcMallocCont(sizeof(SCMHeartBeatRsp));
|
||||||
if (pHBRsp == NULL) {
|
if (pHBRsp == NULL) {
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SERV_OUT_OF_MEMORY);
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SERV_OUT_OF_MEMORY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcConnInfo connInfo;
|
if (pMsg->usePublicIp) {
|
||||||
if (rpcGetConnInfo(pMsg->thandle, &connInfo) != 0) {
|
|
||||||
mError("conn:%p is already released while process heart beat msg", pMsg->thandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connInfo.serverIp == tsPublicIpInt) {
|
|
||||||
mgmtGetMnodePublicIpList(&pHBRsp->ipList);
|
mgmtGetMnodePublicIpList(&pHBRsp->ipList);
|
||||||
} else {
|
} else {
|
||||||
mgmtGetMnodePrivateIpList(&pHBRsp->ipList);
|
mgmtGetMnodePrivateIpList(&pHBRsp->ipList);
|
||||||
|
@ -424,10 +415,10 @@ static void mgmtProcessUseMsg(SQueuedMsg *pMsg) {
|
||||||
SCMUseDbMsg *pUseDbMsg = pMsg->pCont;
|
SCMUseDbMsg *pUseDbMsg = pMsg->pCont;
|
||||||
|
|
||||||
// todo check for priority of current user
|
// todo check for priority of current user
|
||||||
SDbObj* pDbObj = mgmtGetDb(pUseDbMsg->db);
|
pMsg->pDb = mgmtGetDb(pUseDbMsg->db);
|
||||||
|
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (pDbObj == NULL) {
|
if (pMsg->pDb == NULL) {
|
||||||
code = TSDB_CODE_INVALID_DB;
|
code = TSDB_CODE_INVALID_DB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,26 +429,29 @@ static void mgmtProcessUseMsg(SQueuedMsg *pMsg) {
|
||||||
/**
|
/**
|
||||||
* check if we need to add mgmtProcessTableMetaMsg into tranQueue, which will be executed one-by-one.
|
* check if we need to add mgmtProcessTableMetaMsg into tranQueue, which will be executed one-by-one.
|
||||||
*/
|
*/
|
||||||
static bool mgmtCheckMeterMetaMsgType(void *pMsg) {
|
static bool mgmtCheckTableMetaMsgReadOnly(SQueuedMsg *pMsg) {
|
||||||
SCMTableInfoMsg *pInfo = (SCMTableInfoMsg *) pMsg;
|
SCMTableInfoMsg *pInfo = (SCMTableInfoMsg *) pMsg;
|
||||||
int16_t autoCreate = htons(pInfo->createFlag);
|
pMsg->pTable = mgmtGetTable(pInfo->tableId);
|
||||||
STableInfo *pTable = mgmtGetTable(pInfo->tableId);
|
if (pMsg->pTable != NULL) return true;
|
||||||
|
|
||||||
// If table does not exists and autoCreate flag is set, we add the handler into task queue
|
// If table does not exists and autoCreate flag is set, we add the handler into task queue
|
||||||
bool addIntoTranQueue = (pTable == NULL && autoCreate == 1);
|
int16_t autoCreate = htons(pInfo->createFlag);
|
||||||
if (addIntoTranQueue) {
|
if (autoCreate == 1) {
|
||||||
mTrace("table:%s auto created task added", pInfo->tableId);
|
mTrace("table:%s auto created task added", pInfo->tableId);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mgmtDecTableRef(pTable);
|
return true;
|
||||||
return addIntoTranQueue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool mgmtCheckMsgReadOnly(int8_t type, void *pCont) {
|
static bool mgmtCheckMsgReadOnly(SQueuedMsg *pMsg) {
|
||||||
if ((type == TSDB_MSG_TYPE_CM_TABLE_META && (!mgmtCheckMeterMetaMsgType(pCont))) ||
|
if (pMsg->msgType == TSDB_MSG_TYPE_CM_TABLE_META) {
|
||||||
type == TSDB_MSG_TYPE_CM_STABLE_VGROUP || type == TSDB_MSG_TYPE_RETRIEVE ||
|
return mgmtCheckTableMetaMsgReadOnly(pMsg);
|
||||||
type == TSDB_MSG_TYPE_CM_SHOW || type == TSDB_MSG_TYPE_CM_TABLES_META ||
|
}
|
||||||
type == TSDB_MSG_TYPE_CM_CONNECT) {
|
|
||||||
|
if (pMsg->msgType == TSDB_MSG_TYPE_CM_STABLE_VGROUP || pMsg->msgType == TSDB_MSG_TYPE_RETRIEVE ||
|
||||||
|
pMsg->msgType == TSDB_MSG_TYPE_CM_SHOW || pMsg->msgType == TSDB_MSG_TYPE_CM_TABLES_META ||
|
||||||
|
pMsg->msgType == TSDB_MSG_TYPE_CM_CONNECT) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,8 +77,6 @@ static void mgmtGetSuperTableMeta(SQueuedMsg *pMsg);
|
||||||
static void mgmtGetChildTableMeta(SQueuedMsg *pMsg);
|
static void mgmtGetChildTableMeta(SQueuedMsg *pMsg);
|
||||||
|
|
||||||
static void mgmtProcessAlterTableMsg(SQueuedMsg *queueMsg);
|
static void mgmtProcessAlterTableMsg(SQueuedMsg *queueMsg);
|
||||||
static void mgmtAlterChildTable(SQueuedMsg *pMsg);
|
|
||||||
static void mgmtAlterSuperTable(SQueuedMsg *pMsg);
|
|
||||||
static void mgmtProcessAlterTableRsp(SRpcMsg *rpcMsg);
|
static void mgmtProcessAlterTableRsp(SRpcMsg *rpcMsg);
|
||||||
|
|
||||||
static void mgmtDestroyChildTable(SChildTableObj *pTable) {
|
static void mgmtDestroyChildTable(SChildTableObj *pTable) {
|
||||||
|
@ -328,6 +326,7 @@ static int32_t mgmtInitChildTables() {
|
||||||
pNode = pLastNode;
|
pNode = pLastNode;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
mgmtDecTableRef(pSuperTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,50 +606,6 @@ static void mgmtProcessDropTableMsg(SQueuedMsg *pMsg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessAlterTableMsg(SQueuedMsg *pMsg) {
|
|
||||||
SCMAlterTableMsg *pAlter = pMsg->pCont;
|
|
||||||
mTrace("table:%s, alter table msg is received from thandle:%p", pAlter->tableId, pMsg->thandle);
|
|
||||||
|
|
||||||
pMsg->pDb = mgmtGetDbByTableId(pAlter->tableId);
|
|
||||||
if (pMsg->pDb == NULL || pMsg->pDb->dirty) {
|
|
||||||
mError("table:%s, failed to alter table, db not selected", pAlter->tableId);
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mgmtCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
|
|
||||||
mError("table:%s, failed to alter table, its log db", pAlter->tableId);
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_MONITOR_DB_FORBIDDEN);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pMsg->pTable = mgmtGetTable(pAlter->tableId);
|
|
||||||
if (pMsg->pTable == NULL) {
|
|
||||||
mError("table:%s, failed to alter table, table not exist", pMsg->pTable->tableId);
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_INVALID_TABLE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pAlter->numOfCols = htons(pAlter->numOfCols);
|
|
||||||
if (pAlter->numOfCols > 2) {
|
|
||||||
mError("table:%s, error numOfCols:%d in alter table", pAlter->tableId, pAlter->numOfCols);
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_APP_ERROR);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < pAlter->numOfCols; ++i) {
|
|
||||||
pAlter->schema[i].bytes = htons(pAlter->schema[i].bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pMsg->pTable->type == TSDB_SUPER_TABLE) {
|
|
||||||
mTrace("table:%s, start to alter stable", pAlter->tableId);
|
|
||||||
mgmtAlterSuperTable(pMsg);
|
|
||||||
} else {
|
|
||||||
mTrace("table:%s, start to alter ctable", pAlter->tableId);
|
|
||||||
mgmtAlterChildTable(pMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mgmtProcessTableMetaMsg(SQueuedMsg *pMsg) {
|
static void mgmtProcessTableMetaMsg(SQueuedMsg *pMsg) {
|
||||||
SCMTableInfoMsg *pInfo = pMsg->pCont;
|
SCMTableInfoMsg *pInfo = pMsg->pCont;
|
||||||
mTrace("table:%s, table meta msg is received from thandle:%p", pInfo->tableId, pMsg->thandle);
|
mTrace("table:%s, table meta msg is received from thandle:%p", pInfo->tableId, pMsg->thandle);
|
||||||
|
@ -662,7 +617,6 @@ static void mgmtProcessTableMetaMsg(SQueuedMsg *pMsg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pMsg->pTable = mgmtGetTable(pInfo->tableId);
|
|
||||||
if (pMsg->pTable == NULL) {
|
if (pMsg->pTable == NULL) {
|
||||||
mgmtGetChildTableMeta(pMsg);
|
mgmtGetChildTableMeta(pMsg);
|
||||||
} else {
|
} else {
|
||||||
|
@ -784,13 +738,23 @@ static int32_t mgmtAddSuperTableTag(SSuperTableObj *pStable, SSchema schema[], i
|
||||||
pStable->numOfColumns += ntags;
|
pStable->numOfColumns += ntags;
|
||||||
pStable->sversion++;
|
pStable->sversion++;
|
||||||
|
|
||||||
// sdbUpdateRow(tsSuperTableSdb, pStable, tsSuperTableUpdateSize, SDB_OPER_GLOBAL);
|
SSdbOperDesc oper = {
|
||||||
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
|
.table = tsSuperTableSdb,
|
||||||
|
.pObj = pStable,
|
||||||
|
.rowSize = tsSuperTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
mTrace("Succeed to add tag column %s to table %s", schema[0].name, pStable->info.tableId);
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to add tag %s", pStable->info.tableId, schema[0].name);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtProcessDropSuperTableMsgTag(SSuperTableObj *pStable, char *tagName) {
|
static int32_t mgmtDropSuperTableTag(SSuperTableObj *pStable, char *tagName) {
|
||||||
int32_t col = mgmtFindSuperTableTagIndex(pStable, tagName);
|
int32_t col = mgmtFindSuperTableTagIndex(pStable, tagName);
|
||||||
if (col <= 0 || col >= pStable->numOfTags) {
|
if (col <= 0 || col >= pStable->numOfTags) {
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
|
@ -805,16 +769,27 @@ static int32_t mgmtProcessDropSuperTableMsgTag(SSuperTableObj *pStable, char *ta
|
||||||
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
||||||
pStable->schema = realloc(pStable->schema, schemaSize);
|
pStable->schema = realloc(pStable->schema, schemaSize);
|
||||||
|
|
||||||
// sdbUpdateRow(tsSuperTableSdb, pStable, tsSuperTableUpdateSize, SDB_OPER_GLOBAL);
|
SSdbOperDesc oper = {
|
||||||
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
|
.table = tsSuperTableSdb,
|
||||||
|
.pObj = pStable,
|
||||||
|
.rowSize = tsSuperTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to drop tag %s", pStable->info.tableId, tagName);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtModifySuperTableTagNameByName(SSuperTableObj *pStable, char *oldTagName, char *newTagName) {
|
static int32_t mgmtModifySuperTableTagName(SSuperTableObj *pStable, char *oldTagName, char *newTagName) {
|
||||||
int32_t col = mgmtFindSuperTableTagIndex(pStable, oldTagName);
|
int32_t col = mgmtFindSuperTableTagIndex(pStable, oldTagName);
|
||||||
if (col < 0) {
|
if (col < 0) {
|
||||||
// Tag name does not exist
|
// Tag name does not exist
|
||||||
mError("Failed to modify table %s tag column, oname: %s, nname: %s", pStable->info.tableId, oldTagName, newTagName);
|
mError("table:%s, failed to modify table tag, oldName: %s, newName: %s", pStable->info.tableId, oldTagName, newTagName);
|
||||||
return TSDB_CODE_INVALID_MSG_TYPE;
|
return TSDB_CODE_INVALID_MSG_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -829,24 +804,19 @@ static int32_t mgmtModifySuperTableTagNameByName(SSuperTableObj *pStable, char *
|
||||||
SSchema *schema = (SSchema *) (pStable->schema + (pStable->numOfColumns + col) * sizeof(SSchema));
|
SSchema *schema = (SSchema *) (pStable->schema + (pStable->numOfColumns + col) * sizeof(SSchema));
|
||||||
strncpy(schema->name, newTagName, TSDB_COL_NAME_LEN);
|
strncpy(schema->name, newTagName, TSDB_COL_NAME_LEN);
|
||||||
|
|
||||||
// Encode string
|
SSdbOperDesc oper = {
|
||||||
int32_t size = 1 + sizeof(SSuperTableObj) + TSDB_MAX_BYTES_PER_ROW;
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
char *msg = (char *) malloc(size);
|
.table = tsSuperTableSdb,
|
||||||
if (msg == NULL) return TSDB_CODE_APP_ERROR;
|
.pObj = pStable,
|
||||||
memset(msg, 0, size);
|
.rowSize = tsSuperTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
// mgmtSuperTableActionEncode(pStable, msg, size, &rowSize);
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
int32_t ret = 0;
|
return TSDB_CODE_SDB_ERROR;
|
||||||
// int32_t ret = sdbUpdateRow(tsSuperTableSdb, msg, tsSuperTableUpdateSize, SDB_OPER_GLOBAL);
|
|
||||||
tfree(msg);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
|
||||||
mError("Failed to modify table %s tag column", pStable->info.tableId);
|
|
||||||
return TSDB_CODE_APP_ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mTrace("Succeed to modify table %s tag column", pStable->info.tableId);
|
mPrint("table %s, succeed to modify tag %s to %s", pStable->info.tableId, oldTagName, newTagName);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,7 +831,7 @@ static int32_t mgmtFindSuperTableColumnIndex(SSuperTableObj *pStable, char *colN
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtAddSuperTableColumn(SSuperTableObj *pStable, SSchema schema[], int32_t ncols) {
|
static int32_t mgmtAddSuperTableColumn(SDbObj *pDb, SSuperTableObj *pStable, SSchema schema[], int32_t ncols) {
|
||||||
if (ncols <= 0) {
|
if (ncols <= 0) {
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -872,18 +842,6 @@ static int32_t mgmtAddSuperTableColumn(SSuperTableObj *pStable, SSchema schema[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pMsg->pDb = mgmtGetDbByTableId(pStable->info.tableId);
|
|
||||||
// if (pMsg->pDb == NULL) {
|
|
||||||
// mError("meter: %s not belongs to any database", pStable->info.tableId);
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// pMsg->pAcct = acctGetAcct(pMsg->pDb->cfg.acct);
|
|
||||||
// if (pMsg->pAcct == NULL) {
|
|
||||||
// mError("DB: %s not belongs to andy account", pMsg->pDb->name);
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
||||||
pStable->schema = realloc(pStable->schema, schemaSize + sizeof(SSchema) * ncols);
|
pStable->schema = realloc(pStable->schema, schemaSize + sizeof(SSchema) * ncols);
|
||||||
|
|
||||||
|
@ -899,30 +857,34 @@ static int32_t mgmtAddSuperTableColumn(SSuperTableObj *pStable, SSchema schema[]
|
||||||
pStable->numOfColumns += ncols;
|
pStable->numOfColumns += ncols;
|
||||||
pStable->sversion++;
|
pStable->sversion++;
|
||||||
|
|
||||||
// pMsg->pAcct->acctInfo.numOfTimeSeries += (ncols * pStable->numOfTables);
|
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
||||||
// sdbUpdateRow(tsSuperTableSdb, pStable, tsSuperTableUpdateSize, SDB_OPER_GLOBAL);
|
if (pAcct != NULL) {
|
||||||
|
pAcct->acctInfo.numOfTimeSeries += (ncols * pStable->numOfTables);
|
||||||
|
acctDecRef(pAcct);
|
||||||
|
}
|
||||||
|
|
||||||
|
SSdbOperDesc oper = {
|
||||||
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
|
.table = tsSuperTableSdb,
|
||||||
|
.pObj = pStable,
|
||||||
|
.rowSize = tsSuperTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to add column", pStable->info.tableId);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtProcessDropSuperTableMsgColumnByName(SSuperTableObj *pStable, char *colName) {
|
static int32_t mgmtDropSuperTableColumn(SDbObj *pDb, SSuperTableObj *pStable, char *colName) {
|
||||||
int32_t col = mgmtFindSuperTableColumnIndex(pStable, colName);
|
int32_t col = mgmtFindSuperTableColumnIndex(pStable, colName);
|
||||||
if (col < 0) {
|
if (col < 0) {
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pMsg->pDb = mgmtGetDbByTableId(pStable->info.tableId);
|
|
||||||
// if (pMsg->pDb == NULL) {
|
|
||||||
// mError("meter: %s not belongs to any database", pStable->info.tableId);
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// pMsg->pAcct = acctGetAcct(pMsg->pDb->cfg.acct);
|
|
||||||
// if (pMsg->pAcct == NULL) {
|
|
||||||
// mError("DB: %s not belongs to andy account", pMsg->pDb->name);
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
|
|
||||||
memmove(pStable->schema + sizeof(SSchema) * col, pStable->schema + sizeof(SSchema) * (col + 1),
|
memmove(pStable->schema + sizeof(SSchema) * col, pStable->schema + sizeof(SSchema) * (col + 1),
|
||||||
sizeof(SSchema) * (pStable->numOfColumns + pStable->numOfTags - col - 1));
|
sizeof(SSchema) * (pStable->numOfColumns + pStable->numOfTags - col - 1));
|
||||||
|
|
||||||
|
@ -932,18 +894,32 @@ static int32_t mgmtProcessDropSuperTableMsgColumnByName(SSuperTableObj *pStable,
|
||||||
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
int32_t schemaSize = sizeof(SSchema) * (pStable->numOfTags + pStable->numOfColumns);
|
||||||
pStable->schema = realloc(pStable->schema, schemaSize);
|
pStable->schema = realloc(pStable->schema, schemaSize);
|
||||||
|
|
||||||
// pMsg->pAcct->acctInfo.numOfTimeSeries -= (pStable->numOfTables);
|
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
||||||
// sdbUpdateRow(tsSuperTableSdb, pStable, tsSuperTableUpdateSize, SDB_OPER_GLOBAL);
|
if (pAcct != NULL) {
|
||||||
|
pAcct->acctInfo.numOfTimeSeries -= pStable->numOfTables;
|
||||||
|
acctDecRef(pAcct);
|
||||||
|
}
|
||||||
|
|
||||||
|
SSdbOperDesc oper = {
|
||||||
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
|
.table = tsSuperTableSdb,
|
||||||
|
.pObj = pStable,
|
||||||
|
.rowSize = tsSuperTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to delete column", pStable->info.tableId);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// show super tables
|
// show super tables
|
||||||
static int32_t mgmtGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
static int32_t mgmtGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||||
SDbObj *pDb = mgmtGetDb(pShow->db);
|
SDbObj *pDb = mgmtGetDb(pShow->db);
|
||||||
if (pDb == NULL) {
|
if (pDb == NULL) return TSDB_CODE_DB_NOT_SELECTED;
|
||||||
return TSDB_CODE_DB_NOT_SELECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
SSchema *pSchema = pMeta->schema;
|
SSchema *pSchema = pMeta->schema;
|
||||||
|
@ -1146,26 +1122,6 @@ static void mgmtProcessSuperTableVgroupMsg(SQueuedMsg *pMsg) {
|
||||||
rpcSendResponse(&rpcRsp);
|
rpcSendResponse(&rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtAlterSuperTable(SQueuedMsg *pMsg) {
|
|
||||||
SSuperTableObj *pTable = (SSuperTableObj *)pMsg->pTable;
|
|
||||||
int32_t code = TSDB_CODE_OPS_NOT_SUPPORT;
|
|
||||||
SCMAlterTableMsg *pAlter = pMsg->pCont;
|
|
||||||
|
|
||||||
if (pAlter->type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) {
|
|
||||||
code = mgmtAddSuperTableTag((SSuperTableObj *) pTable, pAlter->schema, 1);
|
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_TAG_COLUMN) {
|
|
||||||
code = mgmtProcessDropSuperTableMsgTag((SSuperTableObj *) pTable, pAlter->schema[0].name);
|
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN) {
|
|
||||||
code = mgmtModifySuperTableTagNameByName((SSuperTableObj *) pTable, pAlter->schema[0].name, pAlter->schema[1].name);
|
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_ADD_COLUMN) {
|
|
||||||
code = mgmtAddSuperTableColumn((SSuperTableObj *) pTable, pAlter->schema, 1);
|
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_COLUMN) {
|
|
||||||
code = mgmtProcessDropSuperTableMsgColumnByName((SSuperTableObj *) pTable, pAlter->schema[0].name);
|
|
||||||
} else {}
|
|
||||||
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, code);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mgmtProcessDropSuperTableRsp(SRpcMsg *rpcMsg) {
|
static void mgmtProcessDropSuperTableRsp(SRpcMsg *rpcMsg) {
|
||||||
mTrace("drop stable rsp received, handle:%p code:%d", rpcMsg->handle, rpcMsg->code);
|
mTrace("drop stable rsp received, handle:%p code:%d", rpcMsg->handle, rpcMsg->code);
|
||||||
}
|
}
|
||||||
|
@ -1410,53 +1366,8 @@ static void mgmtProcessDropChildTableMsg(SQueuedMsg *pMsg) {
|
||||||
mgmtSendMsgToDnode(&ipSet, &rpcMsg);
|
mgmtSendMsgToDnode(&ipSet, &rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t mgmtModifyChildTableTagValueByName(SChildTableObj *pTable, char *tagName, char *nContent) {
|
static int32_t mgmtModifyChildTableTagValue(SChildTableObj *pTable, char *tagName, char *nContent) {
|
||||||
// TODO: send message to dnode
|
return TSDB_CODE_OPS_NOT_SUPPORT;
|
||||||
// int32_t col = mgmtFindSuperTableTagIndex(pTable->superTable, tagName);
|
|
||||||
// if (col < 0 || col > pTable->superTable->numOfTags) {
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //TODO send msg to dnode
|
|
||||||
// mTrace("Succeed to modify tag column %d of table %s", col, pTable->info.tableId);
|
|
||||||
// return TSDB_CODE_SUCCESS;
|
|
||||||
|
|
||||||
// int32_t rowSize = 0;
|
|
||||||
// SSchema *schema = (SSchema *)(pSuperTable->schema + (pSuperTable->numOfColumns + col) * sizeof(SSchema));
|
|
||||||
//
|
|
||||||
// if (col == 0) {
|
|
||||||
// pTable->isDirty = 1;
|
|
||||||
// removeMeterFromMetricIndex(pSuperTable, pTable);
|
|
||||||
// }
|
|
||||||
// memcpy(pTable->pTagData + mgmtGetTagsLength(pMetric, col) + TSDB_TABLE_ID_LEN, nContent, schema->bytes);
|
|
||||||
// if (col == 0) {
|
|
||||||
// addMeterIntoMetricIndex(pMetric, pTable);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Encode the string
|
|
||||||
// int32_t size = sizeof(STabObj) + TSDB_MAX_BYTES_PER_ROW + 1;
|
|
||||||
// char *msg = (char *)malloc(size);
|
|
||||||
// if (msg == NULL) {
|
|
||||||
// mError("failed to allocate message memory while modify tag value");
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
// memset(msg, 0, size);
|
|
||||||
//
|
|
||||||
// mgmtMeterActionEncode(pTable, msg, size, &rowSize);
|
|
||||||
//
|
|
||||||
// int32_t ret = sdbUpdateRow(tsChildTableSdb, msg, rowSize, 1); // Need callback function
|
|
||||||
// tfree(msg);
|
|
||||||
//
|
|
||||||
// if (pTable->isDirty) pTable->isDirty = 0;
|
|
||||||
//
|
|
||||||
// if (ret < 0) {
|
|
||||||
// mError("Failed to modify tag column %d of table %s", col, pTable->info.tableId);
|
|
||||||
// return TSDB_CODE_APP_ERROR;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// mTrace("Succeed to modify tag column %d of table %s", col, pTable->info.tableId);
|
|
||||||
// return TSDB_CODE_SUCCESS;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtFindNormalTableColumnIndex(SChildTableObj *pTable, char *colName) {
|
static int32_t mgmtFindNormalTableColumnIndex(SChildTableObj *pTable, char *colName) {
|
||||||
|
@ -1470,7 +1381,7 @@ static int32_t mgmtFindNormalTableColumnIndex(SChildTableObj *pTable, char *colN
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtAddNormalTableColumn(SChildTableObj *pTable, SSchema schema[], int32_t ncols) {
|
static int32_t mgmtAddNormalTableColumn(SDbObj *pDb, SChildTableObj *pTable, SSchema schema[], int32_t ncols) {
|
||||||
if (ncols <= 0) {
|
if (ncols <= 0) {
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1481,18 +1392,6 @@ static int32_t mgmtAddNormalTableColumn(SChildTableObj *pTable, SSchema schema[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDbObj *pDb = mgmtGetDbByTableId(pTable->info.tableId);
|
|
||||||
if (pDb == NULL) {
|
|
||||||
mError("table: %s not belongs to any database", pTable->info.tableId);
|
|
||||||
return TSDB_CODE_APP_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
|
||||||
if (pAcct == NULL) {
|
|
||||||
mError("DB: %s not belongs to andy account", pDb->name);
|
|
||||||
return TSDB_CODE_APP_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t schemaSize = pTable->numOfColumns * sizeof(SSchema);
|
int32_t schemaSize = pTable->numOfColumns * sizeof(SSchema);
|
||||||
pTable->schema = realloc(pTable->schema, schemaSize + sizeof(SSchema) * ncols);
|
pTable->schema = realloc(pTable->schema, schemaSize + sizeof(SSchema) * ncols);
|
||||||
|
|
||||||
|
@ -1505,53 +1404,60 @@ static int32_t mgmtAddNormalTableColumn(SChildTableObj *pTable, SSchema schema[]
|
||||||
|
|
||||||
pTable->numOfColumns += ncols;
|
pTable->numOfColumns += ncols;
|
||||||
pTable->sversion++;
|
pTable->sversion++;
|
||||||
pAcct->acctInfo.numOfTimeSeries += ncols;
|
|
||||||
|
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
||||||
SSdbOperDesc desc = {0};
|
if (pAcct != NULL) {
|
||||||
desc.type = SDB_OPER_TYPE_GLOBAL;
|
pAcct->acctInfo.numOfTimeSeries += ncols;
|
||||||
desc.pObj = pTable;
|
acctDecRef(pAcct);
|
||||||
desc.table = tsChildTableSdb;
|
}
|
||||||
desc.rowData = pTable;
|
|
||||||
desc.rowSize = tsChildTableUpdateSize;
|
SSdbOperDesc oper = {
|
||||||
sdbUpdateRow(&desc);
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
|
.table = tsChildTableSdb,
|
||||||
|
.pObj = pTable,
|
||||||
|
.rowSize = tsChildTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to add column", pTable->info.tableId);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mgmtDropNormalTableColumnByName(SChildTableObj *pTable, char *colName) {
|
static int32_t mgmtDropNormalTableColumn(SDbObj *pDb, SChildTableObj *pTable, char *colName) {
|
||||||
int32_t col = mgmtFindNormalTableColumnIndex(pTable, colName);
|
int32_t col = mgmtFindNormalTableColumnIndex(pTable, colName);
|
||||||
if (col < 0) {
|
if (col < 0) {
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDbObj *pDb = mgmtGetDbByTableId(pTable->info.tableId);
|
|
||||||
if (pDb == NULL) {
|
|
||||||
mError("table: %s not belongs to any database", pTable->info.tableId);
|
|
||||||
return TSDB_CODE_APP_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
|
||||||
if (pAcct == NULL) {
|
|
||||||
mError("DB: %s not belongs to any account", pDb->name);
|
|
||||||
return TSDB_CODE_APP_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
memmove(pTable->schema + sizeof(SSchema) * col, pTable->schema + sizeof(SSchema) * (col + 1),
|
memmove(pTable->schema + sizeof(SSchema) * col, pTable->schema + sizeof(SSchema) * (col + 1),
|
||||||
sizeof(SSchema) * (pTable->numOfColumns - col - 1));
|
sizeof(SSchema) * (pTable->numOfColumns - col - 1));
|
||||||
|
|
||||||
pTable->numOfColumns--;
|
pTable->numOfColumns--;
|
||||||
pTable->sversion++;
|
pTable->sversion++;
|
||||||
|
|
||||||
pAcct->acctInfo.numOfTimeSeries--;
|
SAcctObj *pAcct = acctGetAcct(pDb->cfg.acct);
|
||||||
|
if (pAcct != NULL) {
|
||||||
SSdbOperDesc desc = {0};
|
pAcct->acctInfo.numOfTimeSeries--;
|
||||||
desc.type = SDB_OPER_TYPE_GLOBAL;
|
acctDecRef(pAcct);
|
||||||
desc.pObj = pTable;
|
}
|
||||||
desc.table = tsChildTableSdb;
|
|
||||||
desc.rowData = pTable;
|
SSdbOperDesc oper = {
|
||||||
desc.rowSize = tsChildTableUpdateSize;
|
.type = SDB_OPER_TYPE_GLOBAL,
|
||||||
sdbUpdateRow(&desc);
|
.table = tsChildTableSdb,
|
||||||
|
.pObj = pTable,
|
||||||
|
.rowSize = tsChildTableUpdateSize
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t code = sdbUpdateRow(&oper);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_SDB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrint("table %s, succeed to add column %s", pTable->info.tableId, colName);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1617,13 +1523,7 @@ static int32_t mgmtDoGetChildTableMeta(SQueuedMsg *pMsg, STableMetaMsg *pMeta) {
|
||||||
void mgmtGetChildTableMeta(SQueuedMsg *pMsg) {
|
void mgmtGetChildTableMeta(SQueuedMsg *pMsg) {
|
||||||
SChildTableObj *pTable = (SChildTableObj *)pMsg->pTable;
|
SChildTableObj *pTable = (SChildTableObj *)pMsg->pTable;
|
||||||
SCMTableInfoMsg *pInfo = pMsg->pCont;
|
SCMTableInfoMsg *pInfo = pMsg->pCont;
|
||||||
SDbObj *pDb = pMsg->pDb;
|
|
||||||
if (pDb == NULL || pDb->dirty) {
|
|
||||||
mError("table:%s, failed to get table meta, db not selected", pInfo->tableId);
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pTable == NULL) {
|
if (pTable == NULL) {
|
||||||
if (htons(pInfo->createFlag) != 1) {
|
if (htons(pInfo->createFlag) != 1) {
|
||||||
mError("table:%s, failed to get table meta, table not exist", pInfo->tableId);
|
mError("table:%s, failed to get table meta, table not exist", pInfo->tableId);
|
||||||
|
@ -1869,19 +1769,6 @@ static void mgmtProcessAlterTableRsp(SRpcMsg *rpcMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mgmtProcessMultiTableMetaMsg(SQueuedMsg *pMsg) {
|
static void mgmtProcessMultiTableMetaMsg(SQueuedMsg *pMsg) {
|
||||||
SRpcConnInfo connInfo;
|
|
||||||
if (rpcGetConnInfo(pMsg->thandle, &connInfo) != 0) {
|
|
||||||
mError("conn:%p is already released while get mulit table meta", pMsg->thandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool usePublicIp = (connInfo.serverIp == tsPublicIpInt);
|
|
||||||
SUserObj *pUser = mgmtGetUser(connInfo.user);
|
|
||||||
if (pUser == NULL) {
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_INVALID_USER);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SCMMultiTableInfoMsg *pInfo = pMsg->pCont;
|
SCMMultiTableInfoMsg *pInfo = pMsg->pCont;
|
||||||
pInfo->numOfTables = htonl(pInfo->numOfTables);
|
pInfo->numOfTables = htonl(pInfo->numOfTables);
|
||||||
|
|
||||||
|
@ -1932,7 +1819,6 @@ static void mgmtProcessMultiTableMetaMsg(SQueuedMsg *pMsg) {
|
||||||
rpcSendResponse(&rpcRsp);
|
rpcSendResponse(&rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// show tables
|
|
||||||
static int32_t mgmtGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
static int32_t mgmtGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||||
SDbObj *pDb = mgmtGetDb(pShow->db);
|
SDbObj *pDb = mgmtGetDb(pShow->db);
|
||||||
if (pDb == NULL) return TSDB_CODE_DB_NOT_SELECTED;
|
if (pDb == NULL) return TSDB_CODE_DB_NOT_SELECTED;
|
||||||
|
@ -2058,19 +1944,69 @@ static int32_t mgmtRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows,
|
||||||
return numOfRows;
|
return numOfRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgmtAlterChildTable(SQueuedMsg *pMsg) {
|
static void mgmtProcessAlterTableMsg(SQueuedMsg *pMsg) {
|
||||||
SChildTableObj *pTable = (SChildTableObj *)pMsg->pTable;
|
SCMAlterTableMsg *pAlter = pMsg->pCont;
|
||||||
int32_t code = TSDB_CODE_OPS_NOT_SUPPORT;
|
mTrace("table:%s, alter table msg is received from thandle:%p", pAlter->tableId, pMsg->thandle);
|
||||||
SCMAlterTableMsg *pAlter = pMsg->pCont;;
|
|
||||||
|
|
||||||
if (pAlter->type == TSDB_ALTER_TABLE_UPDATE_TAG_VAL) {
|
pMsg->pDb = mgmtGetDbByTableId(pAlter->tableId);
|
||||||
code = mgmtModifyChildTableTagValueByName(pTable, pAlter->schema[0].name, pAlter->tagVal);
|
if (pMsg->pDb == NULL || pMsg->pDb->dirty) {
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_ADD_COLUMN) {
|
mError("table:%s, failed to alter table, db not selected", pAlter->tableId);
|
||||||
code = mgmtAddNormalTableColumn(pTable, pAlter->schema, 1);
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_DB_NOT_SELECTED);
|
||||||
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_COLUMN) {
|
return;
|
||||||
code = mgmtDropNormalTableColumnByName(pTable, pAlter->schema[0].name);
|
}
|
||||||
|
|
||||||
|
if (mgmtCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
|
||||||
|
mError("table:%s, failed to alter table, its log db", pAlter->tableId);
|
||||||
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_MONITOR_DB_FORBIDDEN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pMsg->pTable = mgmtGetTable(pAlter->tableId);
|
||||||
|
if (pMsg->pTable == NULL) {
|
||||||
|
mError("table:%s, failed to alter table, table not exist", pMsg->pTable->tableId);
|
||||||
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_INVALID_TABLE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pAlter->numOfCols = htons(pAlter->numOfCols);
|
||||||
|
if (pAlter->numOfCols > 2) {
|
||||||
|
mError("table:%s, error numOfCols:%d in alter table", pAlter->tableId, pAlter->numOfCols);
|
||||||
|
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_APP_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < pAlter->numOfCols; ++i) {
|
||||||
|
pAlter->schema[i].bytes = htons(pAlter->schema[i].bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = TSDB_CODE_OPS_NOT_SUPPORT;
|
||||||
|
if (pMsg->pTable->type == TSDB_SUPER_TABLE) {
|
||||||
|
SSuperTableObj *pTable = (SSuperTableObj *)pMsg->pTable;
|
||||||
|
mTrace("table:%s, start to alter stable", pAlter->tableId);
|
||||||
|
if (pAlter->type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) {
|
||||||
|
code = mgmtAddSuperTableTag(pTable, pAlter->schema, 1);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_TAG_COLUMN) {
|
||||||
|
code = mgmtDropSuperTableTag(pTable, pAlter->schema[0].name);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN) {
|
||||||
|
code = mgmtModifySuperTableTagName(pTable, pAlter->schema[0].name, pAlter->schema[1].name);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_ADD_COLUMN) {
|
||||||
|
code = mgmtAddSuperTableColumn(pMsg->pDb, pTable, pAlter->schema, 1);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_COLUMN) {
|
||||||
|
code = mgmtDropSuperTableColumn(pMsg->pDb, pTable, pAlter->schema[0].name);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
mTrace("table:%s, start to alter ctable", pAlter->tableId);
|
||||||
|
SChildTableObj *pTable = (SChildTableObj *)pMsg->pTable;
|
||||||
|
if (pAlter->type == TSDB_ALTER_TABLE_UPDATE_TAG_VAL) {
|
||||||
|
code = mgmtModifyChildTableTagValue(pTable, pAlter->schema[0].name, pAlter->tagVal);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_ADD_COLUMN) {
|
||||||
|
code = mgmtAddNormalTableColumn(pMsg->pDb, pTable, pAlter->schema, 1);
|
||||||
|
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_COLUMN) {
|
||||||
|
code = mgmtDropNormalTableColumn(pMsg->pDb, pTable, pAlter->schema[0].name);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mgmtSendSimpleResp(pMsg->thandle, code);
|
mgmtSendSimpleResp(pMsg->thandle, code);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue