mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Merge branch 'master' into add_one_more_group
This commit is contained in:
commit
e2cb91b560
@ -19,6 +19,11 @@ KeeperStateManager::KeeperConfigurationWrapper KeeperStateManager::parseServersC
|
|||||||
Poco::Util::AbstractConfiguration::Keys keys;
|
Poco::Util::AbstractConfiguration::Keys keys;
|
||||||
config.keys(config_prefix + ".raft_configuration", keys);
|
config.keys(config_prefix + ".raft_configuration", keys);
|
||||||
|
|
||||||
|
/// Sometimes (especially in cloud envs) users can provide incorrect
|
||||||
|
/// configuration with duplicated raft ids or endpoints. We check them
|
||||||
|
/// on config parsing stage and never commit to quorum.
|
||||||
|
std::unordered_map<std::string, int> check_duplicated_hostnames;
|
||||||
|
|
||||||
size_t total_servers = 0;
|
size_t total_servers = 0;
|
||||||
for (const auto & server_key : keys)
|
for (const auto & server_key : keys)
|
||||||
{
|
{
|
||||||
@ -37,6 +42,24 @@ KeeperStateManager::KeeperConfigurationWrapper KeeperStateManager::parseServersC
|
|||||||
result.servers_start_as_followers.insert(new_server_id);
|
result.servers_start_as_followers.insert(new_server_id);
|
||||||
|
|
||||||
auto endpoint = hostname + ":" + std::to_string(port);
|
auto endpoint = hostname + ":" + std::to_string(port);
|
||||||
|
if (check_duplicated_hostnames.count(endpoint))
|
||||||
|
{
|
||||||
|
throw Exception(ErrorCodes::RAFT_ERROR, "Raft config contain duplicate endpoints: "
|
||||||
|
"endpoint {} has been already added with id {}, but going to add it one more time with id {}",
|
||||||
|
endpoint, check_duplicated_hostnames[endpoint], new_server_id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/// Fullscan to check duplicated ids
|
||||||
|
for (const auto & [id_endpoint, id] : check_duplicated_hostnames)
|
||||||
|
{
|
||||||
|
if (new_server_id == id)
|
||||||
|
throw Exception(ErrorCodes::RAFT_ERROR, "Raft config contain duplicate ids: id {} has been already added with endpoint {}, "
|
||||||
|
"but going to add it one more time with endpoint {}", id, id_endpoint, endpoint);
|
||||||
|
}
|
||||||
|
check_duplicated_hostnames.emplace(endpoint, new_server_id);
|
||||||
|
}
|
||||||
|
|
||||||
auto peer_config = nuraft::cs_new<nuraft::srv_config>(new_server_id, 0, endpoint, "", !can_become_leader, priority);
|
auto peer_config = nuraft::cs_new<nuraft::srv_config>(new_server_id, 0, endpoint, "", !can_become_leader, priority);
|
||||||
if (my_server_id == new_server_id)
|
if (my_server_id == new_server_id)
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
IMAGE_NAME = 'clickhouse/fuzzer'
|
IMAGE_NAME = 'clickhouse/fuzzer'
|
||||||
|
|
||||||
@ -47,6 +48,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
docker_image = get_image_with_version(temp_path, IMAGE_NAME)
|
docker_image = get_image_with_version(temp_path, IMAGE_NAME)
|
||||||
|
|
||||||
build_name = get_build_name_for_check(check_name)
|
build_name = get_build_name_for_check(check_name)
|
||||||
|
@ -85,6 +85,30 @@ def build_clickhouse(packager_cmd, logs_path):
|
|||||||
logging.info("Build failed")
|
logging.info("Build failed")
|
||||||
return build_log_path, retcode == 0
|
return build_log_path, retcode == 0
|
||||||
|
|
||||||
|
|
||||||
|
def get_build_results_if_exists(s3_helper, s3_prefix):
|
||||||
|
try:
|
||||||
|
content = s3_helper.list_prefix(s3_prefix)
|
||||||
|
return content
|
||||||
|
except Exception as ex:
|
||||||
|
logging.info("Got exception %s listing %s", ex, s3_prefix)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def create_json_artifact(temp_path, build_name, log_url, build_urls, build_config, elapsed, success):
|
||||||
|
subprocess.check_call(f"echo 'BUILD_NAME=build_urls_{build_name}' >> $GITHUB_ENV", shell=True)
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"log_url": log_url,
|
||||||
|
"build_urls": build_urls,
|
||||||
|
"build_config": build_config,
|
||||||
|
"elapsed_seconds": elapsed,
|
||||||
|
"status": success,
|
||||||
|
}
|
||||||
|
|
||||||
|
with open(os.path.join(temp_path, "build_urls_" + build_name + '.json'), 'w') as build_links:
|
||||||
|
json.dump(result, build_links)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
repo_path = os.getenv("REPO_COPY", os.path.abspath("../../"))
|
repo_path = os.getenv("REPO_COPY", os.path.abspath("../../"))
|
||||||
@ -104,12 +128,41 @@ if __name__ == "__main__":
|
|||||||
logging.info("Repo copy path %s", repo_path)
|
logging.info("Repo copy path %s", repo_path)
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
s3_helper = S3Helper('https://s3.amazonaws.com')
|
||||||
|
|
||||||
|
version = get_version_from_repo(repo_path)
|
||||||
|
release_or_pr = None
|
||||||
|
if 'release' in pr_info.labels or 'release-lts' in pr_info.labels:
|
||||||
|
# for release pull requests we use branch names prefixes, not pr numbers
|
||||||
|
release_or_pr = pr_info.head_ref
|
||||||
|
elif pr_info.number == 0:
|
||||||
|
# for pushes to master - major version
|
||||||
|
release_or_pr = ".".join(version.as_tuple()[:2])
|
||||||
|
else:
|
||||||
|
# PR number for anything else
|
||||||
|
release_or_pr = str(pr_info.number)
|
||||||
|
|
||||||
|
s3_path_prefix = "/".join((release_or_pr, pr_info.sha, build_name))
|
||||||
|
|
||||||
|
# If this is rerun, then we try to find already created artifacts and just
|
||||||
|
# put them as github actions artifcat (result)
|
||||||
|
build_results = get_build_results_if_exists(s3_helper, s3_path_prefix)
|
||||||
|
if build_results is not None and len(build_results) > 0:
|
||||||
|
logging.info("Some build results found %s", build_results)
|
||||||
|
build_urls = []
|
||||||
|
log_url = ''
|
||||||
|
for url in build_results:
|
||||||
|
if 'build_log.log' in url:
|
||||||
|
log_url = 'https://s3.amazonaws.com/clickhouse-builds/' + url.replace('+', '%2B').replace(' ', '%20')
|
||||||
|
else:
|
||||||
|
build_urls.append('https://s3.amazonaws.com/clickhouse-builds/' + url.replace('+', '%2B').replace(' ', '%20'))
|
||||||
|
create_json_artifact(temp_path, build_name, log_url, build_urls, build_config, 0, True)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
image_name = get_image_name(build_config)
|
image_name = get_image_name(build_config)
|
||||||
docker_image = get_image_with_version(os.getenv("IMAGES_PATH"), image_name)
|
docker_image = get_image_with_version(os.getenv("IMAGES_PATH"), image_name)
|
||||||
image_version = docker_image.version
|
image_version = docker_image.version
|
||||||
|
|
||||||
version = get_version_from_repo(repo_path)
|
|
||||||
logging.info("Got version from repo %s", version.get_version_string())
|
logging.info("Got version from repo %s", version.get_version_string())
|
||||||
|
|
||||||
version_type = 'testing'
|
version_type = 'testing'
|
||||||
@ -121,14 +174,12 @@ if __name__ == "__main__":
|
|||||||
logging.info("Updated local files with version")
|
logging.info("Updated local files with version")
|
||||||
|
|
||||||
logging.info("Build short name %s", build_name)
|
logging.info("Build short name %s", build_name)
|
||||||
subprocess.check_call(f"echo 'BUILD_NAME=build_urls_{build_name}' >> $GITHUB_ENV", shell=True)
|
|
||||||
|
|
||||||
build_output_path = os.path.join(temp_path, build_name)
|
build_output_path = os.path.join(temp_path, build_name)
|
||||||
if not os.path.exists(build_output_path):
|
if not os.path.exists(build_output_path):
|
||||||
os.makedirs(build_output_path)
|
os.makedirs(build_output_path)
|
||||||
|
|
||||||
ccache_path = os.path.join(caches_path, build_name + '_ccache')
|
ccache_path = os.path.join(caches_path, build_name + '_ccache')
|
||||||
s3_helper = S3Helper('https://s3.amazonaws.com')
|
|
||||||
|
|
||||||
logging.info("Will try to fetch cache for our build")
|
logging.info("Will try to fetch cache for our build")
|
||||||
get_ccache_if_not_exists(ccache_path, s3_helper, pr_info.number, temp_path)
|
get_ccache_if_not_exists(ccache_path, s3_helper, pr_info.number, temp_path)
|
||||||
@ -155,19 +206,6 @@ if __name__ == "__main__":
|
|||||||
logging.info("Will upload cache")
|
logging.info("Will upload cache")
|
||||||
upload_ccache(ccache_path, s3_helper, pr_info.number, temp_path)
|
upload_ccache(ccache_path, s3_helper, pr_info.number, temp_path)
|
||||||
|
|
||||||
release_or_pr = None
|
|
||||||
if 'release' in pr_info.labels or 'release-lts' in pr_info.labels:
|
|
||||||
# for release pull requests we use branch names prefixes, not pr numbers
|
|
||||||
release_or_pr = pr_info.head_ref
|
|
||||||
elif pr_info.number == 0:
|
|
||||||
# for pushes to master - major version
|
|
||||||
release_or_pr = ".".join(version.as_tuple()[:2])
|
|
||||||
else:
|
|
||||||
# PR number for anything else
|
|
||||||
release_or_pr = str(pr_info.number)
|
|
||||||
|
|
||||||
s3_path_prefix = "/".join((release_or_pr, pr_info.sha, build_name))
|
|
||||||
|
|
||||||
if os.path.exists(log_path):
|
if os.path.exists(log_path):
|
||||||
log_url = s3_helper.upload_build_file_to_s3(log_path, s3_path_prefix + "/" + os.path.basename(log_path))
|
log_url = s3_helper.upload_build_file_to_s3(log_path, s3_path_prefix + "/" + os.path.basename(log_path))
|
||||||
logging.info("Log url %s", log_url)
|
logging.info("Log url %s", log_url)
|
||||||
@ -179,19 +217,9 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
print("::notice ::Build URLs: {}".format('\n'.join(build_urls)))
|
print("::notice ::Build URLs: {}".format('\n'.join(build_urls)))
|
||||||
|
|
||||||
result = {
|
|
||||||
"log_url": log_url,
|
|
||||||
"build_urls": build_urls,
|
|
||||||
"build_config": build_config,
|
|
||||||
"elapsed_seconds": elapsed,
|
|
||||||
"status": success,
|
|
||||||
}
|
|
||||||
|
|
||||||
print("::notice ::Log URL: {}".format(log_url))
|
print("::notice ::Log URL: {}".format(log_url))
|
||||||
|
|
||||||
with open(os.path.join(temp_path, "build_urls_" + build_name + '.json'), 'w') as build_links:
|
create_json_artifact(temp_path, build_name, log_url, build_urls, build_config, elapsed, success)
|
||||||
json.dump(result, build_links)
|
|
||||||
|
|
||||||
# Fail build job if not successeded
|
# Fail build job if not successeded
|
||||||
if not success:
|
if not success:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -11,6 +11,7 @@ from get_robot_token import get_best_robot_token
|
|||||||
from pr_info import PRInfo, get_event
|
from pr_info import PRInfo, get_event
|
||||||
from commit_status_helper import get_commit
|
from commit_status_helper import get_commit
|
||||||
from ci_config import CI_CONFIG
|
from ci_config import CI_CONFIG
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
class BuildResult():
|
class BuildResult():
|
||||||
def __init__(self, compiler, build_type, sanitizer, bundled, splitted, status, elapsed_seconds, with_coverage):
|
def __init__(self, compiler, build_type, sanitizer, bundled, splitted, status, elapsed_seconds, with_coverage):
|
||||||
@ -83,6 +84,13 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
build_check_name = sys.argv[1]
|
build_check_name = sys.argv[1]
|
||||||
|
|
||||||
|
gh = Github(get_best_robot_token())
|
||||||
|
pr_info = PRInfo(get_event())
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, build_check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
reports_order = CI_CONFIG["builds_report_config"][build_check_name]
|
reports_order = CI_CONFIG["builds_report_config"][build_check_name]
|
||||||
logging.info("My reports list %s", reports_order)
|
logging.info("My reports list %s", reports_order)
|
||||||
|
|
||||||
@ -114,7 +122,6 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
logging.info("Totally got %s results", len(build_results))
|
logging.info("Totally got %s results", len(build_results))
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
|
||||||
s3_helper = S3Helper('https://s3.amazonaws.com')
|
s3_helper = S3Helper('https://s3.amazonaws.com')
|
||||||
|
|
||||||
pr_info = PRInfo(get_event())
|
pr_info = PRInfo(get_event())
|
||||||
@ -161,7 +168,7 @@ if __name__ == "__main__":
|
|||||||
ok_builds += 1
|
ok_builds += 1
|
||||||
|
|
||||||
if ok_builds == 0:
|
if ok_builds == 0:
|
||||||
summary_status = "failure"
|
summary_status = "error"
|
||||||
|
|
||||||
description = "{}/{} builds are OK".format(ok_builds, total_builds)
|
description = "{}/{} builds are OK".format(ok_builds, total_builds)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ from distutils.version import StrictVersion
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
from github import Github
|
from github import Github
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ from docker_pull_helper import get_images_with_versions
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
IMAGE_UBUNTU = "clickhouse/test-old-ubuntu"
|
IMAGE_UBUNTU = "clickhouse/test-old-ubuntu"
|
||||||
IMAGE_CENTOS = "clickhouse/test-old-centos"
|
IMAGE_CENTOS = "clickhouse/test-old-centos"
|
||||||
@ -109,6 +111,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, CHECK_NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
docker_images = get_images_with_versions(reports_path, [IMAGE_CENTOS, IMAGE_UBUNTU])
|
docker_images = get_images_with_versions(reports_path, [IMAGE_CENTOS, IMAGE_UBUNTU])
|
||||||
|
|
||||||
packages_path = os.path.join(temp_path, "packages")
|
packages_path = os.path.join(temp_path, "packages")
|
||||||
|
@ -12,6 +12,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status, get_commit
|
from commit_status_helper import post_commit_status, get_commit
|
||||||
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
|
|
||||||
NAME = "Docs Check (actions)"
|
NAME = "Docs Check (actions)"
|
||||||
@ -27,6 +28,12 @@ if __name__ == "__main__":
|
|||||||
pr_info = PRInfo(get_event(), need_changed_files=True)
|
pr_info = PRInfo(get_event(), need_changed_files=True)
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if not pr_info.has_changes_in_documentation():
|
if not pr_info.has_changes_in_documentation():
|
||||||
logging.info ("No changes in documentation")
|
logging.info ("No changes in documentation")
|
||||||
commit = get_commit(gh, pr_info.sha)
|
commit = get_commit(gh, pr_info.sha)
|
||||||
|
@ -15,6 +15,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
NAME = 'Fast test (actions)'
|
NAME = 'Fast test (actions)'
|
||||||
|
|
||||||
@ -67,6 +68,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
docker_image = get_image_with_version(temp_path, 'clickhouse/fasttest')
|
docker_image = get_image_with_version(temp_path, 'clickhouse/fasttest')
|
||||||
|
|
||||||
s3_helper = S3Helper('https://s3.amazonaws.com')
|
s3_helper = S3Helper('https://s3.amazonaws.com')
|
||||||
|
@ -17,6 +17,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status, get_commit
|
from commit_status_helper import post_commit_status, get_commit
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
def get_additional_envs(check_name):
|
def get_additional_envs(check_name):
|
||||||
if 'DatabaseReplicated' in check_name:
|
if 'DatabaseReplicated' in check_name:
|
||||||
@ -116,12 +117,18 @@ if __name__ == "__main__":
|
|||||||
check_name = sys.argv[1]
|
check_name = sys.argv[1]
|
||||||
kill_timeout = int(sys.argv[2])
|
kill_timeout = int(sys.argv[2])
|
||||||
flaky_check = 'flaky' in check_name.lower()
|
flaky_check = 'flaky' in check_name.lower()
|
||||||
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
pr_info = PRInfo(get_event(), need_changed_files=flaky_check)
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if not os.path.exists(temp_path):
|
if not os.path.exists(temp_path):
|
||||||
os.makedirs(temp_path)
|
os.makedirs(temp_path)
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
|
||||||
pr_info = PRInfo(get_event(), need_changed_files=flaky_check)
|
|
||||||
tests_to_run = []
|
tests_to_run = []
|
||||||
if flaky_check:
|
if flaky_check:
|
||||||
tests_to_run = get_tests_to_run(pr_info)
|
tests_to_run = get_tests_to_run(pr_info)
|
||||||
@ -130,7 +137,6 @@ if __name__ == "__main__":
|
|||||||
commit.create_status(context=check_name, description='Not found changed stateless tests', state='success')
|
commit.create_status(context=check_name, description='Not found changed stateless tests', state='success')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
image_name = get_image_name(check_name)
|
image_name = get_image_name(check_name)
|
||||||
docker_image = get_image_with_version(reports_path, image_name)
|
docker_image = get_image_with_version(reports_path, image_name)
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ from docker_pull_helper import get_images_with_versions
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
|
|
||||||
DOWNLOAD_RETRIES_COUNT = 5
|
DOWNLOAD_RETRIES_COUNT = 5
|
||||||
@ -113,6 +114,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
images = get_images_with_versions(temp_path, IMAGES)
|
images = get_images_with_versions(temp_path, IMAGES)
|
||||||
images_with_versions = {i.name: i.version for i in images}
|
images_with_versions = {i.name: i.version for i in images}
|
||||||
result_path = os.path.join(temp_path, "output_dir")
|
result_path = os.path.join(temp_path, "output_dir")
|
||||||
|
@ -7,6 +7,30 @@ import sys
|
|||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
import boto3
|
||||||
|
|
||||||
|
def get_dead_runners_in_ec2(runners):
|
||||||
|
ids = {runner.name: runner for runner in runners if runner.offline == True and runner.busy == False}
|
||||||
|
if not ids:
|
||||||
|
return []
|
||||||
|
|
||||||
|
client = boto3.client('ec2')
|
||||||
|
|
||||||
|
print("Checking ids", list(ids.keys()))
|
||||||
|
instances_statuses = client.describe_instance_status(InstanceIds=list(ids.keys()))
|
||||||
|
found_instances = set([])
|
||||||
|
print("Response", instances_statuses)
|
||||||
|
for instance_status in instances_statuses['InstanceStatuses']:
|
||||||
|
if instance_status['InstanceState']['Name'] in ('pending', 'running'):
|
||||||
|
found_instances.add(instance_status['InstanceId'])
|
||||||
|
|
||||||
|
print("Found instances", found_instances)
|
||||||
|
result_to_delete = []
|
||||||
|
for instance_id, runner in ids.items():
|
||||||
|
if instance_id not in found_instances:
|
||||||
|
print("Instance", instance_id, "is not alive, going to remove it")
|
||||||
|
result_to_delete.append(runner)
|
||||||
|
return result_to_delete
|
||||||
|
|
||||||
def get_key_and_app_from_aws():
|
def get_key_and_app_from_aws():
|
||||||
import boto3
|
import boto3
|
||||||
@ -23,7 +47,7 @@ def get_key_and_app_from_aws():
|
|||||||
|
|
||||||
def handler(event, context):
|
def handler(event, context):
|
||||||
private_key, app_id = get_key_and_app_from_aws()
|
private_key, app_id = get_key_and_app_from_aws()
|
||||||
main(private_key, app_id, True, False)
|
main(private_key, app_id, True, True)
|
||||||
|
|
||||||
def get_installation_id(jwt_token):
|
def get_installation_id(jwt_token):
|
||||||
headers = {
|
headers = {
|
||||||
@ -74,6 +98,7 @@ def list_runners(access_token):
|
|||||||
desc = RunnerDescription(id=runner['id'], name=runner['name'], tags=tags,
|
desc = RunnerDescription(id=runner['id'], name=runner['name'], tags=tags,
|
||||||
offline=runner['status']=='offline', busy=runner['busy'])
|
offline=runner['status']=='offline', busy=runner['busy'])
|
||||||
result.append(desc)
|
result.append(desc)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def group_runners_by_tag(listed_runners):
|
def group_runners_by_tag(listed_runners):
|
||||||
@ -95,10 +120,9 @@ def group_runners_by_tag(listed_runners):
|
|||||||
|
|
||||||
|
|
||||||
def push_metrics_to_cloudwatch(listed_runners, namespace):
|
def push_metrics_to_cloudwatch(listed_runners, namespace):
|
||||||
import boto3
|
|
||||||
client = boto3.client('cloudwatch')
|
client = boto3.client('cloudwatch')
|
||||||
metrics_data = []
|
metrics_data = []
|
||||||
busy_runners = sum(1 for runner in listed_runners if runner.busy)
|
busy_runners = sum(1 for runner in listed_runners if runner.busy and not runner.offline)
|
||||||
metrics_data.append({
|
metrics_data.append({
|
||||||
'MetricName': 'BusyRunners',
|
'MetricName': 'BusyRunners',
|
||||||
'Value': busy_runners,
|
'Value': busy_runners,
|
||||||
@ -154,6 +178,7 @@ def main(github_secret_key, github_app_id, push_to_cloudwatch, delete_offline_ru
|
|||||||
grouped_runners = group_runners_by_tag(runners)
|
grouped_runners = group_runners_by_tag(runners)
|
||||||
for group, group_runners in grouped_runners.items():
|
for group, group_runners in grouped_runners.items():
|
||||||
if push_to_cloudwatch:
|
if push_to_cloudwatch:
|
||||||
|
print(group)
|
||||||
push_metrics_to_cloudwatch(group_runners, 'RunnersMetrics/' + group)
|
push_metrics_to_cloudwatch(group_runners, 'RunnersMetrics/' + group)
|
||||||
else:
|
else:
|
||||||
print(group, f"({len(group_runners)})")
|
print(group, f"({len(group_runners)})")
|
||||||
@ -162,12 +187,10 @@ def main(github_secret_key, github_app_id, push_to_cloudwatch, delete_offline_ru
|
|||||||
|
|
||||||
if delete_offline_runners:
|
if delete_offline_runners:
|
||||||
print("Going to delete offline runners")
|
print("Going to delete offline runners")
|
||||||
for runner in runners:
|
dead_runners = get_dead_runners_in_ec2(runners)
|
||||||
if runner.offline and not runner.busy:
|
for runner in dead_runners:
|
||||||
print("Deleting runner", runner)
|
print("Deleting runner", runner)
|
||||||
delete_runner(access_token, runner)
|
delete_runner(access_token, runner)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Get list of runners and their states')
|
parser = argparse.ArgumentParser(description='Get list of runners and their states')
|
||||||
|
@ -15,6 +15,7 @@ from upload_result_helper import upload_results
|
|||||||
from commit_status_helper import get_commit
|
from commit_status_helper import get_commit
|
||||||
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
NAME = 'PVS Studio (actions)'
|
NAME = 'PVS Studio (actions)'
|
||||||
LICENCE_NAME = 'Free license: ClickHouse, Yandex'
|
LICENCE_NAME = 'Free license: ClickHouse, Yandex'
|
||||||
@ -49,6 +50,10 @@ if __name__ == "__main__":
|
|||||||
logging.info("Repo copy path %s", repo_path)
|
logging.info("Repo copy path %s", repo_path)
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
images_path = os.path.join(temp_path, 'changed_images.json')
|
images_path = os.path.join(temp_path, 'changed_images.json')
|
||||||
docker_image = 'clickhouse/pvs-test'
|
docker_image = 'clickhouse/pvs-test'
|
||||||
|
35
tests/ci/rerun_helper.py
Normal file
35
tests/ci/rerun_helper.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from commit_status_helper import get_commit
|
||||||
|
|
||||||
|
def _filter_statuses(statuses):
|
||||||
|
"""
|
||||||
|
Squash statuses to latest state
|
||||||
|
1. context="first", state="success", update_time=1
|
||||||
|
2. context="second", state="success", update_time=2
|
||||||
|
3. context="first", stat="failure", update_time=3
|
||||||
|
=========>
|
||||||
|
1. context="second", state="success"
|
||||||
|
2. context="first", stat="failure"
|
||||||
|
"""
|
||||||
|
filt = {}
|
||||||
|
for status in sorted(statuses, key=lambda x: x.updated_at):
|
||||||
|
filt[status.context] = status
|
||||||
|
return filt.values()
|
||||||
|
|
||||||
|
|
||||||
|
class RerunHelper:
|
||||||
|
|
||||||
|
def __init__(self, gh, pr_info, check_name):
|
||||||
|
self.gh = gh
|
||||||
|
self.pr_info = pr_info
|
||||||
|
self.check_name = check_name
|
||||||
|
self.pygh_commit = get_commit(gh, self.pr_info.sha)
|
||||||
|
self.statuses = _filter_statuses(self.pygh_commit.get_statuses())
|
||||||
|
|
||||||
|
def is_already_finished_by_status(self):
|
||||||
|
# currently we agree even for failed statuses
|
||||||
|
for status in self.statuses:
|
||||||
|
if self.check_name in status.context and status.state in ('success', 'failure'):
|
||||||
|
return True
|
||||||
|
return False
|
@ -3,6 +3,7 @@
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
from github import Github
|
from github import Github
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
|
|
||||||
DOCKER_IMAGE = "clickhouse/split-build-smoke-test"
|
DOCKER_IMAGE = "clickhouse/split-build-smoke-test"
|
||||||
@ -66,6 +68,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, CHECK_NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
for root, _, files in os.walk(reports_path):
|
for root, _, files in os.walk(reports_path):
|
||||||
for f in files:
|
for f in files:
|
||||||
if f == 'changed_images.json':
|
if f == 'changed_images.json':
|
||||||
|
@ -17,6 +17,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
|
|
||||||
def get_run_command(build_path, result_folder, server_log_folder, image):
|
def get_run_command(build_path, result_folder, server_log_folder, image):
|
||||||
@ -80,6 +81,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
docker_image = get_image_with_version(reports_path, 'clickhouse/stress-test')
|
docker_image = get_image_with_version(reports_path, 'clickhouse/stress-test')
|
||||||
|
|
||||||
packages_path = os.path.join(temp_path, "packages")
|
packages_path = os.path.join(temp_path, "packages")
|
||||||
|
@ -3,6 +3,8 @@ import logging
|
|||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
import csv
|
import csv
|
||||||
|
import sys
|
||||||
|
|
||||||
from github import Github
|
from github import Github
|
||||||
from s3_helper import S3Helper
|
from s3_helper import S3Helper
|
||||||
from pr_info import PRInfo, get_event
|
from pr_info import PRInfo, get_event
|
||||||
@ -12,7 +14,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
NAME = "Style Check (actions)"
|
NAME = "Style Check (actions)"
|
||||||
|
|
||||||
@ -56,11 +58,16 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
pr_info = PRInfo(get_event())
|
pr_info = PRInfo(get_event())
|
||||||
|
|
||||||
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, NAME)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if not os.path.exists(temp_path):
|
if not os.path.exists(temp_path):
|
||||||
os.makedirs(temp_path)
|
os.makedirs(temp_path)
|
||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
|
||||||
|
|
||||||
docker_image = get_image_with_version(temp_path, 'clickhouse/style-test')
|
docker_image = get_image_with_version(temp_path, 'clickhouse/style-test')
|
||||||
s3_helper = S3Helper('https://s3.amazonaws.com')
|
s3_helper = S3Helper('https://s3.amazonaws.com')
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ def delete_runner(access_token, runner):
|
|||||||
|
|
||||||
response = requests.delete(f"https://api.github.com/orgs/ClickHouse/actions/runners/{runner.id}", headers=headers)
|
response = requests.delete(f"https://api.github.com/orgs/ClickHouse/actions/runners/{runner.id}", headers=headers)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
print(f"Response code deleting {runner.name} is {response.status_code}")
|
print(f"Response code deleting {runner.name} with id {runner.id} is {response.status_code}")
|
||||||
return response.status_code == 204
|
return response.status_code == 204
|
||||||
|
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ def main(github_secret_key, github_app_id, event):
|
|||||||
print("Going to delete runners:", ', '.join([runner.name for runner in to_delete_runners]))
|
print("Going to delete runners:", ', '.join([runner.name for runner in to_delete_runners]))
|
||||||
for runner in to_delete_runners:
|
for runner in to_delete_runners:
|
||||||
if delete_runner(access_token, runner):
|
if delete_runner(access_token, runner):
|
||||||
print(f"Runner {runner.name} successfuly deleted from github")
|
print(f"Runner with name {runner.name} and id {runner.id} successfuly deleted from github")
|
||||||
instances_to_kill.append(runner.name)
|
instances_to_kill.append(runner.name)
|
||||||
else:
|
else:
|
||||||
print(f"Cannot delete {runner.name} from github")
|
print(f"Cannot delete {runner.name} from github")
|
||||||
|
@ -16,6 +16,7 @@ from docker_pull_helper import get_image_with_version
|
|||||||
from commit_status_helper import post_commit_status
|
from commit_status_helper import post_commit_status
|
||||||
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
from clickhouse_helper import ClickHouseHelper, mark_flaky_tests, prepare_tests_results_for_clickhouse
|
||||||
from stopwatch import Stopwatch
|
from stopwatch import Stopwatch
|
||||||
|
from rerun_helper import RerunHelper
|
||||||
|
|
||||||
|
|
||||||
IMAGE_NAME = 'clickhouse/unit-test'
|
IMAGE_NAME = 'clickhouse/unit-test'
|
||||||
@ -105,6 +106,11 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gh = Github(get_best_robot_token())
|
gh = Github(get_best_robot_token())
|
||||||
|
|
||||||
|
rerun_helper = RerunHelper(gh, pr_info, check_name)
|
||||||
|
if rerun_helper.is_already_finished_by_status():
|
||||||
|
logging.info("Check is already finished according to github status, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
docker_image = get_image_with_version(reports_path, IMAGE_NAME)
|
docker_image = get_image_with_version(reports_path, IMAGE_NAME)
|
||||||
|
|
||||||
download_unit_tests(check_name, reports_path, temp_path)
|
download_unit_tests(check_name, reports_path, temp_path)
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
#!/usr/bin/env python3
|
@ -0,0 +1,22 @@
|
|||||||
|
<clickhouse>
|
||||||
|
<keeper_server>
|
||||||
|
<tcp_port>9181</tcp_port>
|
||||||
|
<server_id>1</server_id>
|
||||||
|
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
|
||||||
|
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
|
||||||
|
|
||||||
|
<coordination_settings>
|
||||||
|
<operation_timeout_ms>5000</operation_timeout_ms>
|
||||||
|
<session_timeout_ms>10000</session_timeout_ms>
|
||||||
|
<raft_logs_level>trace</raft_logs_level>
|
||||||
|
</coordination_settings>
|
||||||
|
|
||||||
|
<raft_configuration>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>node1</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
</raft_configuration>
|
||||||
|
</keeper_server>
|
||||||
|
</clickhouse>
|
119
tests/integration/test_keeper_incorrect_config/test.py
Normal file
119
tests/integration/test_keeper_incorrect_config/test.py
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from helpers.cluster import ClickHouseCluster
|
||||||
|
|
||||||
|
cluster = ClickHouseCluster(__file__)
|
||||||
|
node1 = cluster.add_instance('node1', main_configs=['configs/enable_keeper1.xml'], stay_alive=True)
|
||||||
|
|
||||||
|
@pytest.fixture(scope="module")
|
||||||
|
def started_cluster():
|
||||||
|
try:
|
||||||
|
cluster.start()
|
||||||
|
|
||||||
|
yield cluster
|
||||||
|
|
||||||
|
finally:
|
||||||
|
cluster.shutdown()
|
||||||
|
|
||||||
|
|
||||||
|
DUPLICATE_ID_CONFIG = """
|
||||||
|
<clickhouse>
|
||||||
|
<keeper_server>
|
||||||
|
<tcp_port>9181</tcp_port>
|
||||||
|
<server_id>1</server_id>
|
||||||
|
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
|
||||||
|
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
|
||||||
|
|
||||||
|
<coordination_settings>
|
||||||
|
<operation_timeout_ms>5000</operation_timeout_ms>
|
||||||
|
<session_timeout_ms>10000</session_timeout_ms>
|
||||||
|
<raft_logs_level>trace</raft_logs_level>
|
||||||
|
</coordination_settings>
|
||||||
|
|
||||||
|
<raft_configuration>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>node1</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>node2</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
</raft_configuration>
|
||||||
|
</keeper_server>
|
||||||
|
</clickhouse>
|
||||||
|
"""
|
||||||
|
|
||||||
|
DUPLICATE_ENDPOINT_CONFIG = """
|
||||||
|
<clickhouse>
|
||||||
|
<keeper_server>
|
||||||
|
<tcp_port>9181</tcp_port>
|
||||||
|
<server_id>1</server_id>
|
||||||
|
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
|
||||||
|
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
|
||||||
|
|
||||||
|
<coordination_settings>
|
||||||
|
<operation_timeout_ms>5000</operation_timeout_ms>
|
||||||
|
<session_timeout_ms>10000</session_timeout_ms>
|
||||||
|
<raft_logs_level>trace</raft_logs_level>
|
||||||
|
</coordination_settings>
|
||||||
|
|
||||||
|
<raft_configuration>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>node1</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>2</id>
|
||||||
|
<hostname>node1</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
</raft_configuration>
|
||||||
|
</keeper_server>
|
||||||
|
</clickhouse>
|
||||||
|
"""
|
||||||
|
|
||||||
|
NORMAL_CONFIG = """
|
||||||
|
<clickhouse>
|
||||||
|
<keeper_server>
|
||||||
|
<tcp_port>9181</tcp_port>
|
||||||
|
<server_id>1</server_id>
|
||||||
|
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
|
||||||
|
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
|
||||||
|
|
||||||
|
<coordination_settings>
|
||||||
|
<operation_timeout_ms>5000</operation_timeout_ms>
|
||||||
|
<session_timeout_ms>10000</session_timeout_ms>
|
||||||
|
<raft_logs_level>trace</raft_logs_level>
|
||||||
|
</coordination_settings>
|
||||||
|
|
||||||
|
<raft_configuration>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>node1</hostname>
|
||||||
|
<port>9234</port>
|
||||||
|
</server>
|
||||||
|
</raft_configuration>
|
||||||
|
</keeper_server>
|
||||||
|
</clickhouse>
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_duplicate_endpoint(started_cluster):
|
||||||
|
node1.stop_clickhouse()
|
||||||
|
node1.replace_config("/etc/clickhouse-server/config.d/enable_keeper1.xml", DUPLICATE_ENDPOINT_CONFIG)
|
||||||
|
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
node1.start_clickhouse(start_wait_sec=10)
|
||||||
|
|
||||||
|
node1.replace_config("/etc/clickhouse-server/config.d/enable_keeper1.xml", DUPLICATE_ID_CONFIG)
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
node1.start_clickhouse(start_wait_sec=10)
|
||||||
|
|
||||||
|
node1.replace_config("/etc/clickhouse-server/config.d/enable_keeper1.xml", NORMAL_CONFIG)
|
||||||
|
node1.start_clickhouse()
|
||||||
|
|
||||||
|
assert node1.query("SELECT 1") == "1\n"
|
@ -238,6 +238,8 @@ def create_table_like_with_materialize_mysql_database(clickhouse_node, mysql_nod
|
|||||||
clickhouse_node.query(
|
clickhouse_node.query(
|
||||||
f"CREATE DATABASE create_like ENGINE = MaterializeMySQL('{service_name}:3306', 'create_like', 'root', 'clickhouse')")
|
f"CREATE DATABASE create_like ENGINE = MaterializeMySQL('{service_name}:3306', 'create_like', 'root', 'clickhouse')")
|
||||||
mysql_node.query("CREATE TABLE create_like.t2 LIKE create_like.t1")
|
mysql_node.query("CREATE TABLE create_like.t2 LIKE create_like.t1")
|
||||||
|
check_query(clickhouse_node, "SHOW TABLES FROM create_like", "t1\nt2\n")
|
||||||
|
|
||||||
mysql_node.query("USE create_like")
|
mysql_node.query("USE create_like")
|
||||||
mysql_node.query("CREATE TABLE t3 LIKE create_like2.t1")
|
mysql_node.query("CREATE TABLE t3 LIKE create_like2.t1")
|
||||||
mysql_node.query("CREATE TABLE t4 LIKE t1")
|
mysql_node.query("CREATE TABLE t4 LIKE t1")
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 'ClickHouse v21.11 Released'
|
title: 'ClickHouse v21.11 Released'
|
||||||
image: 'https://blog-images.clickhouse.com/en/2021/clickhouse-v21-11/featured.jpg'
|
image: 'https://blog-images.clickhouse.com/en/2021/clickhouse-v21-11/featured-dog.jpg'
|
||||||
date: '2021-11-11'
|
date: '2021-11-11'
|
||||||
author: '[Rich Raposa](https://github.com/rfraposa), [Alexey Milovidov](https://github.com/alexey-milovidov)'
|
author: '[Rich Raposa](https://github.com/rfraposa), [Alexey Milovidov](https://github.com/alexey-milovidov)'
|
||||||
tags: ['company', 'community']
|
tags: ['company', 'community']
|
||||||
|
Loading…
Reference in New Issue
Block a user