Merge pull request #23464 from taosdata/enh/TD-26638-3.0
enh: use placeholder '-' for interval of 1st retention level
This commit is contained in:
commit
d40cc27abc
|
@ -451,7 +451,7 @@ typedef struct SRetention {
|
|||
int8_t keepUnit;
|
||||
} SRetention;
|
||||
|
||||
#define RETENTION_VALID(r) (((r)->freq > 0) && ((r)->keep > 0))
|
||||
#define RETENTION_VALID(l, r) ((((l) == 0 && (r)->freq >= 0) || ((r)->freq > 0)) && ((r)->keep > 0))
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
|
@ -1568,9 +1568,7 @@ typedef struct {
|
|||
typedef struct {
|
||||
int32_t id;
|
||||
int8_t isMnode;
|
||||
#ifdef TD_GRANT_HB_OPTIMIZE
|
||||
int8_t offlineReason;
|
||||
#endif
|
||||
SEp ep;
|
||||
char active[TSDB_ACTIVE_KEY_LEN];
|
||||
char connActive[TSDB_CONN_ACTIVE_KEY_LEN];
|
||||
|
|
|
@ -327,7 +327,7 @@ typedef enum ELogicConditionType {
|
|||
#define TSDB_MAX_DAYS_PER_FILE (3650 * 1440)
|
||||
#define TSDB_DEFAULT_DAYS_PER_FILE (10 * 1440)
|
||||
#define TSDB_MIN_DURATION_PER_FILE 60 // unit minute
|
||||
#define TSDB_MAX_DURATION_PER_FILE (3650 * 1440)
|
||||
#define TSDB_MAX_DURATION_PER_FILE (90 * 1440)
|
||||
#define TSDB_DEFAULT_DURATION_PER_FILE (10 * 1440)
|
||||
#define TSDB_MIN_KEEP (1 * 1440) // data in db to be reserved. unit minute
|
||||
#define TSDB_MAX_KEEP (365000 * 1440) // data in db to be reserved.
|
||||
|
|
|
@ -137,7 +137,7 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
|
|||
SRetention *pRetention = &pCfg->tsdbCfg.retentions[i];
|
||||
memcpy(pRetention, taosArrayGet(pCreate->pRetensions, i), sizeof(SRetention));
|
||||
if (i == 0) {
|
||||
if ((pRetention->freq > 0 && pRetention->keep > 0)) pCfg->isRsma = 1;
|
||||
if ((pRetention->freq >= 0 && pRetention->keep > 0)) pCfg->isRsma = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -97,11 +97,7 @@ int32_t dmMarkWrapper(SMgmtWrapper *pWrapper);
|
|||
void dmReleaseWrapper(SMgmtWrapper *pWrapper);
|
||||
int32_t dmInitVars(SDnode *pDnode);
|
||||
void dmClearVars(SDnode *pDnode);
|
||||
#if defined(TD_MODULE_OPTIMIZE) || !defined(TD_ENTERPRISE)
|
||||
int32_t dmInitModule(SDnode *pDnode, SMgmtWrapper *wrappers);
|
||||
#else
|
||||
int32_t dmInitModule(SDnode *pDnode);
|
||||
#endif
|
||||
bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper);
|
||||
SMgmtInputOpt dmBuildMgmtInputOpt(SMgmtWrapper *pWrapper);
|
||||
void dmSetStatus(SDnode *pDnode, EDndRunStatus stype);
|
||||
|
@ -123,11 +119,7 @@ int32_t dmInitStatusClient(SDnode *pDnode);
|
|||
void dmCleanupClient(SDnode *pDnode);
|
||||
void dmCleanupStatusClient(SDnode *pDnode);
|
||||
SMsgCb dmGetMsgcb(SDnode *pDnode);
|
||||
#if defined(TD_MODULE_OPTIMIZE) || !defined(TD_ENTERPRISE)
|
||||
int32_t dmInitMsgHandle(SDnode *pDnode, SMgmtWrapper *wrappers);
|
||||
#else
|
||||
int32_t dmInitMsgHandle(SDnode *pDnode);
|
||||
#endif
|
||||
int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg);
|
||||
|
||||
// dmMonitor.c
|
||||
|
|
|
@ -66,15 +66,9 @@ int32_t dmInitDnode(SDnode *pDnode) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
#if defined(TD_MODULE_OPTIMIZE) || !defined(TD_ENTERPRISE)
|
||||
if (dmInitModule(pDnode, pDnode->wrappers) != 0) {
|
||||
goto _OVER;
|
||||
}
|
||||
#else
|
||||
if (dmInitModule(pDnode) != 0) {
|
||||
goto _OVER;
|
||||
}
|
||||
#endif
|
||||
|
||||
indexInit(tsNumOfCommitThreads);
|
||||
streamMetaInit();
|
||||
|
@ -113,7 +107,6 @@ void dmCleanupDnode(SDnode *pDnode) {
|
|||
dDebug("dnode is closed, ptr:%p", pDnode);
|
||||
}
|
||||
|
||||
#if defined(TD_MODULE_OPTIMIZE) || !defined(TD_ENTERPRISE)
|
||||
int32_t dmInitVars(SDnode *pDnode) {
|
||||
SDnodeData *pData = &pDnode->data;
|
||||
pData->dnodeId = 0;
|
||||
|
@ -182,7 +175,6 @@ void dmClearVars(SDnode *pDnode) {
|
|||
taosThreadMutexDestroy(&pDnode->mutex);
|
||||
memset(&pDnode->mutex, 0, sizeof(pDnode->mutex));
|
||||
}
|
||||
#endif
|
||||
|
||||
void dmSetStatus(SDnode *pDnode, EDndRunStatus status) {
|
||||
if (pDnode->status != status) {
|
||||
|
|
|
@ -251,7 +251,6 @@ _OVER:
|
|||
dmReleaseWrapper(pWrapper);
|
||||
}
|
||||
|
||||
#if defined(TD_MODULE_OPTIMIZE) || !defined(TD_ENTERPRISE)
|
||||
int32_t dmInitMsgHandle(SDnode *pDnode, SMgmtWrapper *wrappers) {
|
||||
SDnodeTrans *pTrans = &pDnode->trans;
|
||||
|
||||
|
@ -277,33 +276,6 @@ int32_t dmInitMsgHandle(SDnode *pDnode, SMgmtWrapper *wrappers) {
|
|||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int32_t dmInitMsgHandle(SDnode *pDnode) {
|
||||
SDnodeTrans *pTrans = &pDnode->trans;
|
||||
|
||||
for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
|
||||
SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
|
||||
SArray *pArray = (*pWrapper->func.getHandlesFp)();
|
||||
if (pArray == NULL) return -1;
|
||||
|
||||
for (int32_t i = 0; i < taosArrayGetSize(pArray); ++i) {
|
||||
SMgmtHandle *pMgmt = taosArrayGet(pArray, i);
|
||||
SDnodeHandle *pHandle = &pTrans->msgHandles[TMSG_INDEX(pMgmt->msgType)];
|
||||
if (pMgmt->needCheckVgId) {
|
||||
pHandle->needCheckVgId = pMgmt->needCheckVgId;
|
||||
}
|
||||
if (!pMgmt->needCheckVgId) {
|
||||
pHandle->defaultNtype = ntype;
|
||||
}
|
||||
pWrapper->msgFps[TMSG_INDEX(pMgmt->msgType)] = pMgmt->msgFp;
|
||||
}
|
||||
|
||||
taosArrayDestroy(pArray);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
|
||||
SDnode *pDnode = dmInstance();
|
||||
|
|
|
@ -397,9 +397,7 @@ void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) {
|
|||
SDnodeInfo dInfo;
|
||||
dInfo.id = pDnode->id;
|
||||
dInfo.ep.port = pDnode->port;
|
||||
#ifdef TD_GRANT_HB_OPTIMIZE
|
||||
dInfo.offlineReason = pDnode->offlineReason;
|
||||
#endif
|
||||
tstrncpy(dInfo.ep.fqdn, pDnode->fqdn, TSDB_FQDN_LEN);
|
||||
tstrncpy(dInfo.active, pDnode->active, TSDB_ACTIVE_KEY_LEN);
|
||||
tstrncpy(dInfo.connActive, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN);
|
||||
|
|
|
@ -31,21 +31,21 @@ static int32_t rsmaRestore(SSma *pSma);
|
|||
} while (0)
|
||||
|
||||
#define SMA_OPEN_RSMA_IMPL(v, l, force) \
|
||||
do { \
|
||||
SRetention *r = (SRetention *)VND_RETENTIONS(v) + l; \
|
||||
if (!RETENTION_VALID(r)) { \
|
||||
if (l == 0) { \
|
||||
code = TSDB_CODE_INVALID_PARA; \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
code = smaSetKeepCfg(v, &keepCfg, pCfg, TSDB_TYPE_RSMA_L##l); \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
do { \
|
||||
SRetention *r = (SRetention *)VND_RETENTIONS(v) + l; \
|
||||
if (!RETENTION_VALID(l, r)) { \
|
||||
if (l == 0) { \
|
||||
code = TSDB_CODE_INVALID_PARA; \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
code = smaSetKeepCfg(v, &keepCfg, pCfg, TSDB_TYPE_RSMA_L##l); \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
if (tsdbOpen(v, &SMA_RSMA_TSDB##l(pSma), VNODE_RSMA##l##_DIR, &keepCfg, rollback, force) < 0) { \
|
||||
code = terrno; \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
} \
|
||||
code = terrno; \
|
||||
TSDB_CHECK_CODE(code, lino, _exit); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
|
@ -79,20 +79,18 @@ static int32_t smaEvalDays(SVnode *pVnode, SRetention *r, int8_t level, int8_t p
|
|||
freqDuration = convertTimeFromPrecisionToUnit((r + level)->freq, precision, TIME_UNIT_MINUTE);
|
||||
keepDuration = convertTimeFromPrecisionToUnit((r + level)->keep, precision, TIME_UNIT_MINUTE);
|
||||
|
||||
int32_t nFreqTimes = (r + level)->freq / (r + TSDB_RETENTION_L0)->freq;
|
||||
int32_t nFreqTimes = (r + level)->freq / (60 * 1000); // use 60s for freq of 1st level
|
||||
days *= (nFreqTimes > 1 ? nFreqTimes : 1);
|
||||
|
||||
if (days > keepDuration) {
|
||||
days = keepDuration;
|
||||
}
|
||||
|
||||
if (days > TSDB_MAX_DURATION_PER_FILE) {
|
||||
days = TSDB_MAX_DURATION_PER_FILE;
|
||||
}
|
||||
|
||||
if (days < freqDuration) {
|
||||
days = freqDuration;
|
||||
}
|
||||
|
||||
int32_t maxKeepDuration = TMIN(keepDuration, TSDB_MAX_DURATION_PER_FILE);
|
||||
if (days > maxKeepDuration) {
|
||||
days = maxKeepDuration;
|
||||
}
|
||||
|
||||
_exit:
|
||||
smaInfo("vgId:%d, evaluated duration for level %d is %d, raw val:%d", TD_VID(pVnode), level + 1, days, duration);
|
||||
return days;
|
||||
|
@ -157,6 +155,7 @@ int32_t smaOpen(SVnode *pVnode, int8_t rollback, bool force) {
|
|||
_exit:
|
||||
if (code) {
|
||||
smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code));
|
||||
terrno = code;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
|
|||
if (tjsonAddIntegerToObject(pJson, "keep1", pCfg->tsdbCfg.keep1) < 0) return -1;
|
||||
if (tjsonAddIntegerToObject(pJson, "keep2", pCfg->tsdbCfg.keep2) < 0) return -1;
|
||||
if (tjsonAddIntegerToObject(pJson, "keepTimeOffset", pCfg->tsdbCfg.keepTimeOffset) < 0) return -1;
|
||||
if (pCfg->tsdbCfg.retentions[0].freq > 0) {
|
||||
if (pCfg->tsdbCfg.retentions[0].keep > 0) {
|
||||
int32_t nRetention = 1;
|
||||
if (pCfg->tsdbCfg.retentions[1].freq > 0) {
|
||||
++nRetention;
|
||||
|
|
|
@ -215,37 +215,28 @@ int64_t getValOfDiffPrecision(int8_t unit, int64_t val) {
|
|||
return v;
|
||||
}
|
||||
|
||||
char* buildRetension(SArray* pRetension) {
|
||||
static char* buildRetension(SArray* pRetension) {
|
||||
size_t size = taosArrayGetSize(pRetension);
|
||||
if (size == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char* p1 = taosMemoryCalloc(1, 100);
|
||||
SRetention* p = taosArrayGet(pRetension, 0);
|
||||
|
||||
char* p1 = taosMemoryCalloc(1, 100);
|
||||
int32_t len = 0;
|
||||
|
||||
int64_t v1 = getValOfDiffPrecision(p->freqUnit, p->freq);
|
||||
int64_t v2 = getValOfDiffPrecision(p->keepUnit, p->keep);
|
||||
len += sprintf(p1 + len, "%" PRId64 "%c:%" PRId64 "%c", v1, p->freqUnit, v2, p->keepUnit);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SRetention* p = TARRAY_GET_ELEM(pRetension, i);
|
||||
int64_t v1 = getValOfDiffPrecision(p->freqUnit, p->freq);
|
||||
int64_t v2 = getValOfDiffPrecision(p->keepUnit, p->keep);
|
||||
if (i == 0) {
|
||||
len += sprintf(p1 + len, "-:%" PRId64 "%c", v2, p->keepUnit);
|
||||
} else {
|
||||
len += sprintf(p1 + len, "%" PRId64 "%c:%" PRId64 "%c", v1, p->freqUnit, v2, p->keepUnit);
|
||||
}
|
||||
|
||||
if (size > 1) {
|
||||
len += sprintf(p1 + len, ",");
|
||||
p = taosArrayGet(pRetension, 1);
|
||||
|
||||
v1 = getValOfDiffPrecision(p->freqUnit, p->freq);
|
||||
v2 = getValOfDiffPrecision(p->keepUnit, p->keep);
|
||||
len += sprintf(p1 + len, "%" PRId64 "%c:%" PRId64 "%c", v1, p->freqUnit, v2, p->keepUnit);
|
||||
}
|
||||
|
||||
if (size > 2) {
|
||||
len += sprintf(p1 + len, ",");
|
||||
p = taosArrayGet(pRetension, 2);
|
||||
|
||||
v1 = getValOfDiffPrecision(p->freqUnit, p->freq);
|
||||
v2 = getValOfDiffPrecision(p->keepUnit, p->keep);
|
||||
len += sprintf(p1 + len, "%" PRId64 "%c:%" PRId64 "%c", v1, p->freqUnit, v2, p->keepUnit);
|
||||
if (i < size - 1) {
|
||||
len += sprintf(p1 + len, ",");
|
||||
}
|
||||
}
|
||||
|
||||
return p1;
|
||||
|
|
|
@ -304,6 +304,7 @@ retention_list(A) ::= retention(B).
|
|||
retention_list(A) ::= retention_list(B) NK_COMMA retention(C). { A = addNodeToList(pCxt, B, C); }
|
||||
|
||||
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C). { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
|
||||
retention(A) ::= NK_MINUS(B) NK_COLON NK_VARIABLE(C). { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
|
||||
|
||||
%type speed_opt { int32_t }
|
||||
%destructor speed_opt { }
|
||||
|
|
|
@ -4605,10 +4605,22 @@ static int32_t checkDbRetentionsOption(STranslateContext* pCxt, SNodeList* pRete
|
|||
SValueNode* pPrevFreq = NULL;
|
||||
SValueNode* pPrevKeep = NULL;
|
||||
SNode* pRetention = NULL;
|
||||
bool firstFreq = true;
|
||||
FOREACH(pRetention, pRetentions) {
|
||||
SNode* pNode = NULL;
|
||||
FOREACH(pNode, ((SNodeListNode*)pRetention)->pNodeList) {
|
||||
SValueNode* pVal = (SValueNode*)pNode;
|
||||
if (firstFreq) {
|
||||
firstFreq = false;
|
||||
if (pVal->literal[0] != '-' || strlen(pVal->literal) != 1) {
|
||||
return generateSyntaxErrMsgExt(
|
||||
&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION,
|
||||
"Invalid option retentions(freq): %s, the interval of 1st retention level should be '-'", pVal->literal);
|
||||
}
|
||||
pVal->unit = TIME_UNIT_SECOND; // assign minimum unit
|
||||
pVal->datum.i = 0; // assign minimum value
|
||||
continue;
|
||||
}
|
||||
if (DEAL_RES_ERROR == translateValue(pCxt, pVal)) {
|
||||
return pCxt->errCode;
|
||||
}
|
||||
|
@ -4633,7 +4645,7 @@ static int32_t checkDbRetentionsOption(STranslateContext* pCxt, SNodeList* pRete
|
|||
}
|
||||
|
||||
// check value range
|
||||
if (pFreq->datum.i <= 0) {
|
||||
if (pPrevFreq != NULL && pFreq->datum.i <= 0) {
|
||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION,
|
||||
"Invalid option retentions(freq): %s should larger than 0", pFreq->literal);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -247,7 +247,11 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
for (int32_t i = 0; i < expect.numOfRetensions; ++i) {
|
||||
SRetention* pReten = (SRetention*)taosArrayGet(req.pRetensions, i);
|
||||
SRetention* pExpectReten = (SRetention*)taosArrayGet(expect.pRetensions, i);
|
||||
ASSERT_EQ(pReten->freq, pExpectReten->freq);
|
||||
if(i == 0) {
|
||||
ASSERT_EQ(pReten->freq, 0);
|
||||
} else {
|
||||
ASSERT_EQ(pReten->freq, pExpectReten->freq);
|
||||
}
|
||||
ASSERT_EQ(pReten->keep, pExpectReten->keep);
|
||||
ASSERT_EQ(pReten->freqUnit, pExpectReten->freqUnit);
|
||||
ASSERT_EQ(pReten->keepUnit, pExpectReten->keepUnit);
|
||||
|
@ -304,7 +308,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
"PAGESIZE 8 "
|
||||
"PRECISION 'ns' "
|
||||
"REPLICA 3 "
|
||||
"RETENTIONS 15s:7d,1m:21d,15m:500d "
|
||||
"RETENTIONS -:7d,1m:21d,15m:500d "
|
||||
// "STRICT 'on' "
|
||||
"WAL_LEVEL 2 "
|
||||
"VGROUPS 100 "
|
||||
|
@ -340,12 +344,12 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
TEST_F(ParserInitialCTest, createDatabaseSemanticCheck) {
|
||||
useDb("root", "test");
|
||||
|
||||
run("create database db2 retentions 0s:1d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions 10s:0d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions 1w:1d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions 1w:1n", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions 15s:7d,15m:21d,10m:500d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions 15s:7d,5m:21d,10m:10d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:1d,0s:1d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:0d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:1d,1w:1d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:1n,1w:1d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:7d,15m:21d,10m:500d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("create database db2 retentions -:7d,5m:21d,10m:10d", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -5,7 +5,7 @@ sleep 50
|
|||
sql connect
|
||||
|
||||
print =============== create database with retentions
|
||||
sql create database d0 retentions 5s:7d,10s:21d,15s:365d;
|
||||
sql create database d0 retentions -:7d,10s:21d,15s:365d;
|
||||
sql use d0
|
||||
|
||||
print =============== create super table and register rsma
|
||||
|
|
|
@ -8,7 +8,7 @@ sql connect
|
|||
return 1
|
||||
|
||||
print =============== create database with retentions
|
||||
sql create database d0 retentions 5s:7d,5m:21d,15m:365d;
|
||||
sql create database d0 retentions -:7d,5m:21d,15m:365d;
|
||||
sql use d0
|
||||
|
||||
print =============== create super table and register rsma
|
||||
|
|
|
@ -47,7 +47,7 @@ endi
|
|||
|
||||
$replica = 3
|
||||
$vgroups = 1
|
||||
$retentions = 5s:7d,15s:21d,1m:365d
|
||||
$retentions = -:7d,15s:21d,1m:365d
|
||||
|
||||
print ============= create database
|
||||
sql create database db replica $replica vgroups $vgroups retentions $retentions
|
||||
|
|
|
@ -417,7 +417,7 @@ class TDTestCase:
|
|||
self.all_test()
|
||||
|
||||
tdLog.printNoPrefix("==========step2:create table in rollup database")
|
||||
tdSql.execute("create database db3 retentions 1s:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("create database db3 retentions -:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("use db3")
|
||||
tdSql.query(f"create stable stb1 ({PRIMARY_COL} timestamp, {INT_COL} int) tags (tag1 int) rollup(first) watermark 5s max_delay 1m sma({INT_COL})")
|
||||
|
||||
|
@ -438,7 +438,7 @@ class TDTestCase:
|
|||
tdSql.execute("drop database if exists db_s20 ")
|
||||
|
||||
tdLog.printNoPrefix("==========step4:insert and flush in rollup database")
|
||||
tdSql.execute("create database db4 retentions 1s:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("create database db4 retentions -:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("use db4")
|
||||
self.__create_tb(rollup="first")
|
||||
self.__insert_data(rollup="first")
|
||||
|
|
|
@ -54,53 +54,63 @@ class TDTestCase:
|
|||
return [
|
||||
# check grammar
|
||||
"create database db1 retentions",
|
||||
"create database db1 retentions 1s:1d,2s:2d,3s:3d,4s:4d",
|
||||
"create database db1 retentions 1s:1d",
|
||||
"create database db1 retentions 1s:1d,2s:2d",
|
||||
"create database db1 retentions 1s:1d,2s:2d,3s:3d",
|
||||
"create database db1 retentions -:1d,2s:2d,3s:3d,4s:4d",
|
||||
"create database db1 retentions -:-",
|
||||
"create database db1 retentions --:1d",
|
||||
"create database db1 retentions +:1d",
|
||||
"create database db1 retentions :1d",
|
||||
"create database db1 retentions -:1d,-:2d",
|
||||
"create database db1 retentions -:1d,1s:-",
|
||||
"create database db1 retentions -:1d,15s:2d,-:3d",
|
||||
|
||||
# check unit
|
||||
"create database db1 retentions 1b:1d",
|
||||
"create database db1 retentions 1u:1d",
|
||||
"create database db1 retentions 1a:1d",
|
||||
"create database db1 retentions 1n:1d",
|
||||
"create database db1 retentions 1y:1d",
|
||||
"create database db1 retentions 1s:86400s",
|
||||
"create database db1 retentions 1s:86400000a",
|
||||
"create database db1 retentions 1s:86400000000u",
|
||||
"create database db1 retentions 1s:86400000000000b",
|
||||
"create database db1 retentions 1s:1w",
|
||||
"create database db1 retentions 1s:1n",
|
||||
"create database db1 retentions 1s:1y",
|
||||
"create database db1 retentions -:1d,1b:1d",
|
||||
"create database db1 retentions -:1d,1u:1d",
|
||||
"create database db1 retentions -:1d,1a:1d",
|
||||
"create database db1 retentions -:1d,1n:1d",
|
||||
"create database db1 retentions -:1d,1y:1d",
|
||||
"create database db1 retentions -:1d,1s:86400s",
|
||||
"create database db1 retentions -:1d,1s:86400000a",
|
||||
"create database db1 retentions -:1d,1s:86400000000u",
|
||||
"create database db1 retentions -:1d,1s:86400000000000b",
|
||||
"create database db1 retentions -:1d,1s:1w",
|
||||
"create database db1 retentions -:1d,1s:1n",
|
||||
"create database db1 retentions -:1d,1s:1y",
|
||||
|
||||
# check value range
|
||||
"create database db1 retentions -1s:1d",
|
||||
"create database db1 retentions 0s:1d",
|
||||
"create database db3 retentions 1s:-1d",
|
||||
"create database db3 retentions 1s:0d",
|
||||
"create database db3 retentions 1s:1439m",
|
||||
"create database db3 retentions 1s:365001d",
|
||||
"create database db3 retentions 1s:8760001h",
|
||||
"create database db3 retentions 1s:525600001m",
|
||||
"create database db3 retentions 1s:106581d precision 'ns'",
|
||||
"create database db3 retentions 1s:2557921h precision 'ns'",
|
||||
"create database db3 retentions 1s:153475201m precision 'ns'",
|
||||
"create database db3 retentions -:-1d",
|
||||
"create database db3 retentions -:0d",
|
||||
"create database db3 retentions -:1439m",
|
||||
"create database db3 retentions -:365001d",
|
||||
"create database db3 retentions -:8760001h",
|
||||
"create database db3 retentions -:525600001m",
|
||||
"create database db3 retentions -:106581d precision 'ns'",
|
||||
"create database db3 retentions -:2557921h precision 'ns'",
|
||||
"create database db3 retentions -:153475201m precision 'ns'",
|
||||
# check relationships
|
||||
"create database db5 retentions 1441m:1440m,2d:3d",
|
||||
"create database db5 retentions 2m:1d,1s:2d",
|
||||
"create database db5 retentions 1s:2880m,2s:2879m",
|
||||
"create database db5 retentions 1s:1d,2s:2d,2s:3d",
|
||||
"create database db5 retentions 1s:1d,3s:2d,2s:3d",
|
||||
"create database db1 retentions 1s:1d,2s:3d,3s:2d",
|
||||
"create database db5 retentions -:1440m,1441m:1440m,2d:3d",
|
||||
"create database db5 retentions -:1d,2m:1d,1s:2d",
|
||||
"create database db5 retentions -:1440m,1s:2880m,2s:2879m",
|
||||
"create database db5 retentions -:1d,2s:2d,2s:3d",
|
||||
"create database db5 retentions -:1d,3s:2d,2s:3d",
|
||||
"create database db1 retentions -:1d,2s:3d,3s:2d",
|
||||
]
|
||||
|
||||
@property
|
||||
def create_databases_sql_current(self):
|
||||
return [
|
||||
f"create database {DB1} retentions 1s:1d",
|
||||
f"create database {DB2} retentions 1s:1d,2m:2d,3h:3d",
|
||||
f"create database {DB1} retentions -:1d",
|
||||
f"create database {DB2} retentions -:1d,2m:2d,3h:3d",
|
||||
]
|
||||
|
||||
@property
|
||||
def alter_database_sql(self):
|
||||
return [
|
||||
"alter database db1 retentions 99h:99d",
|
||||
"alter database db2 retentions 97h:97d,98h:98d,99h:99d,",
|
||||
"alter database db1 retentions -:99d",
|
||||
"alter database db2 retentions -:97d,98h:98d,99h:99d,",
|
||||
]
|
||||
|
||||
@property
|
||||
|
@ -172,9 +182,17 @@ class TDTestCase:
|
|||
def test_create_databases(self):
|
||||
for err_sql in self.create_databases_sql_err:
|
||||
tdSql.error(err_sql)
|
||||
index = 0
|
||||
for cur_sql in self.create_databases_sql_current:
|
||||
tdSql.execute(cur_sql)
|
||||
# tdSql.query("select * from information_schema.ins_databases")
|
||||
if(index == 0):
|
||||
tdSql.query(f"show create database {DB1}")
|
||||
else:
|
||||
tdSql.query(f"show create database {DB2}")
|
||||
tdSql.checkEqual(len(tdSql.queryResult),1)
|
||||
tdLog.info("%s" % (tdSql.queryResult[0][1]))
|
||||
tdSql.checkEqual(tdSql.queryResult[0][1].find("RETENTIONS -:") > 0, True)
|
||||
index += 1
|
||||
for alter_sql in self.alter_database_sql:
|
||||
tdSql.error(alter_sql)
|
||||
|
||||
|
@ -281,7 +299,7 @@ class TDTestCase:
|
|||
|
||||
tdLog.printNoPrefix("==========step2:create table in rollup database")
|
||||
tdLog.printNoPrefix("==========step2.1 : rolluo func is not last/first")
|
||||
tdSql.prepare(dbname=DB3, **{"retentions": "1s:1d, 3s:3d, 5s:5d"})
|
||||
tdSql.prepare(dbname=DB3, **{"retentions": "-:1d, 3s:3d, 5s:5d"})
|
||||
|
||||
db3_ctb_num = 10
|
||||
self.__create_tb(rsma=True, dbname=DB3, ctb_num=db3_ctb_num, stb=STBNAME)
|
||||
|
@ -338,7 +356,7 @@ class TDTestCase:
|
|||
|
||||
|
||||
tdLog.printNoPrefix("==========step2.2 : rolluo func is last/first")
|
||||
tdSql.prepare(dbname=DB4, **{"retentions": "1s:1d, 2m:3d, 3m:5d"})
|
||||
tdSql.prepare(dbname=DB4, **{"retentions": "-:1d, 2m:3d, 3m:5d"})
|
||||
|
||||
db4_ctb_num = 10
|
||||
tdSql.execute(f"use {DB4}")
|
||||
|
|
|
@ -584,7 +584,7 @@ class TDTestCase:
|
|||
self.all_test()
|
||||
|
||||
tdLog.printNoPrefix("==========step2:create table in rollup database")
|
||||
tdSql.execute("create database db3 retentions 1s:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("create database db3 retentions -:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("use db3")
|
||||
tdSql.execute(f"create stable stb1 ({PRIMARY_COL} timestamp, {INT_COL} int) tags (tag1 int) rollup(first) watermark 5s max_delay 1m sma({INT_COL}) ")
|
||||
self.all_test()
|
||||
|
@ -603,7 +603,7 @@ class TDTestCase:
|
|||
# add for TS-2440
|
||||
for i in range(self.rows):
|
||||
tdSql.execute("drop database if exists db3 ")
|
||||
tdSql.execute("create database db3 retentions 1s:4m,2s:8m,3s:12m")
|
||||
tdSql.execute("create database db3 retentions -:4m,2s:8m,3s:12m")
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
|
|
Loading…
Reference in New Issue