Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
dee1fefe
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dee1fefe
编写于
9月 09, 2020
作者:
A
Alexander Tokmakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add more tests
上级
fe6d6f16
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
50 addition
and
29 deletion
+50
-29
src/Storages/StorageReplicatedMergeTree.cpp
src/Storages/StorageReplicatedMergeTree.cpp
+4
-1
tests/integration/test_cleanup_dir_after_bad_zk_conn/test.py
tests/integration/test_cleanup_dir_after_bad_zk_conn/test.py
+46
-28
未找到文件。
src/Storages/StorageReplicatedMergeTree.cpp
浏览文件 @
dee1fefe
...
...
@@ -612,7 +612,10 @@ bool StorageReplicatedMergeTree::createTableIfNotExists(const StorageMetadataPtr
return
true
;
}
throw
Exception
(
"Cannot create table, because it is created concurrently every time or because of logical error"
,
ErrorCodes
::
LOGICAL_ERROR
);
/// Do not use LOGICAL_ERROR code, because it may happen if user has specified wrong zookeeper_path
throw
Exception
(
"Cannot create table, because it is created concurrently every time "
"or because of wrong zookeeper_path "
"or because of logical error"
,
ErrorCodes
::
REPLICA_IS_ALREADY_EXIST
);
}
void
StorageReplicatedMergeTree
::
createReplica
(
const
StorageMetadataPtr
&
metadata_snapshot
)
...
...
tests/integration/test_cleanup_dir_after_bad_zk_conn/test.py
浏览文件 @
dee1fefe
import
time
import
pytest
from
helpers.cluster
import
ClickHouseCluster
from
helpers.network
import
PartitionManager
cluster
=
ClickHouseCluster
(
__file__
)
node1
=
cluster
.
add_instance
(
'node1'
,
with_zookeeper
=
True
)
@
pytest
.
fixture
(
scope
=
"module"
)
def
start_cluster
():
try
:
cluster
.
start
()
yield
cluster
finally
:
cluster
.
shutdown
()
# This tests if the data directory for a table is cleaned up if there is a Zookeeper
# connection exception during a CreateQuery operation involving ReplicatedMergeTree tables.
# Test flow is as follows:
...
...
@@ -14,31 +26,37 @@ from helpers.network import PartitionManager
# that indicates that the directory for table already exists.
# 5. Final step is to restore ZooKeeper connection and verify that
# the table creation works.
def
test_cleanup_dir_after_bad_zk_conn
():
cluster
=
ClickHouseCluster
(
__file__
)
node1
=
cluster
.
add_instance
(
'node1'
,
with_zookeeper
=
True
)
try
:
cluster
.
start
()
node1
.
query
(
"CREATE DATABASE replica;"
)
query_create
=
'''CREATE TABLE replica.test
(
id Int64,
event_time DateTime
)
Engine=ReplicatedMergeTree('/clickhouse/tables/replica/test', 'node1')
PARTITION BY toYYYYMMDD(event_time)
ORDER BY id;'''
with
PartitionManager
()
as
pm
:
pm
.
drop_instance_zk_connections
(
node1
)
time
.
sleep
(
3
)
error
=
node1
.
query_and_get_error
(
query_create
)
assert
"Poco::Exception. Code: 1000"
and
\
"All connection tries failed while connecting to ZooKeeper"
in
error
error
=
node1
.
query_and_get_error
(
query_create
)
assert
"Directory for table data data/replica/test/ already exists"
not
in
error
pm
.
restore_instance_zk_connections
(
node1
)
node1
.
query
(
query_create
)
node1
.
query
(
'''INSERT INTO replica.test VALUES (1, now())'''
)
assert
"1
\n
"
in
node1
.
query
(
'''SELECT count() from replica.test FORMAT TSV'''
)
finally
:
cluster
.
shutdown
()
def
test_cleanup_dir_after_bad_zk_conn
(
start_cluster
):
node1
.
query
(
"CREATE DATABASE replica;"
)
query_create
=
'''CREATE TABLE replica.test
(
id Int64,
event_time DateTime
)
Engine=ReplicatedMergeTree('/clickhouse/tables/replica/test', 'node1')
PARTITION BY toYYYYMMDD(event_time)
ORDER BY id;'''
with
PartitionManager
()
as
pm
:
pm
.
drop_instance_zk_connections
(
node1
)
time
.
sleep
(
3
)
error
=
node1
.
query_and_get_error
(
query_create
)
assert
"Poco::Exception. Code: 1000"
and
\
"All connection tries failed while connecting to ZooKeeper"
in
error
error
=
node1
.
query_and_get_error
(
query_create
)
assert
"Directory for table data data/replica/test/ already exists"
not
in
error
node1
.
query
(
query_create
)
node1
.
query
(
'''INSERT INTO replica.test VALUES (1, now())'''
)
assert
"1
\n
"
in
node1
.
query
(
'''SELECT count() from replica.test FORMAT TSV'''
)
def
test_cleanup_dir_after_wrong_replica_name
(
start_cluster
):
node1
.
query
(
"CREATE TABLE test2_r1 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test2/', 'r1') ORDER BY n"
)
error
=
node1
.
query_and_get_error
(
"CREATE TABLE test2_r2 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test2/', 'r1') ORDER BY n"
)
assert
"already exists"
in
error
node1
.
query
(
"CREATE TABLE test_r2 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test2/', 'r2') ORDER BY n"
)
def
test_cleanup_dir_after_wrong_zk_path
(
start_cluster
):
node1
.
query
(
"CREATE TABLE test3_r1 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test3/', 'r1') ORDER BY n"
)
error
=
node1
.
query_and_get_error
(
"CREATE TABLE test3_r2 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/', 'r2') ORDER BY n"
)
assert
"Cannot create"
in
error
node1
.
query
(
"CREATE TABLE test3_r2 (n UInt64) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test3/', 'r2') ORDER BY n"
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录