Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
53dd07b8
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,发现更多精彩内容 >>
提交
53dd07b8
编写于
11月 05, 2015
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dbms: checking replication delays: development [#METR-17573].
上级
e29df281
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
73 addition
and
24 deletion
+73
-24
dbms/include/DB/Storages/StorageReplicatedMergeTree.h
dbms/include/DB/Storages/StorageReplicatedMergeTree.h
+2
-0
dbms/src/Server/Server.cpp
dbms/src/Server/Server.cpp
+62
-24
dbms/src/Storages/StorageReplicatedMergeTree.cpp
dbms/src/Storages/StorageReplicatedMergeTree.cpp
+9
-0
未找到文件。
dbms/include/DB/Storages/StorageReplicatedMergeTree.h
浏览文件 @
53dd07b8
...
...
@@ -180,6 +180,8 @@ public:
using
LogEntriesData
=
std
::
vector
<
ReplicatedMergeTreeLogEntryData
>
;
void
getQueue
(
LogEntriesData
&
res
,
String
&
replica_name
);
void
getReplicaDelays
(
time_t
&
out_absolute_delay
,
time_t
&
out_relative_delay
)
const
;
private:
void
dropUnreplicatedPartition
(
const
Field
&
partition
,
bool
detach
,
const
Settings
&
settings
);
...
...
dbms/src/Server/Server.cpp
浏览文件 @
53dd07b8
...
...
@@ -160,41 +160,72 @@ private:
void
run
();
};
/// Отвечает "Ok.\n", если получен любой GET запрос. Используется для проверки живости.
/// Отвечает "Ok.\n". Используется для проверки живости.
class
PingRequestHandler
:
public
Poco
::
Net
::
HTTPRequestHandler
{
public:
PingRequestHandler
(
)
void
handleRequest
(
Poco
::
Net
::
HTTPServerRequest
&
request
,
Poco
::
Net
::
HTTPServerResponse
&
response
)
{
LOG_TRACE
((
&
Logger
::
get
(
"PingRequestHandler"
)),
"Ping request."
);
try
{
const
char
*
data
=
"Ok.
\n
"
;
response
.
sendBuffer
(
data
,
strlen
(
data
));
}
catch
(...)
{
tryLogCurrentException
(
"PingRequestHandler"
);
}
}
};
/// Отвечает "Ok.\n", если все реплики на этом сервере не слишком сильно отстают.
class
ReplicasStatusHandler
:
public
Poco
::
Net
::
HTTPRequestHandler
{
public:
ReplicasStatusHandler
()
{
// TODO
}
void
handleRequest
(
Poco
::
Net
::
HTTPServerRequest
&
request
,
Poco
::
Net
::
HTTPServerResponse
&
response
)
{
try
{
if
(
request
.
getURI
()
==
"/"
||
request
.
getURI
()
==
"/ping"
)
{
const
char
*
data
=
"Ok.
\n
"
;
response
.
sendBuffer
(
data
,
strlen
(
data
));
}
else
{
response
.
setStatusAndReason
(
Poco
::
Net
::
HTTPResponse
::
HTTP_NOT_FOUND
);
response
.
send
()
<<
"There is no handle "
<<
request
.
getURI
()
<<
"
\n\n
"
<<
"Use / or /ping for health checks.
\n
"
<<
"Send queries from your program with POST method or GET /?query=...
\n\n
"
<<
"Use clickhouse-client:
\n\n
"
<<
"For interactive data analysis:
\n
"
<<
" clickhouse-client
\n\n
"
<<
"For batch query processing:
\n
"
<<
" clickhouse-client --query='SELECT 1' > result
\n
"
<<
" clickhouse-client < query > result
\n
"
;
}
// TODO
}
catch
(...)
{
tryLogCurrentException
(
"PingRequestHandler"
);
tryLogCurrentException
(
"ReplicasStatusHandler"
);
}
}
};
/// Отвечает 404 с подробным объяснением.
class
NotFoundHandler
:
public
Poco
::
Net
::
HTTPRequestHandler
{
public:
void
handleRequest
(
Poco
::
Net
::
HTTPServerRequest
&
request
,
Poco
::
Net
::
HTTPServerResponse
&
response
)
{
try
{
response
.
setStatusAndReason
(
Poco
::
Net
::
HTTPResponse
::
HTTP_NOT_FOUND
);
response
.
send
()
<<
"There is no handle "
<<
request
.
getURI
()
<<
"
\n\n
"
<<
"Use / or /ping for health checks.
\n
"
<<
"Or /replicas_status for more sophisticated health checks.
\n\n
"
<<
"Send queries from your program with POST method or GET /?query=...
\n\n
"
<<
"Use clickhouse-client:
\n\n
"
<<
"For interactive data analysis:
\n
"
<<
" clickhouse-client
\n\n
"
<<
"For batch query processing:
\n
"
<<
" clickhouse-client --query='SELECT 1' > result
\n
"
<<
" clickhouse-client < query > result
\n
"
;
}
catch
(...)
{
tryLogCurrentException
(
"NotFoundHandler"
);
}
}
};
...
...
@@ -219,7 +250,9 @@ public:
<<
", Address: "
<<
request
.
clientAddress
().
toString
()
<<
", User-Agent: "
<<
(
request
.
has
(
"User-Agent"
)
?
request
.
get
(
"User-Agent"
)
:
"none"
));
if
(
request
.
getURI
().
find
(
'?'
)
!=
std
::
string
::
npos
const
auto
&
uri
=
request
.
getURI
();
if
(
uri
.
find
(
'?'
)
!=
std
::
string
::
npos
||
request
.
getMethod
()
==
Poco
::
Net
::
HTTPRequest
::
HTTP_POST
)
{
return
new
HandlerType
(
server
);
...
...
@@ -227,7 +260,12 @@ public:
else
if
(
request
.
getMethod
()
==
Poco
::
Net
::
HTTPRequest
::
HTTP_GET
||
request
.
getMethod
()
==
Poco
::
Net
::
HTTPRequest
::
HTTP_HEAD
)
{
return
new
PingRequestHandler
();
if
(
uri
==
"/"
||
uri
==
"/ping"
)
return
new
PingRequestHandler
;
else
if
(
uri
==
"/replicas_status"
)
return
new
ReplicasStatusHandler
;
else
return
new
NotFoundHandler
;
}
else
return
nullptr
;
...
...
dbms/src/Storages/StorageReplicatedMergeTree.cpp
浏览文件 @
53dd07b8
...
...
@@ -3330,6 +3330,15 @@ void StorageReplicatedMergeTree::getQueue(LogEntriesData & res, String & replica
}
void
StorageReplicatedMergeTree
::
getReplicaDelays
(
time_t
&
out_absolute_delay
,
time_t
&
out_relative_delay
)
const
{
if
(
!
restarting_thread
)
throw
Exception
(
"Table was shutted down or is in readonly mode."
,
ErrorCodes
::
TABLE_IS_READ_ONLY
);
restarting_thread
->
getReplicaDelays
(
out_absolute_delay
,
out_relative_delay
);
}
void
StorageReplicatedMergeTree
::
fetchPartition
(
const
Field
&
partition
,
const
String
&
from_
,
const
Settings
&
settings
)
{
auto
zookeeper
=
getZooKeeper
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录