fix: time window computation error
This commit is contained in:
parent
a518cba133
commit
ba2ba0a8cb
|
@ -872,18 +872,17 @@ int64_t taosTimeTruncate(int64_t ts, const SInterval* pInterval) {
|
||||||
ASSERT(pInterval->offset >= 0);
|
ASSERT(pInterval->offset >= 0);
|
||||||
|
|
||||||
if (pInterval->offset > 0) {
|
if (pInterval->offset > 0) {
|
||||||
start = taosTimeAdd(start, pInterval->offset, pInterval->offsetUnit, precision);
|
|
||||||
|
|
||||||
// try to move current window to the left-hande-side, due to the offset effect.
|
// try to move current window to the left-hande-side, due to the offset effect.
|
||||||
int64_t end = taosTimeAdd(start, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
int64_t end = taosTimeAdd(start, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
||||||
|
|
||||||
int64_t newe = end;
|
int64_t newe = end;
|
||||||
|
int64_t slidingEnd = end;
|
||||||
while (newe >= ts) {
|
while (newe >= ts) {
|
||||||
end = newe;
|
end = slidingEnd;
|
||||||
newe = taosTimeAdd(newe, -pInterval->sliding, pInterval->slidingUnit, precision);
|
slidingEnd = taosTimeAdd(slidingEnd, -pInterval->sliding, pInterval->slidingUnit, precision);
|
||||||
|
newe = taosTimeAdd(slidingEnd, pInterval->offset, pInterval->offsetUnit, precision);
|
||||||
}
|
}
|
||||||
|
int64_t slidingStart = taosTimeAdd(end, -pInterval->interval, pInterval->intervalUnit, precision) + 1;
|
||||||
start = taosTimeAdd(end, -pInterval->interval, pInterval->intervalUnit, precision) + 1;
|
start = taosTimeAdd(slidingStart, pInterval->offset, pInterval->offsetUnit, precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
|
|
|
@ -158,4 +158,27 @@ TEST(testCase, timewindow_gen) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(testCase, timewindow_natural) {
|
||||||
|
osSetTimezone("CST");
|
||||||
|
|
||||||
|
int32_t precision = TSDB_TIME_PRECISION_MILLI;
|
||||||
|
|
||||||
|
SInterval interval2 = createInterval(17, 17, 13392000000, 'n', 'n', 0, precision);
|
||||||
|
int64_t key1 = 1633446027072;
|
||||||
|
STimeWindow w1 = {0};
|
||||||
|
getInitialStartTimeWindow(&interval2, key1, &w1, true);
|
||||||
|
printTimeWindow(&w1, precision, key1);
|
||||||
|
STimeWindow w3 = getAlignQueryTimeWindow(&interval2, key1);
|
||||||
|
printf("%ld win %ld, %ld\n", key1, w3.skey, w3.ekey);
|
||||||
|
|
||||||
|
int64_t key2 = 1648758398208;
|
||||||
|
STimeWindow w2 = {0};
|
||||||
|
getInitialStartTimeWindow(&interval2, key2, &w2, true);
|
||||||
|
printTimeWindow(&w2, precision, key2);
|
||||||
|
STimeWindow w4 = getAlignQueryTimeWindow(&interval2, key2);
|
||||||
|
printf("%ld win %ld, %ld\n", key2, w3.skey, w3.ekey);
|
||||||
|
|
||||||
|
ASSERT_EQ(w3.skey, w4.skey);
|
||||||
|
ASSERT_EQ(w3.ekey, w4.ekey);
|
||||||
|
}
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
|
@ -36,6 +36,7 @@
|
||||||
#,,n,system-test,python3 ./test.py -f 8-stream/snode_restart_with_checkpoint.py -N 4
|
#,,n,system-test,python3 ./test.py -f 8-stream/snode_restart_with_checkpoint.py -N 4
|
||||||
|
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname_vgroup.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname_vgroup.py
|
||||||
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_interval.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/compact-col.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/compact-col.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 2
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 2
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
###################################################################
|
||||||
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is proprietary and confidential to TAOS Technologies.
|
||||||
|
# No part of this file may be reproduced, stored, transmitted,
|
||||||
|
# disclosed or used in any form or by any means other than as
|
||||||
|
# expressly provided by the written permission from Jianhui Tao
|
||||||
|
#
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import taos
|
||||||
|
from util.log import tdLog
|
||||||
|
from util.cases import tdCases
|
||||||
|
from util.sql import tdSql
|
||||||
|
from util.dnodes import tdDnodes
|
||||||
|
import random
|
||||||
|
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
def init(self, conn, logSql, replicaVar=1):
|
||||||
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
|
tdSql.init(conn.cursor(), logSql)
|
||||||
|
|
||||||
|
def restartTaosd(self, index=1, dbname="db"):
|
||||||
|
tdDnodes.stop(index)
|
||||||
|
tdDnodes.startWithoutSleep(index)
|
||||||
|
tdSql.execute(f"use d")
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
tdSql.execute("drop database if exists d");
|
||||||
|
tdSql.execute("create database d");
|
||||||
|
tdSql.execute("use d");
|
||||||
|
tdSql.execute("create table st(ts timestamp, f int) tags (t int)")
|
||||||
|
|
||||||
|
for i in range(-2048, 2047):
|
||||||
|
ts = 1626624000000 + i;
|
||||||
|
tdSql.execute(f"insert into ct1 using st tags(1) values({ts}, {i})")
|
||||||
|
|
||||||
|
tdSql.execute("flush database d")
|
||||||
|
for i in range(1638):
|
||||||
|
ts = 1648758398208 + i
|
||||||
|
tdSql.execute(f"insert into ct1 using st tags(1) values({ts}, {i})")
|
||||||
|
tdSql.execute("insert into ct1 using st tags(1) values(1648970742528, 1638)")
|
||||||
|
tdSql.execute("flush database d")
|
||||||
|
|
||||||
|
tdSql.query("select count(ts) from ct1 interval(17n, 5n)")
|
||||||
|
self.restartTaosd()
|
||||||
|
tdSql.query("select count(ts) from ct1 interval(17n, 5n)")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
Loading…
Reference in New Issue