Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
199d8734
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,发现更多精彩内容 >>
提交
199d8734
编写于
9月 07, 2018
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed race condition in DROP/CREATE MergeTree tables [#CLICKHOUSE-3939]
上级
836bf136
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
38 addition
and
4 deletion
+38
-4
dbms/src/Common/CurrentThread.h
dbms/src/Common/CurrentThread.h
+0
-1
dbms/src/Interpreters/InterpreterCreateQuery.cpp
dbms/src/Interpreters/InterpreterCreateQuery.cpp
+11
-2
dbms/src/Interpreters/InterpreterDropQuery.cpp
dbms/src/Interpreters/InterpreterDropQuery.cpp
+1
-1
dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.reference
...ueries/0_stateless/00705_drop_create_merge_tree.reference
+1
-0
dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh
...tests/queries/0_stateless/00705_drop_create_merge_tree.sh
+25
-0
未找到文件。
dbms/src/Common/CurrentThread.h
浏览文件 @
199d8734
...
...
@@ -82,7 +82,6 @@ public:
~
QueryScope
();
};
public:
/// Implicitly finalizes current thread in the destructor
class
ThreadScope
{
...
...
dbms/src/Interpreters/InterpreterCreateQuery.cpp
浏览文件 @
199d8734
...
...
@@ -576,9 +576,18 @@ BlockIO InterpreterCreateQuery::createTable(ASTCreateQuery & create)
context
.
getSessionContext
().
addExternalTable
(
table_name
,
res
,
query_ptr
);
else
database
->
createTable
(
context
,
table_name
,
res
,
query_ptr
);
}
res
->
startup
();
/// We must call "startup" and "shutdown" while holding DDLGuard.
/// Because otherwise method "shutdown" (from InterpreterDropQuery) can be called before startup
/// (in case when table was created and instantly dropped before started up)
///
/// Method "startup" may create background tasks and method "shutdown" will wait for them.
/// But if "shutdown" is called before "startup", it will exit early, because there are no background tasks to wait.
/// Then background task is created by "startup" method. And when destructor of a table object is called, background task is still active,
/// and the task will use references to freed data.
res
->
startup
();
}
/// If the query is a CREATE SELECT, insert the data into the table.
if
(
create
.
select
&&
!
create
.
attach
...
...
dbms/src/Interpreters/InterpreterDropQuery.cpp
浏览文件 @
199d8734
...
...
@@ -208,7 +208,7 @@ DatabaseAndTable InterpreterDropQuery::tryGetDatabaseAndTable(String & database_
throw
Exception
(
"Table "
+
backQuoteIfNeed
(
database_name
)
+
"."
+
backQuoteIfNeed
(
table_name
)
+
" doesn't exist."
,
ErrorCodes
::
UNKNOWN_TABLE
);
return
std
::
make_pair
<
DatabasePtr
,
StoragePtr
>
(
std
::
move
(
database
),
std
::
move
(
table
))
;
return
{
std
::
move
(
database
),
std
::
move
(
table
)}
;
}
return
{};
}
...
...
dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.reference
0 → 100644
浏览文件 @
199d8734
dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh
0 → 100755
浏览文件 @
199d8734
#!/usr/bin/env bash
set
-e
CURDIR
=
$(
cd
"
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)
"
&&
pwd
)
.
$CURDIR
/../shell_config.sh
function
stress
()
{
while
true
;
do
${
CLICKHOUSE_CLIENT
}
--query
"CREATE TABLE IF NOT EXISTS test.table (x UInt8) ENGINE = MergeTree ORDER BY tuple()"
2>/dev/null
${
CLICKHOUSE_CLIENT
}
--query
"DROP TABLE test.table"
2>/dev/null
done
}
# https://stackoverflow.com/questions/9954794/execute-a-shell-function-with-timeout
export
-f
stress
for
thread
in
{
1..5
}
;
do
timeout
10 bash
-c
stress &
done
wait
echo
${
CLICKHOUSE_CLIENT
}
--query
"DROP TABLE IF EXISTS test.table"
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录