fix crash
This commit is contained in:
parent
eaec502795
commit
652600b40a
|
@ -184,6 +184,13 @@ typedef struct SField {
|
||||||
int32_t bytes;
|
int32_t bytes;
|
||||||
} SField;
|
} SField;
|
||||||
|
|
||||||
|
typedef struct SRetention {
|
||||||
|
int32_t first;
|
||||||
|
int32_t second;
|
||||||
|
int8_t firstUnit;
|
||||||
|
int8_t secondUnit;
|
||||||
|
} SRetention;
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
|
|
||||||
// null-terminated string instead of char array to avoid too many memory consumption in case of more than 1M tableMeta
|
// null-terminated string instead of char array to avoid too many memory consumption in case of more than 1M tableMeta
|
||||||
|
@ -506,10 +513,13 @@ typedef struct {
|
||||||
int8_t cacheLastRow;
|
int8_t cacheLastRow;
|
||||||
int8_t ignoreExist;
|
int8_t ignoreExist;
|
||||||
int8_t streamMode;
|
int8_t streamMode;
|
||||||
|
int32_t numOfRetensions;
|
||||||
|
SArray* pRetensions; // SRetention
|
||||||
} SCreateDbReq;
|
} SCreateDbReq;
|
||||||
|
|
||||||
int32_t tSerializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
|
int32_t tSerializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
|
||||||
int32_t tDeserializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
|
int32_t tDeserializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
|
||||||
|
void tFreeSCreateDbReq(SCreateDbReq* pReq);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char db[TSDB_DB_FNAME_LEN];
|
char db[TSDB_DB_FNAME_LEN];
|
||||||
|
|
|
@ -1542,6 +1542,14 @@ int32_t tSerializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq) {
|
||||||
if (tEncodeI8(&encoder, pReq->cacheLastRow) < 0) return -1;
|
if (tEncodeI8(&encoder, pReq->cacheLastRow) < 0) return -1;
|
||||||
if (tEncodeI8(&encoder, pReq->ignoreExist) < 0) return -1;
|
if (tEncodeI8(&encoder, pReq->ignoreExist) < 0) return -1;
|
||||||
if (tEncodeI8(&encoder, pReq->streamMode) < 0) return -1;
|
if (tEncodeI8(&encoder, pReq->streamMode) < 0) return -1;
|
||||||
|
if (tEncodeI32(&encoder, pReq->numOfRetensions) < 0) return -1;
|
||||||
|
for (int32_t i = 0; i < pReq->numOfRetensions; ++i) {
|
||||||
|
SRetention *pRetension = taosArrayGet(pReq->pRetensions, i);
|
||||||
|
if (tEncodeI32(&encoder, pRetension->first) < 0) return -1;
|
||||||
|
if (tEncodeI32(&encoder, pRetension->second) < 0) return -1;
|
||||||
|
if (tEncodeI8(&encoder, pRetension->firstUnit) < 0) return -1;
|
||||||
|
if (tEncodeI8(&encoder, pRetension->secondUnit) < 0) return -1;
|
||||||
|
}
|
||||||
tEndEncode(&encoder);
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
int32_t tlen = encoder.pos;
|
int32_t tlen = encoder.pos;
|
||||||
|
@ -1575,12 +1583,36 @@ int32_t tDeserializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq)
|
||||||
if (tDecodeI8(&decoder, &pReq->cacheLastRow) < 0) return -1;
|
if (tDecodeI8(&decoder, &pReq->cacheLastRow) < 0) return -1;
|
||||||
if (tDecodeI8(&decoder, &pReq->ignoreExist) < 0) return -1;
|
if (tDecodeI8(&decoder, &pReq->ignoreExist) < 0) return -1;
|
||||||
if (tDecodeI8(&decoder, &pReq->streamMode) < 0) return -1;
|
if (tDecodeI8(&decoder, &pReq->streamMode) < 0) return -1;
|
||||||
|
if (tDecodeI32(&decoder, &pReq->numOfRetensions) < 0) return -1;
|
||||||
|
pReq->pRetensions = taosArrayInit(pReq->numOfRetensions, sizeof(SRetention));
|
||||||
|
if (pReq->pRetensions == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < pReq->numOfRetensions; ++i) {
|
||||||
|
SRetention rentension = {0};
|
||||||
|
if (tDecodeI32(&decoder, &rentension.first) < 0) return -1;
|
||||||
|
if (tDecodeI32(&decoder, &rentension.second) < 0) return -1;
|
||||||
|
if (tDecodeI8(&decoder, &rentension.firstUnit) < 0) return -1;
|
||||||
|
if (tDecodeI8(&decoder, &rentension.secondUnit) < 0) return -1;
|
||||||
|
if (taosArrayPush(pReq->pRetensions, &rentension) == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
|
|
||||||
tCoderClear(&decoder);
|
tCoderClear(&decoder);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tFreeSCreateDbReq(SCreateDbReq *pReq) {
|
||||||
|
taosArrayDestroy(pReq->pRetensions);
|
||||||
|
pReq->pRetensions = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t tSerializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
int32_t tSerializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
||||||
SCoder encoder = {0};
|
SCoder encoder = {0};
|
||||||
tCoderInit(&encoder, TD_LITTLE_ENDIAN, buf, bufLen, TD_ENCODER);
|
tCoderInit(&encoder, TD_LITTLE_ENDIAN, buf, bufLen, TD_ENCODER);
|
||||||
|
|
|
@ -1587,15 +1587,11 @@ static int32_t mndRetrieveStb(SNodeMsg *pReq, SShowObj *pShow, char *data, int32
|
||||||
if (pDb == NULL) return 0;
|
if (pDb == NULL) return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tstrncpy(prefix, pShow->db, TSDB_DB_FNAME_LEN);
|
|
||||||
strcat(prefix, TS_PATH_DELIMITER);
|
|
||||||
int32_t prefixLen = (int32_t)strlen(prefix);
|
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
while (numOfRows < rows) {
|
||||||
pShow->pIter = sdbFetch(pSdb, SDB_STB, pShow->pIter, (void **)&pStb);
|
pShow->pIter = sdbFetch(pSdb, SDB_STB, pShow->pIter, (void **)&pStb);
|
||||||
if (pShow->pIter == NULL) break;
|
if (pShow->pIter == NULL) break;
|
||||||
|
|
||||||
if (pStb->dbUid != pDb->uid) {
|
if (pDb != NULL && pStb->dbUid != pDb->uid) {
|
||||||
sdbRelease(pSdb, pStb);
|
sdbRelease(pSdb, pStb);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1609,12 +1605,12 @@ static int32_t mndRetrieveStb(SNodeMsg *pReq, SShowObj *pShow, char *data, int32
|
||||||
STR_TO_VARSTR(pWrite, stbName);
|
STR_TO_VARSTR(pWrite, stbName);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
// char db[TSDB_DB_NAME_LEN] = {0};
|
char db[TSDB_DB_NAME_LEN] = {0};
|
||||||
// tNameFromString(&name, pStb->db, T_NAME_ACCT|T_NAME_DB);
|
tNameFromString(&name, pStb->db, T_NAME_ACCT|T_NAME_DB);
|
||||||
// tNameGetDbName(&name, db);
|
tNameGetDbName(&name, db);
|
||||||
// pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
// STR_TO_VARSTR(pWrite, db);
|
STR_TO_VARSTR(pWrite, db);
|
||||||
// cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int64_t *)pWrite = pStb->createdTime;
|
*(int64_t *)pWrite = pStb->createdTime;
|
||||||
|
@ -1627,7 +1623,7 @@ static int32_t mndRetrieveStb(SNodeMsg *pReq, SShowObj *pShow, char *data, int32
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = pStb->numOfTags;
|
*(int32_t *)pWrite = pStb->numOfTags;
|
||||||
cols++;
|
cols++;
|
||||||
#if 0
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = 0; // number of tables
|
*(int32_t *)pWrite = 0; // number of tables
|
||||||
cols++;
|
cols++;
|
||||||
|
@ -1643,7 +1639,7 @@ static int32_t mndRetrieveStb(SNodeMsg *pReq, SShowObj *pShow, char *data, int32
|
||||||
STR_TO_VARSTR(pWrite, "");
|
STR_TO_VARSTR(pWrite, "");
|
||||||
}
|
}
|
||||||
cols++;
|
cols++;
|
||||||
#endif
|
|
||||||
numOfRows++;
|
numOfRows++;
|
||||||
sdbRelease(pSdb, pStb);
|
sdbRelease(pSdb, pStb);
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,6 +189,7 @@ void* MndTestSma::BuildDropTSmaReq(const char* smaname, int8_t igNotExists, int3
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
|
#if 0
|
||||||
const char* dbname = "1.d1";
|
const char* dbname = "1.d1";
|
||||||
const char* stbname = "1.d1.stb";
|
const char* stbname = "1.d1.stb";
|
||||||
const char* smaname = "1.d1.sma";
|
const char* smaname = "1.d1.sma";
|
||||||
|
@ -210,7 +211,7 @@ TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
{
|
{
|
||||||
pReq = BuildCreateTSmaReq(smaname, stbname, 0, "expr", "tagsFilter", "sql", "ast", &contLen);
|
pReq = BuildCreateTSmaReq(smaname, stbname, 0, "expr", "tagsFilter", "sql", "ast", &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_CREATE_SMA, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_CREATE_SMA, pReq, contLen);
|
||||||
|
|
|
@ -14,6 +14,7 @@ sql insert into tb1 values (now, 1);
|
||||||
|
|
||||||
sql show stables
|
sql show stables
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
|
print $rows
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue