1316 lines
56 KiB
Python
1316 lines
56 KiB
Python
#!/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
############################################################################
|
|
#
|
|
# @file test_sys_storage_medium.py
|
|
# @date 2020-05-07 14:48:30
|
|
# @brief 存储介质基本case。需要使用env_config.py中的be数据目录及机器登录信息
|
|
#
|
|
#############################################################################
|
|
|
|
"""
|
|
分级存储测试
|
|
"""
|
|
import time
|
|
import datetime
|
|
import pytest
|
|
|
|
from data import partition as DATA
|
|
from data import schema as SCHEMA
|
|
from lib import palo_config
|
|
from lib import palo_client
|
|
from lib import palo_job
|
|
from lib import util
|
|
|
|
config = palo_config.config
|
|
LOG = palo_client.LOG
|
|
L = palo_client.L
|
|
broker_info = palo_config.broker_info
|
|
BE_DATA_PATH_EXISTS=False
|
|
|
|
|
|
def setup_module():
|
|
"""
|
|
setUp
|
|
"""
|
|
global client, BE_DATA_PATH_EXISTS
|
|
client = palo_client.get_client(config.fe_host, config.fe_query_port, user=config.fe_user, \
|
|
password=config.fe_password)
|
|
be_host = client.get_backend_host_list()
|
|
for host in be_host:
|
|
cmd = 'ls %s' % ' '.join(config.be_data_path)
|
|
status, output = util.exec_cmd(cmd, config.host_username, config.host_password, host)
|
|
if status == 0:
|
|
BE_DATA_PATH_EXISTS = True
|
|
|
|
|
|
def check_tablet(table_tablet_info, storage_medium):
|
|
"""
|
|
检查tablet是否在be数据目录的ssd中
|
|
table_tablet_info:show tablet result
|
|
"""
|
|
if not BE_DATA_PATH_EXISTS:
|
|
return 0
|
|
storage_path_list = list()
|
|
for data_path in config.be_data_path:
|
|
if data_path.endswith(storage_medium.upper()):
|
|
storage_path_list.append(data_path + '/data/')
|
|
for tablet in table_tablet_info:
|
|
tablet_id = tablet[0]
|
|
host = client.get_backend(tablet[2])[palo_job.BackendProcInfo.Host]
|
|
for data_path in storage_path_list:
|
|
cmd = 'find %s -type d -name %s ' % (data_path, tablet_id)
|
|
status, output = util.exec_cmd(cmd, config.host_username, config.host_password, host)
|
|
print(cmd)
|
|
print(status, output)
|
|
LOG.info(L('exec cmd on remote host', cmd=cmd, username=config.host_username, host=host))
|
|
LOG.info(L('exec cmd on remote host ret', status=status, output=output))
|
|
assert status == 0
|
|
assert output.find(tablet_id) != -1
|
|
|
|
|
|
def test_ssd_all():
|
|
"""
|
|
{
|
|
"title": "存储介质SSD测试",
|
|
"describe": "复合分区表建表时指定全部分区到SSD,验证BE在SSD上建立了存储分片,导入数据后, 验证数据正确分布到了SSD,并对数据进行正确性验证",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表建表时指定全部分区到SSD
|
|
验证BE在SSD上建立了存储分片
|
|
导入数据后, 验证数据正确分布到了SSD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='SSD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='SSD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='SSD')
|
|
partition_d = palo_client.Partition('partition_d', 'MAXVALUE', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1, partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_hdd_all():
|
|
"""
|
|
{
|
|
"title": "建表指定HDD",
|
|
"describe": "复合分区表建表时指定全部分区到HDD,验证BE在HDD正确建立了存储分片,导入数据后,验证相应分区的数据正确分布到了HDD,并对数据进行正确性验证",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表建表时指定全部分区到HDD
|
|
验证BE在HDD正确建立了存储分片
|
|
导入数据后,验证相应分区的数据正确分布到了HDD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', 'MAXVALUE', storage_medium='HDD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k2)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_ssd_hdd():
|
|
"""
|
|
{
|
|
"title": "建分区表,ssd和hdd混合",
|
|
"describe": "复合分区表建表时指定部分分区到SSD,指定其余分区到HDD",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表建表时指定部分分区到SSD,指定其余分区到HDD
|
|
并且保证所有BE的SSD和HDD空间充足
|
|
验证BE在SSD和HDD建立了存储分片
|
|
导入数据后,验证相应分区的数据正确分布到了SSD和HDD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='SSD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='SSD')
|
|
partition_d = palo_client.Partition('partition_d', 'MAXVALUE', storage_medium='HDD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k3)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
ret = client.show_tablet(table_name, partition_list=['partition_a', 'partition_c'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
ret = client.show_tablet(table_name, partition_list=['partition_b', 'partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_ssd_table():
|
|
"""
|
|
{
|
|
"title": "建立ssd单分区表",
|
|
"describe": "单分区表建表时指定到SSD,验证BE在SSD上建立了存储分片,导入数据后,验证数据正确分布到了SSD,并对数据进行正确性验证",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表建表时指定到SSD,
|
|
验证BE在SSD上建立了存储分片
|
|
导入数据后,验证数据正确分布到了SSD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='SSD')
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_hdd_table():
|
|
"""
|
|
{
|
|
"title": "建立hdd单分区表",
|
|
"describe": "单分区表建表时指定到HDD,验证BE在HDD上建立了存储分片,导入数据后,验证数据正确分布到了HDD,并对数据进行正确性验证",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表建表时指定到HDD,
|
|
验证BE在HDD上建立了存储分片
|
|
导入数据后,验证数据正确分布到了HDD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='HDD')
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'HDD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_add_ssd_partition():
|
|
"""
|
|
{
|
|
"title": "增加ssd分区",
|
|
"describe": "复合分区表,增加分区指定到SSD,同时修改BUCKETS个数,验证BE在SSD上建立了新的分区的存储分片,导入新增分区的数据后,验证数据分布到SSD,正确性验证",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表,增加分区指定到SSD,同时修改BUCKETS个数
|
|
验证BE在SSD上建立了新的分区的存储分片
|
|
导入新增分区的数据后,验证数据正确分布到了SSD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='HDD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k2)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
|
|
assert client.add_partition(table_name, 'partition_add', 'MAXVALUE',
|
|
storage_medium='SSD', distribute_type='Hash(k2)',
|
|
bucket_num=13)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_add') == 'SSD'
|
|
|
|
ret = client.show_tablet(table_name, partition_list=['partition_add'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_add_hdd_partition():
|
|
"""
|
|
{
|
|
"title": "增加hdd分区",
|
|
"describe": "复合分区表,增加分区指定到HDD,同时修改BUCKETS个数,验证BE在SSD上建立了新的分区的存储分片,导入新增分区的数据后,验证数据正确分布到了HDD,并对数据进行正确性验证",
|
|
"tag": "autotest"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表,增加分区指定到HDD,同时修改BUCKETS个数
|
|
验证BE在SSD上建立了新的分区的存储分片
|
|
导入新增分区的数据后,验证数据正确分布到了HDD,并对数据进行正确性验证
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='SSD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='SSD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='SSD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 1)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
assert client.add_partition(table_name, 'partition_add', 'MAXVALUE',
|
|
storage_medium='HDD', distribute_type='Hash(k1)', bucket_num=13)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_add') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_add'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
time.sleep(10)
|
|
print(e)
|
|
if retry_times == 0:
|
|
assert 0 == 1, 'storage medium check error'
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_to_hdd_partition():
|
|
"""
|
|
{
|
|
"title": "修改ssd分区为hdd",
|
|
"describe": "主动修改分区存储属性,SSD改为HDD,HDD充足,验证BE汇报后迁移正确,数据正确",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
主动修改分区存储属性,SSD改为HDD,HDD充足,验证BE汇报后迁移正确,数据正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k3)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='HDD')
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_to_ssd_partition():
|
|
"""
|
|
{
|
|
"title": "修改hdd分区为ssd",
|
|
"describe": "主动修改分区存储属性,HDD改为SSD,SSD充足,验证BE汇报后迁移正确,数据正确",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
主动修改分区存储属性,HDD改为SSD,SSD充足,验证BE汇报后迁移正确,数据正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='SSD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='SSD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='SSD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='HDD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k2)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
check_tablet(ret, 'hdd')
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='SSD')
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
retry_times -= 1
|
|
time.sleep(30)
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_ssd_to_ssd_partition():
|
|
"""
|
|
{
|
|
"title": "将ssd分区改为ssd",
|
|
"describe": "主动修改分区存储属性,SSD改为SSD,验证不迁移",
|
|
"tag": "p1,system,fuzz"
|
|
}
|
|
"""
|
|
"""
|
|
主动修改分区存储属性,SSD改为SSD,验证不迁移
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='SSD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='SSD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='SSD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'SSD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='SSD')
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from ssd')
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_hdd_to_hdd_partition():
|
|
"""
|
|
{
|
|
"title": "修改hdd分区为hdd",
|
|
"describe": "主动修改分区存储属性,HDD改为HDD,验证不迁移",
|
|
"tag": "p1,system,fuzz"
|
|
}
|
|
"""
|
|
"""
|
|
主动修改分区存储属性,HDD改为HDD,验证不迁移
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='HDD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 2)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='HDD')
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_to_hdd_partition_at_cooldown_time():
|
|
"""
|
|
{
|
|
"title": "修改hdd分区冷却时间",
|
|
"describe": "主动修改分区storage_cooldown_time属性,HDD充足,验证属性修改正确,验证过期时间达到后BE汇报后迁移正确",
|
|
"tag": "autotest"
|
|
}
|
|
"""
|
|
"""
|
|
主动修改分区storage_cooldown_time属性,HDD充足
|
|
验证属性修改正确,验证过期时间达到后BE汇报后迁移正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k3)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() + delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
time.sleep(storage_cooldown_delta_time + 30)
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_medium_cooldown_time():
|
|
"""
|
|
{
|
|
"title": "修改hdd分区为ssd,增加冷却时间",
|
|
"describe": "单分区表同时修改分区storage_medium、storage_cooldown_time属性,HDD改为SSD,SSD充足,验证属性修改正确,验证迁移正确",
|
|
"tag": "autotest"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表同时修改分区storage_medium、storage_cooldown_time属性
|
|
HDD改为SSD,SSD充足,验证属性修改正确,验证迁移正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='HDD')
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'HDD'
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() + delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
assert client.modify_partition(table_name, table_name, storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
|
|
time.sleep(storage_cooldown_delta_time + 30)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'HDD'
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_medium_cooldown_time_for_partitions():
|
|
"""
|
|
{
|
|
"title": "修改分区为ssd,修改冷却时间",
|
|
"describe": "复合分区表对多个分区同时修改分区storage_medium、storage_cooldown_time属性,HDD改为SSD,SSD充足,验证属性修改正确,验证迁移正确",
|
|
"tag": "p1,system"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表对多个分区同时修改分区storage_medium、storage_cooldown_time属性
|
|
HDD改为SSD,SSD充足,验证属性修改正确,验证迁移正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k3)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() + delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
assert client.modify_partition(table_name, 'partition_c', storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
time.sleep(storage_cooldown_delta_time + 30)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_cooldown_time():
|
|
"""
|
|
{
|
|
"title": "单分区表增加冷却时间",
|
|
"describe": "单分区表SSD指定过期时间,验证过期时间达到后BE汇报后数据迁移到HDD,验证数据正确",
|
|
"tag": "autotest"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表SSD指定过期时间,验证过期时间达到后BE汇报后数据迁移到HDD,验证数据正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='SSD')
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'SSD'
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() + delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
assert client.modify_partition(table_name, table_name, storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
|
|
time.sleep(storage_cooldown_delta_time + 30)
|
|
ret = client.show_tablet(table_name)
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'hdd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'HDD'
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_invalid_cooldown_time_a():
|
|
"""
|
|
{
|
|
"title": "无效的冷却时间",
|
|
"describe": "单分区表SSD指定过去时间为过期时间,验证不迁移,报错",
|
|
"tag": "p1,system,fuzz"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表SSD指定过去时间为过期时间,验证不迁移,报错
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='SSD')
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'SSD'
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() - delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
ret = False
|
|
try:
|
|
ret = client.modify_partition(table_name, table_name, storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
except:
|
|
pass
|
|
assert not ret
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_modify_invalid_cooldown_time_b():
|
|
"""
|
|
{
|
|
"title": "无效的冷却时间",
|
|
"describe": "单分区表SSD指定当前时间为过期时间,验证报错",
|
|
"tag": "p1,system,fuzz"
|
|
}
|
|
"""
|
|
"""
|
|
单分区表SSD指定当前时间为过期时间,验证报错
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
distribution_info=distribution_info, storage_medium='SSD')
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, table_name) == 'SSD'
|
|
|
|
storage_cooldown_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
ret = False
|
|
try:
|
|
ret = client.modify_partition(table_name, table_name, storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
except:
|
|
pass
|
|
assert not ret
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_cooldown_while_select():
|
|
"""
|
|
{
|
|
"title": "test_cooldown_while_select",
|
|
"describe": "复合分区表全部分区指定到SSD,部分分区指定过期时间,部分分区不指定过期时间过期时间达到前后1分钟内,持续进行查询操作",
|
|
"tag": "p1,system,stability"
|
|
}
|
|
"""
|
|
"""
|
|
复合分区表全部分区指定到SSD,SSD充足
|
|
部分分区指定过期时间,部分分区不指定过期时间
|
|
过期时间达到前后1分钟内,持续进行查询操作
|
|
验证查询结果一直正确,验证指定过期时间的分区的数据迁移到HDD
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
storage_cooldown_delta_time = 5 * 60
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown_time = (datetime.datetime.now() + delta).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
|
|
storage_cooldown_delta_time = 150
|
|
delta = datetime.timedelta(seconds=storage_cooldown_delta_time)
|
|
storage_cooldown = (datetime.datetime.now() + delta)
|
|
storage_cooldown_time = storage_cooldown.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
assert client.modify_partition(table_name, 'partition_a', storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
assert client.modify_partition(table_name, 'partition_c', storage_medium='SSD',
|
|
storage_cooldown_time=storage_cooldown_time)
|
|
|
|
while datetime.datetime.now() < storage_cooldown + delta:
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
time.sleep(5)
|
|
|
|
ret = client.show_tablet(table_name, partition_list=['partition_a', 'partition_c'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_migrate_while_loading():
|
|
"""
|
|
{
|
|
"title": "test_migrate_while_loading",
|
|
"describe": "迁移过程的同时导入,验证迁移正确,验证导入正确",
|
|
"tag": "p1,system,stability"
|
|
}
|
|
"""
|
|
"""
|
|
迁移过程的同时导入,验证迁移正确,验证导入正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k1)', 3)
|
|
assert client.create_table(table_name, DATA.schema_1,
|
|
partition_info, distribution_info)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
label = util.get_label()
|
|
assert client.batch_load(label, data_desc_list, broker=broker_info)
|
|
state = client.get_load_job_state(label)
|
|
while state != 'LOADING':
|
|
if state == 'FINISHED' or state == 'CANCELLED':
|
|
raise pytest.skip('can not get loading state')
|
|
time.sleep(1)
|
|
state = client.get_load_job_state(label)
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='HDD')
|
|
time.sleep(30 * 2)
|
|
|
|
assert client.verify(DATA.expected_data_file_list_1, table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_migrate_before_schema_change():
|
|
"""
|
|
{
|
|
"title": "test_migrate_before_schema_change",
|
|
"describe": "迁移过程的同时schema change,验证迁移正确,验证schema change正确",
|
|
"tag": "p1,system,stability"
|
|
}
|
|
"""
|
|
"""
|
|
迁移过程的同时schema change,验证迁移正确,验证schema change正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k2)', 3)
|
|
keys_desc = 'DUPLICATE KEY(k1,k2,k3,k4,k5)'
|
|
assert client.create_table(table_name, SCHEMA.partition_column_no_agg_list,
|
|
partition_info, distribution_info, keys_desc=keys_desc)
|
|
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='HDD')
|
|
|
|
column_name_list = ['k1',]
|
|
assert client.schema_change_drop_column(table_name, column_name_list, is_wait_job=True)
|
|
|
|
assert client.verify(DATA.expected_data_file_list_3, table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_migrate_after_schema_change():
|
|
"""
|
|
{
|
|
"title": "test_migrate_after_schema_change",
|
|
"describe": "schema change的同时迁移,验证迁移正确,验证schema change正确",
|
|
"tag": "p1,system,stability"
|
|
}
|
|
"""
|
|
"""
|
|
schema change的同时迁移,验证迁移正确,验证schema change正确
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client.clean(database_name)
|
|
client.create_database(database_name)
|
|
client.use(database_name)
|
|
partition_a = palo_client.Partition('partition_a', '100', storage_medium='HDD')
|
|
partition_b = palo_client.Partition('partition_b', '200', storage_medium='HDD')
|
|
partition_c = palo_client.Partition('partition_c', '300', storage_medium='HDD')
|
|
partition_d = palo_client.Partition('partition_d', '50000', storage_medium='SSD')
|
|
partition_list = [partition_a, partition_b, partition_c, partition_d]
|
|
partition_info = palo_client.PartitionInfo('k3', partition_list=partition_list)
|
|
distribution_info = palo_client.DistributionInfo('Hash(k2)', 3)
|
|
keys_desc = 'DUPLICATE KEY(k1,k2,k3,k4,k5)'
|
|
assert client.create_table(table_name, SCHEMA.partition_column_no_agg_list,
|
|
partition_info, distribution_info, keys_desc=keys_desc)
|
|
assert client.show_tables(table_name)
|
|
assert client.get_index(table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_a') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_b') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_c') == 'HDD'
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'SSD'
|
|
|
|
data_desc_list = palo_client.LoadDataInfo(DATA.file_path_1, table_name)
|
|
assert client.batch_load(util.get_label(), data_desc_list, is_wait=True, broker=broker_info)
|
|
|
|
column_name_list = ['k1',]
|
|
assert client.schema_change_drop_column(table_name, column_name_list,
|
|
is_wait_job=True, is_wait_delete_old_schema=True)
|
|
|
|
assert client.modify_partition(table_name, 'partition_d', storage_medium='HDD')
|
|
|
|
time.sleep(60)
|
|
assert client.verify(DATA.expected_data_file_list_3, table_name)
|
|
assert client.get_partition_storage_medium(table_name, 'partition_d') == 'HDD'
|
|
ret = client.show_tablet(table_name, partition_list=['partition_d'])
|
|
retry_times = 10
|
|
while retry_times > 0:
|
|
try:
|
|
time.sleep(30)
|
|
retry_times -= 1
|
|
check_tablet(ret, 'ssd')
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
if retry_times == 0:
|
|
raise pytest.skip('timeout, cannot get tablet from hdd')
|
|
client.clean(database_name)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
setup_module()
|
|
# test_ssd_all()
|
|
# test_hdd_all()
|
|
# test_ssd_table()
|
|
# test_hdd_table()
|
|
# test_ssd_hdd()
|
|
# test_add_ssd_partition()
|
|
# test_add_hdd_partition()
|
|
# test_modify_to_hdd_partition()
|
|
# test_modify_to_ssd_partition()
|
|
# test_modify_ssd_to_ssd_partition()
|
|
# test_modify_hdd_to_hdd_partition()
|
|
# test_modify_to_hdd_partition_at_cooldown_time()
|
|
# test_modify_medium_cooldown_time()
|
|
# test_modify_medium_cooldown_time_for_partitions()
|
|
# test_modify_cooldown_time()
|
|
# test_modify_invalid_cooldown_time_a()
|
|
# test_modify_invalid_cooldown_time_b()
|
|
# test_cooldown_while_select()
|
|
# test_migrate_while_loading()
|
|
test_migrate_before_schema_change()
|
|
test_migrate_after_schema_change()
|