From 4886cb4674763ea67a633325519d7bd74ee7d1fe Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Tue, 11 Jul 2023 09:47:50 +0800 Subject: [PATCH] feat: port 'keepTimeOffset' from 2.6 to 3.0 --- docs/en/14-reference/12-config/index.md | 11 ++ docs/zh/14-reference/12-config/index.md | 155 +++++++++++++----------- include/common/tglobal.h | 2 + packaging/cfg/taos.cfg | 3 + source/common/src/tglobal.c | 23 ++++ source/dnode/vnode/src/tsdb/tsdbUtil.c | 2 + 6 files changed, 123 insertions(+), 73 deletions(-) diff --git a/docs/en/14-reference/12-config/index.md b/docs/en/14-reference/12-config/index.md index 7522744469..bf6a45735d 100755 --- a/docs/en/14-reference/12-config/index.md +++ b/docs/en/14-reference/12-config/index.md @@ -722,6 +722,16 @@ The charset that takes effect is UTF-8. | Value Range | 0: not change; 1: change by modification | | Default Value | 0 | +### keepTimeOffset + +| Attribute | Description | +| ------------- | ------------------------- | +| Applicable | Server Only | +| Meaning | Latency of data migration | +| Unit | hour | +| Value Range | 0-23 | +| Default Value | 0 | + ## 3.0 Parameters | # | **Parameter** | **Applicable to 2.x ** | **Applicable to 3.0 ** | Current behavior in 3.0 | @@ -779,3 +789,4 @@ The charset that takes effect is UTF-8. | 53 | udf | Yes | Yes | | | 54 | enableCoreFile | Yes | Yes | | | 55 | ttlChangeOnWrite | No | Yes | | +| 56 | keepTimeOffset | Yes | Yes | | diff --git a/docs/zh/14-reference/12-config/index.md b/docs/zh/14-reference/12-config/index.md index d57ee02868..0e269e59dc 100755 --- a/docs/zh/14-reference/12-config/index.md +++ b/docs/zh/14-reference/12-config/index.md @@ -726,6 +726,16 @@ charset 的有效值是 UTF-8。 | 取值范围 | 0: 不改变;1:改变 | | 缺省值 | 0 | +### keepTimeOffset + +| 属性 | 说明 | +| -------- | ------------------ | +| 适用范围 | 仅服务端适用 | +| 含义 | 迁移操作的延时 | +| 单位 | 小时 | +| 取值范围 | 0-23 | +| 缺省值 | 0 | + ## 压缩参数 ### compressMsgSize @@ -794,6 +804,7 @@ charset 的有效值是 UTF-8。 | 53 | udf | 是 | 是 | | | 54 | enableCoreFile | 是 | 是 | | | 55 | ttlChangeOnWrite | 否 | 是 | | +| 56 | keepTimeOffset | 是 | 是 | | ## 2.x->3.0 的废弃参数 @@ -808,76 +819,74 @@ charset 的有效值是 UTF-8。 | 7 | offlineThreshold | 是 | 否 | 3.0 行为未知 | | 8 | role | 是 | 否 | 由 supportVnode 决定是否能够创建 | | 9 | dnodeNopLoop | 是 | 否 | 2.6 文档中未找到此参数 | -| 10 | keepTimeOffset | 是 | 否 | 2.6 文档中未找到此参数 | -| 11 | rpcTimer | 是 | 否 | 3.0 行为未知 | -| 12 | rpcMaxTime | 是 | 否 | 3.0 行为未知 | -| 13 | rpcForceTcp | 是 | 否 | 默认为 TCP | -| 14 | tcpConnTimeout | 是 | 否 | 3.0 行为未知 | -| 15 | syncCheckInterval | 是 | 否 | 3.0 行为未知 | -| 16 | maxTmrCtrl | 是 | 否 | 3.0 行为未知 | -| 17 | monitorReplica | 是 | 否 | 由 RAFT 协议管理多副本 | -| 18 | smlTagNullName | 是 | 否 | 3.0 行为未知 | -| 20 | ratioOfQueryCores | 是 | 否 | 由 线程池 相关配置参数决定 | -| 21 | maxStreamCompDelay | 是 | 否 | 3.0 行为未知 | -| 22 | maxFirstStreamCompDelay | 是 | 否 | 3.0 行为未知 | -| 23 | retryStreamCompDelay | 是 | 否 | 3.0 行为未知 | -| 24 | streamCompDelayRatio | 是 | 否 | 3.0 行为未知 | -| 25 | maxVgroupsPerDb | 是 | 否 | 由 create db 的参数 vgroups 指定实际 vgroups 数量 | -| 26 | maxTablesPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | -| 27 | minTablesPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | -| 28 | tableIncStepPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | -| 29 | cache | 是 | 否 | 由 buffer 代替 cache\*blocks | -| 30 | blocks | 是 | 否 | 由 buffer 代替 cache\*blocks | -| 31 | days | 是 | 否 | 由 create db 的参数 duration 取代 | -| 32 | keep | 是 | 否 | 由 create db 的参数 keep 取代 | -| 33 | minRows | 是 | 否 | 由 create db 的参数 minRows 取代 | -| 34 | maxRows | 是 | 否 | 由 create db 的参数 maxRows 取代 | -| 35 | quorum | 是 | 否 | 由 RAFT 协议决定 | -| 36 | comp | 是 | 否 | 由 create db 的参数 comp 取代 | -| 37 | walLevel | 是 | 否 | 由 create db 的参数 wal_level 取代 | -| 38 | fsync | 是 | 否 | 由 create db 的参数 wal_fsync_period 取代 | -| 39 | replica | 是 | 否 | 由 create db 的参数 replica 取代 | -| 40 | partitions | 是 | 否 | 3.0 行为未知 | -| 41 | update | 是 | 否 | 允许更新部分列 | -| 42 | cachelast | 是 | 否 | 由 create db 的参数 cacheModel 取代 | -| 43 | maxSQLLength | 是 | 否 | SQL 上限为 1MB,无需参数控制 | -| 44 | maxWildCardsLength | 是 | 否 | 3.0 行为未知 | -| 45 | maxRegexStringLen | 是 | 否 | 3.0 行为未知 | -| 46 | maxNumOfOrderedRes | 是 | 否 | 3.0 行为未知 | -| 47 | maxConnections | 是 | 否 | 取决于系统配置和系统处理能力,详见后面的 Note | -| 48 | mnodeEqualVnodeNum | 是 | 否 | 3.0 行为未知 | -| 49 | http | 是 | 否 | http 服务由 taosAdapter 提供 | -| 50 | httpEnableRecordSql | 是 | 否 | taosd 不提供 http 服务 | -| 51 | httpMaxThreads | 是 | 否 | taosd 不提供 http 服务 | -| 52 | restfulRowLimit | 是 | 否 | taosd 不提供 http 服务 | -| 53 | httpDbNameMandatory | 是 | 否 | taosd 不提供 http 服务 | -| 54 | httpKeepAlive | 是 | 否 | taosd 不提供 http 服务 | -| 55 | enableRecordSql | 是 | 否 | 3.0 行为未知 | -| 56 | maxBinaryDisplayWidth | 是 | 否 | 3.0 行为未知 | -| 57 | stream | 是 | 否 | 默认启用连续查询 | -| 58 | retrieveBlockingModel | 是 | 否 | 3.0 行为未知 | -| 59 | tsdbMetaCompactRatio | 是 | 否 | 3.0 行为未知 | -| 60 | defaultJSONStrType | 是 | 否 | 3.0 行为未知 | -| 61 | walFlushSize | 是 | 否 | 3.0 行为未知 | -| 62 | keepTimeOffset | 是 | 否 | 3.0 行为未知 | -| 63 | flowctrl | 是 | 否 | 3.0 行为未知 | -| 64 | slaveQuery | 是 | 否 | 3.0 行为未知: slave vnode 是否能够处理查询? | -| 65 | adjustMaster | 是 | 否 | 3.0 行为未知 | -| 66 | topicBinaryLen | 是 | 否 | 3.0 行为未知 | -| 67 | telegrafUseFieldNum | 是 | 否 | 3.0 行为未知 | -| 68 | deadLockKillQuery | 是 | 否 | 3.0 行为未知 | -| 69 | clientMerge | 是 | 否 | 3.0 行为未知 | -| 70 | sdbDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 71 | odbcDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 72 | httpDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 73 | monDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 74 | cqDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 75 | shortcutFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | -| 76 | probeSeconds | 是 | 否 | 3.0 行为未知 | -| 77 | probeKillSeconds | 是 | 否 | 3.0 行为未知 | -| 78 | probeInterval | 是 | 否 | 3.0 行为未知 | -| 79 | lossyColumns | 是 | 否 | 3.0 行为未知 | -| 80 | fPrecision | 是 | 否 | 3.0 行为未知 | -| 81 | dPrecision | 是 | 否 | 3.0 行为未知 | -| 82 | maxRange | 是 | 否 | 3.0 行为未知 | -| 83 | range | 是 | 否 | 3.0 行为未知 | +| 10 | rpcTimer | 是 | 否 | 3.0 行为未知 | +| 11 | rpcMaxTime | 是 | 否 | 3.0 行为未知 | +| 12 | rpcForceTcp | 是 | 否 | 默认为 TCP | +| 13 | tcpConnTimeout | 是 | 否 | 3.0 行为未知 | +| 14 | syncCheckInterval | 是 | 否 | 3.0 行为未知 | +| 15 | maxTmrCtrl | 是 | 否 | 3.0 行为未知 | +| 16 | monitorReplica | 是 | 否 | 由 RAFT 协议管理多副本 | +| 17 | smlTagNullName | 是 | 否 | 3.0 行为未知 | +| 18 | ratioOfQueryCores | 是 | 否 | 由 线程池 相关配置参数决定 | +| 19 | maxStreamCompDelay | 是 | 否 | 3.0 行为未知 | +| 20 | maxFirstStreamCompDelay | 是 | 否 | 3.0 行为未知 | +| 21 | retryStreamCompDelay | 是 | 否 | 3.0 行为未知 | +| 22 | streamCompDelayRatio | 是 | 否 | 3.0 行为未知 | +| 23 | maxVgroupsPerDb | 是 | 否 | 由 create db 的参数 vgroups 指定实际 vgroups 数量 | +| 24 | maxTablesPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | +| 25 | minTablesPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | +| 26 | tableIncStepPerVnode | 是 | 否 | DB 中的所有表近似平均分配到各个 vgroup | +| 27 | cache | 是 | 否 | 由 buffer 代替 cache\*blocks | +| 28 | blocks | 是 | 否 | 由 buffer 代替 cache\*blocks | +| 29 | days | 是 | 否 | 由 create db 的参数 duration 取代 | +| 30 | keep | 是 | 否 | 由 create db 的参数 keep 取代 | +| 31 | minRows | 是 | 否 | 由 create db 的参数 minRows 取代 | +| 32 | maxRows | 是 | 否 | 由 create db 的参数 maxRows 取代 | +| 33 | quorum | 是 | 否 | 由 RAFT 协议决定 | +| 34 | comp | 是 | 否 | 由 create db 的参数 comp 取代 | +| 35 | walLevel | 是 | 否 | 由 create db 的参数 wal_level 取代 | +| 36 | fsync | 是 | 否 | 由 create db 的参数 wal_fsync_period 取代 | +| 37 | replica | 是 | 否 | 由 create db 的参数 replica 取代 | +| 38 | partitions | 是 | 否 | 3.0 行为未知 | +| 39 | update | 是 | 否 | 允许更新部分列 | +| 40 | cachelast | 是 | 否 | 由 create db 的参数 cacheModel 取代 | +| 41 | maxSQLLength | 是 | 否 | SQL 上限为 1MB,无需参数控制 | +| 42 | maxWildCardsLength | 是 | 否 | 3.0 行为未知 | +| 43 | maxRegexStringLen | 是 | 否 | 3.0 行为未知 | +| 44 | maxNumOfOrderedRes | 是 | 否 | 3.0 行为未知 | +| 45 | maxConnections | 是 | 否 | 取决于系统配置和系统处理能力,详见后面的 Note | +| 46 | mnodeEqualVnodeNum | 是 | 否 | 3.0 行为未知 | +| 47 | http | 是 | 否 | http 服务由 taosAdapter 提供 | +| 48 | httpEnableRecordSql | 是 | 否 | taosd 不提供 http 服务 | +| 49 | httpMaxThreads | 是 | 否 | taosd 不提供 http 服务 | +| 50 | restfulRowLimit | 是 | 否 | taosd 不提供 http 服务 | +| 51 | httpDbNameMandatory | 是 | 否 | taosd 不提供 http 服务 | +| 52 | httpKeepAlive | 是 | 否 | taosd 不提供 http 服务 | +| 53 | enableRecordSql | 是 | 否 | 3.0 行为未知 | +| 54 | maxBinaryDisplayWidth | 是 | 否 | 3.0 行为未知 | +| 55 | stream | 是 | 否 | 默认启用连续查询 | +| 56 | retrieveBlockingModel | 是 | 否 | 3.0 行为未知 | +| 57 | tsdbMetaCompactRatio | 是 | 否 | 3.0 行为未知 | +| 58 | defaultJSONStrType | 是 | 否 | 3.0 行为未知 | +| 59 | walFlushSize | 是 | 否 | 3.0 行为未知 | +| 60 | flowctrl | 是 | 否 | 3.0 行为未知 | +| 61 | slaveQuery | 是 | 否 | 3.0 行为未知: slave vnode 是否能够处理查询? | +| 62 | adjustMaster | 是 | 否 | 3.0 行为未知 | +| 63 | topicBinaryLen | 是 | 否 | 3.0 行为未知 | +| 64 | telegrafUseFieldNum | 是 | 否 | 3.0 行为未知 | +| 65 | deadLockKillQuery | 是 | 否 | 3.0 行为未知 | +| 66 | clientMerge | 是 | 否 | 3.0 行为未知 | +| 67 | sdbDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 68 | odbcDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 69 | httpDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 70 | monDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 71 | cqDebugFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 72 | shortcutFlag | 是 | 否 | 参考 3.0 的 DebugFlag 系列参数 | +| 73 | probeSeconds | 是 | 否 | 3.0 行为未知 | +| 74 | probeKillSeconds | 是 | 否 | 3.0 行为未知 | +| 75 | probeInterval | 是 | 否 | 3.0 行为未知 | +| 76 | lossyColumns | 是 | 否 | 3.0 行为未知 | +| 77 | fPrecision | 是 | 否 | 3.0 行为未知 | +| 78 | dPrecision | 是 | 否 | 3.0 行为未知 | +| 79 | maxRange | 是 | 否 | 3.0 行为未知 | +| 80 | range | 是 | 否 | 3.0 行为未知 | diff --git a/include/common/tglobal.h b/include/common/tglobal.h index bc4037c642..657435e5ff 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -48,6 +48,7 @@ extern int32_t tsMaxNumOfDistinctResults; extern int32_t tsCompatibleModel; extern bool tsPrintAuth; extern int64_t tsTickPerMin[3]; +extern int64_t tsTickPerHour[3]; extern int32_t tsCountAlwaysReturnValue; extern float tsSelectivityRatio; extern int32_t tsTagFilterResCacheSize; @@ -185,6 +186,7 @@ extern bool tsDisableStream; extern int64_t tsStreamBufferSize; extern int64_t tsCheckpointInterval; extern bool tsFilterScalarMode; +extern int32_t tsKeepTimeOffset; extern int32_t tsMaxStreamBackendCache; extern int32_t tsPQSortMemThreshold; diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index 2159899aa2..236cf1f520 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -108,6 +108,9 @@ # time period of keeping log files, in days # logKeepDays 0 +# unit Hour. Latency of data migration +# keepTimeOffset 0 + ############ 3. Debug Flag and levels ############################################# diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 74471eca9a..3545ece6d8 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -186,6 +186,13 @@ bool tsDeployOnSnode = true; * TSDB_TIME_PRECISION_NANO: 60000000000L */ int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L}; +/* + * millisecond by default + * for TSDB_TIME_PRECISION_MILLI: 3600000L + * TSDB_TIME_PRECISION_MICRO: 3600000000L + * TSDB_TIME_PRECISION_NANO: 3600000000000L + */ +int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L}; // lossy compress 6 char tsLossyColumns[32] = ""; // "float|double" means all float and double columns can be lossy compressed. set empty @@ -217,6 +224,7 @@ bool tsDisableStream = false; int64_t tsStreamBufferSize = 128 * 1024 * 1024; int64_t tsCheckpointInterval = 3 * 60 * 60 * 1000; bool tsFilterScalarMode = false; +int32_t tsKeepTimeOffset = 0; // latency of data migration #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { @@ -537,6 +545,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, 0) != 0) return -1; if (cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, 0) != 0) return -1; + if (cfgAddInt32(pCfg, "keepTimeOffset", tsKeepTimeOffset, 0, 23, 0) != 0) return -1; if (cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, 0) != 0) return -1; if (cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, 0) != 0) return -1; @@ -921,6 +930,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsCheckpointInterval = cfgGetItem(pCfg, "checkpointInterval")->i64; tsFilterScalarMode = cfgGetItem(pCfg, "filterScalarMode")->bval; + tsKeepTimeOffset = cfgGetItem(pCfg, "keepTimeOffset")->i32; tsMaxStreamBackendCache = cfgGetItem(pCfg, "maxStreamBackendCache")->i32; tsPQSortMemThreshold = cfgGetItem(pCfg, "pqSortMemThreshold")->i32; @@ -1478,6 +1488,19 @@ void taosCfgDynamicOptions(const char *option, const char *value) { return; } + if (strcasecmp(option, "keepTimeOffset") == 0) { + int32_t newKeepTimeOffset = atoi(value); + if (newKeepTimeOffset < 0 || newKeepTimeOffset > 23) { + uError("failed to set keepTimeOffset from %d to %d. Valid range: [0, 23]", tsKeepTimeOffset, newKeepTimeOffset); + return; + } + + uInfo("keepTimeOffset set from %d to %d", tsKeepTimeOffset, newKeepTimeOffset); + tsKeepTimeOffset = newKeepTimeOffset; + + return; + } + const char *options[] = { "dDebugFlag", "vDebugFlag", "mDebugFlag", "wDebugFlag", "sDebugFlag", "tsdbDebugFlag", "tqDebugFlag", "fsDebugFlag", "udfDebugFlag", "smaDebugFlag", "idxDebugFlag", "tdbDebugFlag", "tmrDebugFlag", "uDebugFlag", diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index 84671197d8..9340b24d74 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -542,6 +542,8 @@ int32_t tsdbFidLevel(int32_t fid, STsdbKeepCfg *pKeepCfg, int64_t nowSec) { ASSERT(0); } + nowSec = nowSec - tsKeepTimeOffset * tsTickPerHour[pKeepCfg->precision]; + key = nowSec - pKeepCfg->keep0 * tsTickPerMin[pKeepCfg->precision]; aFid[0] = tsdbKeyFid(key, pKeepCfg->days, pKeepCfg->precision); key = nowSec - pKeepCfg->keep1 * tsTickPerMin[pKeepCfg->precision]; -- GitLab