Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
ecf8e8b4
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,发现更多精彩内容 >>
提交
ecf8e8b4
编写于
5月 26, 2014
作者:
M
Michael Kolupaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge
上级
c1b265d4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
0 deletion
+13
-0
dbms/src/Storages/StorageReplicatedMergeTree.cpp
dbms/src/Storages/StorageReplicatedMergeTree.cpp
+13
-0
未找到文件。
dbms/src/Storages/StorageReplicatedMergeTree.cpp
浏览文件 @
ecf8e8b4
...
...
@@ -126,6 +126,8 @@ static String formattedAST(const ASTPtr & ast)
void
StorageReplicatedMergeTree
::
createTable
()
{
LOG_DEBUG
(
log
,
"Creating table "
<<
zookeeper_path
);
zookeeper
->
create
(
zookeeper_path
,
""
,
zkutil
::
CreateMode
::
Persistent
);
/// Запишем метаданные таблицы, чтобы реплики могли сверять с ними свою локальную структуру таблицы.
...
...
@@ -194,6 +196,8 @@ void StorageReplicatedMergeTree::checkTableStructure()
void
StorageReplicatedMergeTree
::
createReplica
()
{
LOG_DEBUG
(
log
,
"Creating table "
<<
replica_path
);
/** Запомним список других реплик.
* NOTE: Здесь есть race condition. Если почти одновременно добавить нескольких реплик, сразу же начиная в них писать,
* небольшая часть данных может не реплицироваться.
...
...
@@ -210,7 +214,10 @@ void StorageReplicatedMergeTree::createReplica()
/// Если таблица пуста, больше ничего делать не нужно.
if
(
replicas
.
empty
())
{
LOG_DEBUG
(
log
,
"No other replicas"
);
return
;
}
/// "Эталонная" реплика, у которой мы возьмем информацию о множестве кусков, очередь и указатели на логи.
String
source_replica
=
replicas
[
0
];
...
...
@@ -220,6 +227,8 @@ void StorageReplicatedMergeTree::createReplica()
*/
for
(
const
String
&
replica
:
replicas
)
{
LOG_DEBUG
(
log
,
"Waiting for "
<<
replica
<<
" to acknowledge me"
);
bool
active
=
true
;
while
(
true
)
{
...
...
@@ -238,6 +247,8 @@ void StorageReplicatedMergeTree::createReplica()
source_replica
=
replica
;
}
LOG_INFO
(
log
,
"Will mimic "
<<
source_replica
);
String
source_path
=
zookeeper_path
+
"/replicas/"
+
source_replica
;
/// Порядок следующих трех действий важен. Записи в логе могут продублироваться, но не могут потеряться.
...
...
@@ -278,12 +289,14 @@ void StorageReplicatedMergeTree::createReplica()
zookeeper
->
create
(
replica_path
+
"/queue/queue-"
,
log_entry
.
toString
(),
zkutil
::
CreateMode
::
PersistentSequential
);
}
LOG_DEBUG
(
log
,
"Queued "
<<
active_parts
.
size
()
<<
" parts to be fetched"
);
/// Добавим в очередь содержимое очереди эталонной реплики.
for
(
const
String
&
entry
:
source_queue
)
{
zookeeper
->
create
(
replica_path
+
"/queue/queue-"
,
entry
,
zkutil
::
CreateMode
::
PersistentSequential
);
}
LOG_DEBUG
(
log
,
"Copied "
<<
source_queue
.
size
()
<<
" queue entries"
);
}
void
StorageReplicatedMergeTree
::
activateReplica
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录