Merge remote-tracking branch 'origin/develop' into feature/crash
This commit is contained in:
commit
079614647f
|
@ -264,12 +264,13 @@ void taos_close(TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SSqlObj* pHb = pObj->pHb;
|
SSqlObj* pHb = pObj->pHb;
|
||||||
if (pHb != NULL) {
|
if (pHb != NULL && atomic_val_compare_exchange_ptr(&pObj->pHb, pHb, 0) == pHb) {
|
||||||
if (pHb->pRpcCtx != NULL) { // wait for rsp from dnode
|
if (pHb->pRpcCtx != NULL) { // wait for rsp from dnode
|
||||||
rpcCancelRequest(pHb->pRpcCtx);
|
rpcCancelRequest(pHb->pRpcCtx);
|
||||||
|
pHb->pRpcCtx = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pObj->pHb = NULL;
|
tscDebug("%p, HB is freed", pHb);
|
||||||
taos_free_result(pHb);
|
taos_free_result(pHb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8c58c512b6acda8bcdfa48fdc7140227b5221766
|
Subproject commit 06ec30a0f1762e8169bf6b9045c82bcaa52bcdf0
|
|
@ -65,7 +65,7 @@ int32_t mnodeInitShow() {
|
||||||
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_CONNECT, mnodeProcessConnectMsg);
|
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_CONNECT, mnodeProcessConnectMsg);
|
||||||
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_USE_DB, mnodeProcessUseMsg);
|
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_USE_DB, mnodeProcessUseMsg);
|
||||||
|
|
||||||
tsMnodeShowCache = taosCacheInit(TSDB_DATA_TYPE_BIGINT, 5, false, mnodeFreeShowObj, "show");
|
tsMnodeShowCache = taosCacheInit(TSDB_DATA_TYPE_BIGINT, 5, true, mnodeFreeShowObj, "show");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,10 +389,12 @@ static bool mnodeAccquireShowObj(SShowObj *pShow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void* mnodePutShowObj(SShowObj *pShow) {
|
static void* mnodePutShowObj(SShowObj *pShow) {
|
||||||
|
const int32_t DEFAULT_SHOWHANDLE_LIFE_SPAN = tsShellActivityTimer * 6 * 1000;
|
||||||
|
|
||||||
if (tsMnodeShowCache != NULL) {
|
if (tsMnodeShowCache != NULL) {
|
||||||
pShow->index = atomic_add_fetch_32(&tsShowObjIndex, 1);
|
pShow->index = atomic_add_fetch_32(&tsShowObjIndex, 1);
|
||||||
uint64_t handleVal = (uint64_t)pShow;
|
uint64_t handleVal = (uint64_t)pShow;
|
||||||
SShowObj **ppShow = taosCachePut(tsMnodeShowCache, &handleVal, sizeof(int64_t), &pShow, sizeof(int64_t), 6000);
|
SShowObj **ppShow = taosCachePut(tsMnodeShowCache, &handleVal, sizeof(int64_t), &pShow, sizeof(int64_t), DEFAULT_SHOWHANDLE_LIFE_SPAN);
|
||||||
pShow->ppShow = (void**)ppShow;
|
pShow->ppShow = (void**)ppShow;
|
||||||
mDebug("%p, show is put into cache, data:%p index:%d", pShow, ppShow, pShow->index);
|
mDebug("%p, show is put into cache, data:%p index:%d", pShow, ppShow, pShow->index);
|
||||||
return pShow;
|
return pShow;
|
||||||
|
|
|
@ -266,7 +266,6 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen
|
||||||
|
|
||||||
if (taosHashGetSize(pCacheObj->pHashTable) == 0) {
|
if (taosHashGetSize(pCacheObj->pHashTable) == 0) {
|
||||||
atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1);
|
atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1);
|
||||||
uError("cache:%s, key:%p, not in cache, retrieved failed, reason: empty cache", pCacheObj->name, key);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +279,7 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen
|
||||||
uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(ptNode));
|
uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(ptNode));
|
||||||
} else {
|
} else {
|
||||||
atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1);
|
atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1);
|
||||||
uError("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key);
|
uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic_add_fetch_32(&pCacheObj->statistics.totalAccess, 1);
|
atomic_add_fetch_32(&pCacheObj->statistics.totalAccess, 1);
|
||||||
|
|
|
@ -16,6 +16,7 @@ python3 ./test.py -f insert/nchar.py
|
||||||
python3 ./test.py -f insert/nchar-unicode.py
|
python3 ./test.py -f insert/nchar-unicode.py
|
||||||
python3 ./test.py -f insert/multi.py
|
python3 ./test.py -f insert/multi.py
|
||||||
python3 ./test.py -f insert/randomNullCommit.py
|
python3 ./test.py -f insert/randomNullCommit.py
|
||||||
|
python3 insert/retentionpolicy.py
|
||||||
|
|
||||||
python3 ./test.py -f table/column_name.py
|
python3 ./test.py -f table/column_name.py
|
||||||
python3 ./test.py -f table/column_num.py
|
python3 ./test.py -f table/column_num.py
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
###################################################################
|
||||||
|
# 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 os
|
||||||
|
import datetime
|
||||||
|
sys.path.insert(0, os.getcwd())
|
||||||
|
import taos
|
||||||
|
from util.log import *
|
||||||
|
from util.cases import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.dnodes import *
|
||||||
|
|
||||||
|
|
||||||
|
class TDTestRetetion:
|
||||||
|
def init(self):
|
||||||
|
self.queryRows=0
|
||||||
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
|
tdLog.info("prepare cluster")
|
||||||
|
tdDnodes.init("")
|
||||||
|
tdDnodes.setTestCluster(False)
|
||||||
|
tdDnodes.setValgrind(False)
|
||||||
|
tdDnodes.stopAll()
|
||||||
|
tdDnodes.deploy(1)
|
||||||
|
tdDnodes.start(1)
|
||||||
|
print(tdDnodes.getDnodesRootDir())
|
||||||
|
self.conn = taos.connect(config=tdDnodes.getSimCfgPath())
|
||||||
|
tdSql.init(self.conn.cursor())
|
||||||
|
tdSql.execute('reset query cache')
|
||||||
|
def checkRows(self, expectRows,sql):
|
||||||
|
if self.queryRows == expectRows:
|
||||||
|
tdLog.info("sql:%s, queryRows:%d == expect:%d" % (sql, self.queryRows, expectRows))
|
||||||
|
else:
|
||||||
|
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||||
|
args = (caller.filename, caller.lineno, sql, self.queryRows, expectRows)
|
||||||
|
os.system("timedatectl set-ntp true")
|
||||||
|
tdLog.exit("%s(%d) failed: sql:%s, queryRows:%d != expect:%d" % args)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
|
||||||
|
tdLog.info("=============== step1")
|
||||||
|
tdSql.execute('create database test keep 3 days 1;')
|
||||||
|
tdSql.execute('use test;')
|
||||||
|
tdSql.execute('create table test(ts timestamp,i int);')
|
||||||
|
|
||||||
|
cmd = 'insert into test values(now-2d,11)(now-1d,11)(now,11)(now+1d,11);'
|
||||||
|
tdLog.info(cmd)
|
||||||
|
tdSql.execute(cmd)
|
||||||
|
tdSql.query('select * from test')
|
||||||
|
tdSql.checkRows(4)
|
||||||
|
|
||||||
|
tdLog.info("=============== step2")
|
||||||
|
tdDnodes.stop(1)
|
||||||
|
os.system("timedatectl set-ntp false")
|
||||||
|
os.system("date -s $(date -d \"${DATE} 2 days\" \"+%Y%m%d\")")
|
||||||
|
tdDnodes.start(1)
|
||||||
|
cmd = 'insert into test values(now,11);'
|
||||||
|
tdLog.info(cmd)
|
||||||
|
tdSql.execute(cmd)
|
||||||
|
tdSql.query('select * from test')
|
||||||
|
tdSql.checkRows(5)
|
||||||
|
|
||||||
|
tdLog.info("=============== step3")
|
||||||
|
tdDnodes.stop(1)
|
||||||
|
os.system("date -s $(date -d \"${DATE} 2 days\" \"+%Y%m%d\")")
|
||||||
|
tdDnodes.start(1)
|
||||||
|
cmd = 'insert into test values(now-1d,11);'
|
||||||
|
tdLog.info(cmd)
|
||||||
|
tdSql.execute(cmd)
|
||||||
|
tdSql.query('select * from test')
|
||||||
|
tdSql.checkRows(6)
|
||||||
|
tdLog.info("=============== step4")
|
||||||
|
tdDnodes.stop(1)
|
||||||
|
tdDnodes.start(1)
|
||||||
|
cmd = 'insert into test values(now,11);'
|
||||||
|
tdLog.info(cmd)
|
||||||
|
tdSql.execute(cmd)
|
||||||
|
tdSql.query('select * from test')
|
||||||
|
tdSql.checkRows(7)
|
||||||
|
|
||||||
|
tdLog.info("=============== step5")
|
||||||
|
tdDnodes.stop(1)
|
||||||
|
tdDnodes.start(1)
|
||||||
|
cmd='select * from test where ts > now-1d'
|
||||||
|
queryRows=tdSql.query('select * from test where ts > now-1d')
|
||||||
|
self.checkRows(1,cmd)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
os.system("timedatectl set-ntp true")
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
|
clients = TDTestRetetion()
|
||||||
|
clients.init()
|
||||||
|
clients.run()
|
||||||
|
clients.stop()
|
||||||
|
|
Loading…
Reference in New Issue