mirror of
https://github.com/taosdata/TDengine
synced 2026-05-24 10:09:01 +00:00
163 lines
9.2 KiB
Python
163 lines
9.2 KiB
Python
import taos
|
|
import sys
|
|
import time
|
|
import socket
|
|
import os
|
|
import threading
|
|
import psutil
|
|
import platform
|
|
from util.log import *
|
|
from util.sql import *
|
|
from util.cases import *
|
|
from util.dnodes import *
|
|
|
|
|
|
class TDTestCase:
|
|
def init(self, conn, logSql, replicaVar=1):
|
|
self.replicaVar = int(replicaVar)
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdSql.init(conn.cursor(), logSql)
|
|
if platform.system().lower() == 'windows':
|
|
self.buffer_boundary = [3, 4097]
|
|
else:
|
|
self.buffer_boundary = [3, 4097, 8193, 12289, 16384]
|
|
# remove the value > free_memory, 70% is the weight to calculate the max value
|
|
# if platform.system() == "Linux" and platform.machine() == "aarch64":
|
|
# mem = psutil.virtual_memory()
|
|
# free_memory = mem.free * 0.7 / 1024 / 1024
|
|
# for item in self.buffer_boundary:
|
|
# if item > free_memory:
|
|
# self.buffer_boundary.remove(item)
|
|
|
|
self.buffer_error = [self.buffer_boundary[0] -
|
|
1, self.buffer_boundary[-1]+1]
|
|
# pages_boundary >= 64
|
|
self.pages_boundary = [64, 128, 512]
|
|
self.pages_error = [self.pages_boundary[0]-1]
|
|
|
|
def alter_buffer(self):
|
|
tdSql.execute('create database db')
|
|
if platform.system() == "Linux" and platform.machine() == "aarch64":
|
|
tdLog.debug("Skip check points for Linux aarch64 due to environment settings")
|
|
else:
|
|
for buffer in self.buffer_boundary:
|
|
tdSql.execute(f'alter database db buffer {buffer}')
|
|
tdSql.query(
|
|
'select * from information_schema.ins_databases where name = "db"')
|
|
tdSql.checkEqual(tdSql.queryResult[0][8], buffer)
|
|
tdSql.execute('drop database db')
|
|
tdSql.execute('create database db vgroups 10')
|
|
for buffer in self.buffer_error:
|
|
tdSql.error(f'alter database db buffer {buffer}')
|
|
tdSql.execute('drop database db')
|
|
|
|
def alter_pages(self):
|
|
tdSql.execute('create database db')
|
|
for pages in self.pages_boundary:
|
|
tdSql.execute(f'alter database db pages {pages}')
|
|
tdSql.query(
|
|
'select * from information_schema.ins_databases where name = "db"')
|
|
tdSql.checkEqual(tdSql.queryResult[0][10], pages)
|
|
tdSql.execute('drop database db')
|
|
tdSql.execute('create database db')
|
|
tdSql.query(
|
|
'select * from information_schema.ins_databases where name = "db"')
|
|
# self.pages_error.append(tdSql.queryResult[0][10])
|
|
for pages in self.pages_error:
|
|
tdSql.error(f'alter database db pages {pages}')
|
|
tdSql.execute('drop database db')
|
|
|
|
def alter_encrypt_alrogithm(self):
|
|
tdSql.execute('create database db')
|
|
tdSql.checkEqual("Encryption is not allowed to be changed after database is created", tdSql.error('alter database db encrypt_algorithm \'sM4\''))
|
|
tdSql.checkEqual("Encryption is not allowed to be changed after database is created", tdSql.error('alter database db encrypt_algorithm \'noNe\''))
|
|
tdSql.checkEqual("Encryption is not allowed to be changed after database is created", tdSql.error('alter database db encrypt_algorithm \'\''))
|
|
tdSql.checkEqual("Invalid option encrypt_algorithm: none ", tdSql.error('alter database db encrypt_algorithm \'none \''))
|
|
tdSql.execute('drop database db')
|
|
|
|
def alter_same_options(self):
|
|
tdSql.execute('drop database if exists db')
|
|
tdSql.execute('create database db')
|
|
tdSql.query('select * from information_schema.ins_databases where name = "db"')
|
|
|
|
db_options_items = ["replica","keep","buffer","pages","minrows","cachemodel","cachesize","wal_level","wal_fsync_period",
|
|
"wal_retention_period","wal_retention_size","stt_trigger", "compact_interval", "compact_time_range", "compact_time_offset"]
|
|
db_options_result_idx = [4,7,8,10,11,18,19,20,21,22,23,24,34,35,36]
|
|
|
|
self.option_result = []
|
|
for idx in db_options_result_idx:
|
|
self.option_result.append(tdSql.queryResult[0][idx])
|
|
|
|
index = 0
|
|
for option in db_options_items:
|
|
if option == "cachemodel":
|
|
option_sql = "alter database db %s '%s'" % (option, self.option_result[index] )
|
|
else:
|
|
option_sql = "alter database db %s %s" % (option, self.option_result[index] )
|
|
tdLog.debug(option_sql)
|
|
tdSql.query(option_sql)
|
|
index += 1
|
|
tdSql.execute('drop database db')
|
|
|
|
def showCreateDbCheck(self, dbname, expectShowCreateDb, maxRetry=30, dropDbAndRecheck=False, dropDbAfterCheck=False):
|
|
retry_count = 0
|
|
success = False
|
|
while retry_count < maxRetry and not success:
|
|
try:
|
|
tdSql.query(f"show create database {dbname};")
|
|
tdSql.checkRows(1)
|
|
tdSql.checkData(0, 0, dbname)
|
|
tdSql.checkEqual(tdSql.queryResult[0][1], expectShowCreateDb)
|
|
tdLog.info(f"check passed after {retry_count} seconds")
|
|
success = True
|
|
except Exception as e:
|
|
retry_count += 1
|
|
tdLog.info(f"Attempt to check {retry_count} time(s): show create database {dbname}")
|
|
if retry_count >= maxRetry:
|
|
raise Exception(repr(e))
|
|
time.sleep(1)
|
|
if dropDbAndRecheck == True:
|
|
tdSql.execute(f"drop database if exists {dbname}")
|
|
tdSql.execute(expectShowCreateDb)
|
|
tdSql.query(f"show create database {dbname};")
|
|
tdSql.checkRows(1)
|
|
tdSql.checkData(0, 0, dbname)
|
|
tdSql.checkData(0, 1, expectShowCreateDb)
|
|
if dropDbAfterCheck == True:
|
|
tdSql.execute(f"drop database if exists {dbname}")
|
|
|
|
def alter_keep_time_offset(self):
|
|
tdSql.execute('drop database if exists db')
|
|
tdSql.checkEqual("Invalid option keep_time_offset unit: d, only h allowed", tdSql.error('create database db keep_time_offset 0d'))
|
|
tdSql.checkEqual("syntax error near \"-1\"", tdSql.error('create database db keep_time_offset -1'))
|
|
tdSql.checkEqual("syntax error near \"-100h\"", tdSql.error('create database db keep_time_offset -100h'))
|
|
tdSql.checkEqual("Invalid option keep_time_offset: 24 valid range: [0, 23]", tdSql.error('create database db keep_time_offset 24h'))
|
|
tdSql.execute('create database db keep_time_offset 20h')
|
|
self.showCreateDbCheck('db', "CREATE DATABASE `db` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 20 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1 COMPACT_INTERVAL 0d COMPACT_TIME_RANGE 0d,0d COMPACT_TIME_OFFSET 0h", 30, True, False)
|
|
tdSql.checkEqual("Invalid option keep_time_offset unit: d, only h allowed", tdSql.error('alter database db keep_time_offset 0d'))
|
|
tdSql.checkEqual("syntax error near \"-1\"", tdSql.error('alter database db keep_time_offset -1'))
|
|
tdSql.checkEqual("syntax error near \"-100h\"", tdSql.error('alter database db keep_time_offset -100h'))
|
|
tdSql.checkEqual("Invalid option keep_time_offset: 24 valid range: [0, 23]", tdSql.error('alter database db keep_time_offset 24h'))
|
|
|
|
tdLog.info('alter database db keep_time_offset 23h')
|
|
tdSql.execute('alter database db keep_time_offset 23h')
|
|
self.showCreateDbCheck('db', "CREATE DATABASE `db` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 23 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1 COMPACT_INTERVAL 0d COMPACT_TIME_RANGE 0d,0d COMPACT_TIME_OFFSET 0h", 30, True, False)
|
|
tdLog.info('alter database db keep_time_offset 0')
|
|
tdSql.execute('alter database db keep_time_offset 0')
|
|
self.showCreateDbCheck('db', "CREATE DATABASE `db` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1 COMPACT_INTERVAL 0d COMPACT_TIME_RANGE 0d,0d COMPACT_TIME_OFFSET 0h", 30, True, True)
|
|
|
|
def run(self):
|
|
|
|
self.alter_buffer()
|
|
self.alter_pages()
|
|
self.alter_encrypt_alrogithm()
|
|
self.alter_same_options()
|
|
self.alter_keep_time_offset()
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success(f"{__file__} successfully executed")
|
|
|
|
|
|
tdCases.addLinux(__file__, TDTestCase())
|
|
tdCases.addWindows(__file__, TDTestCase())
|