opt sma and ndex name conflict
This commit is contained in:
parent
0dd4433e58
commit
55a93c9649
|
@ -0,0 +1,37 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef _TD_MND_IDX_COMM_H_
|
||||
#define _TD_MND_IDX_COMM_H_
|
||||
|
||||
#include "mndInt.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct SSIdx {
|
||||
int type; // sma or idx
|
||||
void *pIdx;
|
||||
} SSIdx;
|
||||
|
||||
int32_t mndCheckIdxExist(SMnode *pMnode, char *name, int type, SSIdx *idx);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*_TD_MND_IDX_COMM_H_*/
|
|
@ -17,6 +17,7 @@
|
|||
#include "mndIndex.h"
|
||||
#include "mndDb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndIndexComm.h"
|
||||
#include "mndInfoSchema.h"
|
||||
#include "mndMnode.h"
|
||||
#include "mndPrivilege.h"
|
||||
|
@ -415,8 +416,10 @@ static int32_t mndProcessCreateIdxReq(SRpcMsg *pReq) {
|
|||
mError("idx:%s, failed to create since stb:%s not exist", createReq.idxName, createReq.stbName);
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
pIdx = mndAcquireIdx(pMnode, createReq.idxName);
|
||||
SSIdx idx = {0};
|
||||
if (mndCheckIdxExist(pMnode, createReq.idxName, SDB_IDX, &idx) == 0) {
|
||||
pIdx = idx.pIdx;
|
||||
}
|
||||
if (pIdx != NULL) {
|
||||
terrno = TSDB_CODE_MND_SMA_ALREADY_EXIST;
|
||||
goto _OVER;
|
||||
|
@ -880,6 +883,10 @@ int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) {
|
|||
goto _OVER;
|
||||
}
|
||||
mInfo("idx:%s, start to drop", req.name);
|
||||
SSIdx idx = {0};
|
||||
if (mndCheckIdxExist(pMnode, req.name, SDB_IDX, &idx) == 0) {
|
||||
pIdx = idx.pIdx;
|
||||
}
|
||||
|
||||
pIdx = mndAcquireIdx(pMnode, req.name);
|
||||
if (pIdx == NULL) {
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "mndIndex.h"
|
||||
#include "mndIndexComm.h"
|
||||
#include "mndSma.h"
|
||||
|
||||
static void *mndGetIdx(SMnode *pMnode, char *name, int type) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIdx = sdbAcquire(pSdb, type, name);
|
||||
if (pIdx == NULL && terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) {
|
||||
terrno = 0;
|
||||
}
|
||||
return pIdx;
|
||||
}
|
||||
|
||||
int mndCheckIdxExist(SMnode *pMnode, char *name, int type, SSIdx *idx) {
|
||||
SSmaObj *pSma = mndGetIdx(pMnode, name, SDB_SMA);
|
||||
SIdxObj *pIdx = mndGetIdx(pMnode, name, SDB_IDX);
|
||||
|
||||
if (pSma == NULL && pIdx == NULL) return 0;
|
||||
|
||||
if (pSma != NULL) {
|
||||
if (type == SDB_SMA) {
|
||||
idx->type = SDB_SMA;
|
||||
idx->pIdx = pSma;
|
||||
} else { // type == SDB_IDX
|
||||
mndReleaseSma(pMnode, pSma);
|
||||
}
|
||||
} else {
|
||||
if (type == SDB_SMA) {
|
||||
mndReleaseIdx(pMnode, pIdx);
|
||||
} else {
|
||||
idx->type = SDB_IDX;
|
||||
idx->pIdx = pIdx;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -18,6 +18,7 @@
|
|||
#include "mndDb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndIndex.h"
|
||||
#include "mndIndexComm.h"
|
||||
#include "mndInfoSchema.h"
|
||||
#include "mndMnode.h"
|
||||
#include "mndPrivilege.h"
|
||||
|
@ -735,8 +736,11 @@ static int32_t mndProcessCreateSmaReq(SRpcMsg *pReq) {
|
|||
terrno = TSDB_CODE_MND_STREAM_ALREADY_EXIST;
|
||||
goto _OVER;
|
||||
}
|
||||
SSIdx idx = {0};
|
||||
if (mndCheckIdxExist(pMnode, createReq.name, SDB_SMA, &idx) == 0) {
|
||||
pSma = idx.pIdx;
|
||||
}
|
||||
|
||||
pSma = mndAcquireSma(pMnode, createReq.name);
|
||||
if (pSma != NULL) {
|
||||
if (createReq.igExists) {
|
||||
mInfo("sma:%s, already exist in sma:%s, ignore exist is set", createReq.name, pSma->name);
|
||||
|
@ -982,7 +986,10 @@ static int32_t mndProcessDropSmaReq(SRpcMsg *pReq) {
|
|||
|
||||
mInfo("sma:%s, start to drop", dropReq.name);
|
||||
|
||||
pSma = mndAcquireSma(pMnode, dropReq.name);
|
||||
SSIdx idx = {0};
|
||||
if (mndCheckIdxExist(pMnode, dropReq.name, SDB_SMA, &idx) == 0) {
|
||||
pSma = idx.pIdx;
|
||||
}
|
||||
if (pSma == NULL) {
|
||||
if (dropReq.igNotExists) {
|
||||
mInfo("sma:%s, not exist, ignore not exist is set", dropReq.name);
|
||||
|
|
Loading…
Reference in New Issue