enh: support get meta only from cache
This commit is contained in:
parent
5202ccfbba
commit
973a942d0f
|
@ -309,6 +309,9 @@ int32_t catalogGetUdfInfo(SCatalog* pCtg, SRequestConnInfo* pConn, const char* f
|
||||||
int32_t catalogChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
int32_t catalogChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
||||||
bool* pass);
|
bool* pass);
|
||||||
|
|
||||||
|
int32_t catalogChkAuthFromCache(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
||||||
|
bool* pass, bool* exists);
|
||||||
|
|
||||||
int32_t catalogUpdateUserAuthInfo(SCatalog* pCtg, SGetUserAuthRsp* pAuth);
|
int32_t catalogUpdateUserAuthInfo(SCatalog* pCtg, SGetUserAuthRsp* pAuth);
|
||||||
|
|
||||||
int32_t catalogUpdateVgEpSet(SCatalog* pCtg, const char* dbFName, int32_t vgId, SEpSet* epSet);
|
int32_t catalogUpdateVgEpSet(SCatalog* pCtg, const char* dbFName, int32_t vgId, SEpSet* epSet);
|
||||||
|
|
|
@ -320,7 +320,7 @@ _return:
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t ctgChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
int32_t ctgChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
||||||
bool* pass) {
|
bool* pass, bool* exists) {
|
||||||
bool inCache = false;
|
bool inCache = false;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
|
@ -329,6 +329,13 @@ int32_t ctgChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, co
|
||||||
CTG_ERR_RET(ctgChkAuthFromCache(pCtg, (char*)user, (char*)dbFName, type, &inCache, pass));
|
CTG_ERR_RET(ctgChkAuthFromCache(pCtg, (char*)user, (char*)dbFName, type, &inCache, pass));
|
||||||
|
|
||||||
if (inCache) {
|
if (inCache) {
|
||||||
|
if (exists) {
|
||||||
|
*exists = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
} else if (exists) {
|
||||||
|
*exists = false;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1032,7 +1039,7 @@ int32_t catalogChkTbMetaVersion(SCatalog* pCtg, SRequestConnInfo* pConn, SArray*
|
||||||
switch (tbType) {
|
switch (tbType) {
|
||||||
case TSDB_CHILD_TABLE: {
|
case TSDB_CHILD_TABLE: {
|
||||||
SName stb = name;
|
SName stb = name;
|
||||||
strcpy(stb.tname, stbName);
|
tstrncpy(stb.tname, stbName, sizeof(stb.tname));
|
||||||
ctgRemoveTbMeta(pCtg, &stb);
|
ctgRemoveTbMeta(pCtg, &stb);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1373,13 +1380,30 @@ int32_t catalogChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
CTG_ERR_JRET(ctgChkAuth(pCtg, pConn, user, dbFName, type, pass));
|
CTG_ERR_JRET(ctgChkAuth(pCtg, pConn, user, dbFName, type, pass, NULL));
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
CTG_API_LEAVE(code);
|
CTG_API_LEAVE(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t catalogChkAuthFromCache(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type,
|
||||||
|
bool* pass, bool* exists) {
|
||||||
|
CTG_API_ENTER();
|
||||||
|
|
||||||
|
if (NULL == pCtg || NULL == pConn || NULL == user || NULL == dbFName || NULL == pass || NULL == exists) {
|
||||||
|
CTG_API_LEAVE(TSDB_CODE_CTG_INVALID_INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = 0;
|
||||||
|
CTG_ERR_JRET(ctgChkAuth(pCtg, pConn, user, dbFName, type, pass, exists));
|
||||||
|
|
||||||
|
_return:
|
||||||
|
|
||||||
|
CTG_API_LEAVE(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t catalogGetServerVersion(SCatalog* pCtg, SRequestConnInfo* pConn, char** pVersion) {
|
int32_t catalogGetServerVersion(SCatalog* pCtg, SRequestConnInfo* pConn, char** pVersion) {
|
||||||
CTG_API_ENTER();
|
CTG_API_ENTER();
|
||||||
|
|
||||||
|
|
|
@ -924,6 +924,11 @@ int32_t ctgGetVgInfosFromHashValue(SCatalog* pCtg, SCtgTaskReq* tReq, SDBVgInfo*
|
||||||
|
|
||||||
if (1 == vgNum) {
|
if (1 == vgNum) {
|
||||||
void* pIter = taosHashIterate(dbInfo->vgHash, NULL);
|
void* pIter = taosHashIterate(dbInfo->vgHash, NULL);
|
||||||
|
if (NULL == pIter) {
|
||||||
|
ctgError("empty vgHash, db:%s, vgroup number:%d", dbFName, vgNum);
|
||||||
|
CTG_ERR_RET(TSDB_CODE_CTG_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
for (int32_t i = 0; i < tbNum; ++i) {
|
for (int32_t i = 0; i < tbNum; ++i) {
|
||||||
vgInfo = taosMemoryMalloc(sizeof(SVgroupInfo));
|
vgInfo = taosMemoryMalloc(sizeof(SVgroupInfo));
|
||||||
if (NULL == vgInfo) {
|
if (NULL == vgInfo) {
|
||||||
|
|
|
@ -2771,10 +2771,30 @@ TEST(apiTest, catalogChkAuth_test) {
|
||||||
ASSERT_EQ(code, 0);
|
ASSERT_EQ(code, 0);
|
||||||
|
|
||||||
bool pass = false;
|
bool pass = false;
|
||||||
|
bool exists = false;
|
||||||
|
code = catalogChkAuthFromCache(pCtg, mockPointer, ctgTestUsername, ctgTestDbname, AUTH_TYPE_READ, &pass, &exists);
|
||||||
|
ASSERT_EQ(code, 0);
|
||||||
|
ASSERT_EQ(exists, false);
|
||||||
|
|
||||||
code = catalogChkAuth(pCtg, mockPointer, ctgTestUsername, ctgTestDbname, AUTH_TYPE_READ, &pass);
|
code = catalogChkAuth(pCtg, mockPointer, ctgTestUsername, ctgTestDbname, AUTH_TYPE_READ, &pass);
|
||||||
ASSERT_EQ(code, 0);
|
ASSERT_EQ(code, 0);
|
||||||
ASSERT_EQ(pass, true);
|
ASSERT_EQ(pass, true);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
uint64_t n = 0;
|
||||||
|
ctgdGetStatNum("runtime.numOfOpDequeue", (void *)&n);
|
||||||
|
if (n != 1) {
|
||||||
|
taosMsleep(50);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
code = catalogChkAuthFromCache(pCtg, mockPointer, ctgTestUsername, ctgTestDbname, AUTH_TYPE_READ, &pass, &exists);
|
||||||
|
ASSERT_EQ(code, 0);
|
||||||
|
ASSERT_EQ(pass, true);
|
||||||
|
ASSERT_EQ(exists, true);
|
||||||
|
|
||||||
catalogDestroy();
|
catalogDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -456,6 +456,7 @@ int32_t cloneDbVgInfo(SDBVgInfo* pSrc, SDBVgInfo** pDst) {
|
||||||
(*pDst)->vgHash = taosHashInit(taosHashGetSize(pSrc->vgHash), taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true,
|
(*pDst)->vgHash = taosHashInit(taosHashGetSize(pSrc->vgHash), taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true,
|
||||||
HASH_ENTRY_LOCK);
|
HASH_ENTRY_LOCK);
|
||||||
if (NULL == (*pDst)->vgHash) {
|
if (NULL == (*pDst)->vgHash) {
|
||||||
|
taosMemoryFreeClear(*pDst);
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1087,7 +1087,7 @@ int32_t filterAddUnitImpl(SFilterInfo *info, uint8_t optr, SFilterFieldId *left,
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
info->units = tmp;
|
info->units = (SFilterUnit*)tmp;
|
||||||
memset(info->units + psize, 0, sizeof(*info->units) * FILTER_DEFAULT_UNIT_SIZE);
|
memset(info->units + psize, 0, sizeof(*info->units) * FILTER_DEFAULT_UNIT_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1633,12 +1633,12 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
|
||||||
|
|
||||||
SValueNode *var = (SValueNode *)field->desc;
|
SValueNode *var = (SValueNode *)field->desc;
|
||||||
SDataType *dType = &var->node.resType;
|
SDataType *dType = &var->node.resType;
|
||||||
if (dType->type == TSDB_DATA_TYPE_VALUE_ARRAY) {
|
//if (dType->type == TSDB_DATA_TYPE_VALUE_ARRAY) {
|
||||||
qDebug("VAL%d => [type:TS][val:[%" PRIi64 "] - [%" PRId64 "]]", i, *(int64_t *)field->data,
|
// qDebug("VAL%d => [type:TS][val:[%" PRIi64 "] - [%" PRId64 "]]", i, *(int64_t *)field->data,
|
||||||
*(((int64_t *)field->data) + 1));
|
// *(((int64_t *)field->data) + 1));
|
||||||
} else {
|
//} else {
|
||||||
qDebug("VAL%d => [type:%d][val:%" PRIx64 "]", i, dType->type, var->datum.i); // TODO
|
qDebug("VAL%d => [type:%d][val:%" PRIx64 "]", i, dType->type, var->datum.i); // TODO
|
||||||
}
|
//}
|
||||||
} else if (field->data) {
|
} else if (field->data) {
|
||||||
qDebug("VAL%d => [type:NIL][val:NIL]", i); // TODO
|
qDebug("VAL%d => [type:NIL][val:NIL]", i); // TODO
|
||||||
}
|
}
|
||||||
|
@ -4059,11 +4059,13 @@ bool filterExecute(SFilterInfo *info, SSDataBlock *pSrc, SColumnInfoData **p, SC
|
||||||
SArray *pList = taosArrayInit(1, POINTER_BYTES);
|
SArray *pList = taosArrayInit(1, POINTER_BYTES);
|
||||||
taosArrayPush(pList, &pSrc);
|
taosArrayPush(pList, &pSrc);
|
||||||
|
|
||||||
FLT_ERR_RET(scalarCalculate(info->sclCtx.node, pList, &output));
|
int32_t code = scalarCalculate(info->sclCtx.node, pList, &output);
|
||||||
*p = output.columnData;
|
|
||||||
|
|
||||||
taosArrayDestroy(pList);
|
taosArrayDestroy(pList);
|
||||||
|
|
||||||
|
FLT_ERR_RET(code);
|
||||||
|
|
||||||
|
*p = output.columnData;
|
||||||
|
|
||||||
if (output.numOfQualified == output.numOfRows) {
|
if (output.numOfQualified == output.numOfRows) {
|
||||||
*pResultStatus = FILTER_RESULT_ALL_QUALIFIED;
|
*pResultStatus = FILTER_RESULT_ALL_QUALIFIED;
|
||||||
} else if (output.numOfQualified == 0) {
|
} else if (output.numOfQualified == 0) {
|
||||||
|
|
|
@ -896,6 +896,10 @@ int32_t sclExecCaseWhen(SCaseWhenNode *node, SScalarCtx *ctx, SScalarParam *outp
|
||||||
|
|
||||||
SCL_ERR_JRET(sclGetNodeRes(pWhenThen->pWhen, ctx, &pWhen));
|
SCL_ERR_JRET(sclGetNodeRes(pWhenThen->pWhen, ctx, &pWhen));
|
||||||
SCL_ERR_JRET(sclGetNodeRes(pWhenThen->pThen, ctx, &pThen));
|
SCL_ERR_JRET(sclGetNodeRes(pWhenThen->pThen, ctx, &pThen));
|
||||||
|
if (NULL == pWhen || NULL == pThen) {
|
||||||
|
sclError("invalid when/then in whenThen list");
|
||||||
|
SCL_ERR_JRET(TSDB_CODE_INVALID_PARA);
|
||||||
|
}
|
||||||
|
|
||||||
if (pCase) {
|
if (pCase) {
|
||||||
vectorCompare(pCase, pWhen, &comp, TSDB_ORDER_ASC, OP_TYPE_EQUAL);
|
vectorCompare(pCase, pWhen, &comp, TSDB_ORDER_ASC, OP_TYPE_EQUAL);
|
||||||
|
|
Loading…
Reference in New Issue