feat: auto compact options for db
This commit is contained in:
parent
77418f154a
commit
fb029944a4
|
@ -111,13 +111,13 @@ typedef struct SDatabaseOptions {
|
|||
int8_t s3Compact;
|
||||
int8_t withArbitrator;
|
||||
// for auto-compact
|
||||
SValueNode* pCompactIntervalNode;
|
||||
int8_t compactTimeOffset; // hours
|
||||
int32_t compactInterval; // minutes
|
||||
SNodeList* pCompactTimeRangeList;
|
||||
int32_t compactStartTime; // minutes
|
||||
int32_t compactEndTime; // minutes
|
||||
SValueNode* pCompactTimeOffsetNode;
|
||||
int32_t compactTimeOffset; // hours
|
||||
SValueNode* pCompactIntervalNode;
|
||||
SNodeList* pCompactTimeRangeList;
|
||||
} SDatabaseOptions;
|
||||
|
||||
typedef struct SCreateDatabaseStmt {
|
||||
|
|
|
@ -1416,6 +1416,14 @@ static void mndDumpDbCfgInfo(SDbCfgRsp *cfgRsp, SDbObj *pDb) {
|
|||
cfgRsp->compactInterval = pDb->cfg.compactInterval;
|
||||
cfgRsp->compactStartTime = pDb->cfg.compactStartTime;
|
||||
cfgRsp->compactEndTime = pDb->cfg.compactEndTime;
|
||||
if (cfgRsp->compactInterval > 0) {
|
||||
if (cfgRsp->compactStartTime == 0) {
|
||||
cfgRsp->compactStartTime = -cfgRsp->daysToKeep2;
|
||||
}
|
||||
if (cfgRsp->compactEndTime == 0) {
|
||||
cfgRsp->compactEndTime = -cfgRsp->daysPerFile;
|
||||
}
|
||||
}
|
||||
cfgRsp->compactTimeOffset = pDb->cfg.compactTimeOffset;
|
||||
}
|
||||
|
||||
|
|
|
@ -411,11 +411,17 @@ static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName,
|
|||
char keep0Str[128] = {0};
|
||||
char keep1Str[128] = {0};
|
||||
char keep2Str[128] = {0};
|
||||
char compactIntervalStr[13] = {0};
|
||||
char compactStartTimeStr[13] = {0};
|
||||
char compactEndTimeStr[13] = {0};
|
||||
|
||||
int32_t lenDuration = formatDurationOrKeep(durationStr, sizeof(durationStr), pCfg->daysPerFile);
|
||||
int32_t lenKeep0 = formatDurationOrKeep(keep0Str, sizeof(keep0Str), pCfg->daysToKeep0);
|
||||
int32_t lenKeep1 = formatDurationOrKeep(keep1Str, sizeof(keep1Str), pCfg->daysToKeep1);
|
||||
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, sizeof(keep2Str), pCfg->daysToKeep2);
|
||||
UNUSED(formatDurationOrKeep(compactIntervalStr, sizeof(compactIntervalStr), pCfg->compactInterval));
|
||||
UNUSED(formatDurationOrKeep(compactStartTimeStr, sizeof(compactStartTimeStr), pCfg->compactStartTime));
|
||||
UNUSED(formatDurationOrKeep(compactEndTimeStr, sizeof(compactEndTimeStr), pCfg->compactEndTime));
|
||||
|
||||
if (IS_SYS_DBNAME(dbName)) {
|
||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||
|
@ -428,15 +434,15 @@ static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName,
|
|||
"PRECISION '%s' REPLICA %d "
|
||||
"WAL_LEVEL %d VGROUPS %d SINGLE_STABLE %d TABLE_PREFIX %d TABLE_SUFFIX %d TSDB_PAGESIZE %d "
|
||||
"WAL_RETENTION_PERIOD %d WAL_RETENTION_SIZE %" PRId64
|
||||
" KEEP_TIME_OFFSET %d ENCRYPT_ALGORITHM '%s' S3_CHUNKPAGES %d S3_KEEPLOCAL %dm S3_COMPACT %d "
|
||||
"COMPACT_INTERVAL %d COMPACT_TIME_RANGE %d,%d COMPACT_TIME_OFFSET %"PRIi8,
|
||||
" KEEP_TIME_OFFSET %dh ENCRYPT_ALGORITHM '%s' S3_CHUNKPAGES %d S3_KEEPLOCAL %dm S3_COMPACT %d "
|
||||
"COMPACT_INTERVAL %s COMPACT_TIME_RANGE %s,%s COMPACT_TIME_OFFSET %"PRIi8 "h",
|
||||
dbName, pCfg->buffer, pCfg->cacheSize, cacheModelStr(pCfg->cacheLast), pCfg->compression, durationStr,
|
||||
pCfg->walFsyncPeriod, pCfg->maxRows, pCfg->minRows, pCfg->sstTrigger, keep0Str, keep1Str, keep2Str,
|
||||
pCfg->pages, pCfg->pageSize, prec, pCfg->replications, pCfg->walLevel, pCfg->numOfVgroups,
|
||||
1 == pCfg->numOfStables, hashPrefix, pCfg->hashSuffix, pCfg->tsdbPageSize, pCfg->walRetentionPeriod,
|
||||
pCfg->walRetentionSize, pCfg->keepTimeOffset, encryptAlgorithmStr(pCfg->encryptAlgorithm),
|
||||
pCfg->s3ChunkSize, pCfg->s3KeepLocal, pCfg->s3Compact, pCfg->compactInterval, pCfg->compactStartTime,
|
||||
pCfg->compactEndTime, pCfg->compactTimeOffset);
|
||||
pCfg->s3ChunkSize, pCfg->s3KeepLocal, pCfg->s3Compact, compactIntervalStr, compactStartTimeStr,
|
||||
compactEndTimeStr, pCfg->compactTimeOffset);
|
||||
|
||||
if (pRetentions) {
|
||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||
|
|
|
@ -2034,7 +2034,11 @@ static SNode* setDatabaseOptionImpl(SAstCreateContext* pCxt, SNode* pOptions, ED
|
|||
pDbOptions->pCompactTimeRangeList = pVal;
|
||||
break;
|
||||
case DB_OPTION_COMPACT_TIME_OFFSET:
|
||||
pDbOptions->compactTimeOffset = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
if (TK_NK_INTEGER == ((SToken*)pVal)->type) {
|
||||
pDbOptions->compactTimeOffset = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
} else {
|
||||
pDbOptions->pCompactTimeOffsetNode = (SValueNode*)createDurationValueNode(pCxt, (SToken*)pVal);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -8172,15 +8172,19 @@ static int32_t checkDbCompactTimeRangeOption(STranslateContext* pCxt, SDatabaseO
|
|||
}
|
||||
|
||||
static int32_t checkDbCompactTimeOffsetOption(STranslateContext* pCxt, SDatabaseOptions* pOptions) {
|
||||
if (pOptions->compactTimeOffset < TSDB_MIN_COMPACT_TIME_OFFSET ||
|
||||
pOptions->compactTimeOffset > TSDB_MAX_COMPACT_TIME_OFFSET) {
|
||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION,
|
||||
"Invalid option compact_time_offset: %d"
|
||||
", valid range: [%d, %d]",
|
||||
pOptions->compactTimeOffset, TSDB_MIN_COMPACT_TIME_OFFSET,
|
||||
TSDB_MAX_COMPACT_TIME_OFFSET);
|
||||
if (pOptions->pCompactTimeOffsetNode) {
|
||||
if (DEAL_RES_ERROR == translateValue(pCxt, pOptions->pCompactTimeOffsetNode)) {
|
||||
return pCxt->errCode;
|
||||
}
|
||||
if (TIME_UNIT_HOUR != pOptions->pCompactTimeOffsetNode->unit) {
|
||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION,
|
||||
"Invalid option compact_time_offset unit: %c, only %c allowed",
|
||||
pOptions->pCompactTimeOffsetNode->unit, TIME_UNIT_HOUR);
|
||||
}
|
||||
pOptions->compactTimeOffset = getBigintFromValueNode(pOptions->pCompactTimeOffsetNode) / 60;
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return checkDbRangeOption(pCxt, "compact_time_offset", pOptions->compactTimeOffset, TSDB_MIN_COMPACT_TIME_OFFSET,
|
||||
TSDB_MAX_COMPACT_TIME_OFFSET);
|
||||
}
|
||||
|
||||
static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName, SDatabaseOptions* pOptions) {
|
||||
|
|
Loading…
Reference in New Issue