Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
54630e93
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,发现更多精彩内容 >>
提交
54630e93
编写于
2月 07, 2017
作者:
A
artpaul
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#437 encode name of default_database so it's can be passed through connection
上级
33f9917f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
6 deletion
+14
-6
dbms/src/Interpreters/Cluster.cpp
dbms/src/Interpreters/Cluster.cpp
+2
-1
dbms/src/Storages/Distributed/DirectoryMonitor.cpp
dbms/src/Storages/Distributed/DirectoryMonitor.cpp
+12
-5
未找到文件。
dbms/src/Interpreters/Cluster.cpp
浏览文件 @
54630e93
...
...
@@ -46,7 +46,8 @@ inline std::string addressToDirName(const Cluster::Address & address)
escapeForFileName
(
address
.
user
)
+
(
address
.
password
.
empty
()
?
""
:
(
':'
+
escapeForFileName
(
address
.
password
)))
+
'@'
+
escapeForFileName
(
address
.
resolved_address
.
host
().
toString
())
+
':'
+
std
::
to_string
(
address
.
resolved_address
.
port
());
std
::
to_string
(
address
.
resolved_address
.
port
())
+
(
address
.
default_database
.
empty
()
?
""
:
(
'#'
+
escapeForFileName
(
address
.
default_database
)));
}
/// To cache DNS requests.
...
...
dbms/src/Storages/Distributed/DirectoryMonitor.cpp
浏览文件 @
54630e93
...
...
@@ -42,12 +42,13 @@ namespace
for
(
auto
it
=
boost
::
make_split_iterator
(
name
,
boost
::
first_finder
(
","
));
it
!=
decltype
(
it
){};
++
it
)
{
const
auto
address
=
boost
::
copy_range
<
std
::
string
>
(
*
it
);
const
auto
address_end
=
address
.
data
()
+
address
.
size
();
const
auto
user_pw_end
=
strchr
(
address
.
data
(),
'@'
);
const
auto
colon
=
strchr
(
address
.
data
(),
':'
);
if
(
!
user_pw_end
||
!
colon
)
throw
Exception
{
"Shard address '"
+
address
+
"' does not match to 'user[:password]@host:port' pattern"
,
"Shard address '"
+
address
+
"' does not match to 'user[:password]@host:port
#default_database
' pattern"
,
ErrorCodes
::
INCORRECT_FILE_NAME
};
...
...
@@ -59,12 +60,16 @@ namespace
ErrorCodes
::
INCORRECT_FILE_NAME
};
const
auto
has_db
=
strchr
(
address
.
data
(),
'#'
);
const
auto
port_end
=
has_db
?
has_db
:
address_end
;
const
auto
user
=
unescapeForFileName
({
address
.
data
(),
has_pw
?
static_cast
<
const
char
*>
(
colon
)
:
user_pw_end
});
const
auto
password
=
has_pw
?
unescapeForFileName
({
colon
+
1
,
user_pw_end
})
:
std
::
string
{};
const
auto
host
=
unescapeForFileName
({
user_pw_end
+
1
,
host_end
});
const
auto
port
=
parse
<
UInt16
>
(
host_end
+
1
);
const
auto
port
=
parse
<
UInt16
>
(
host_end
+
1
,
port_end
-
(
host_end
+
1
));
const
auto
database
=
has_db
?
unescapeForFileName
({
has_db
+
1
,
address_end
})
:
std
::
string
{};
pools
.
emplace_back
(
factory
(
host
,
port
,
user
,
password
));
pools
.
emplace_back
(
factory
(
host
,
port
,
user
,
password
,
database
));
}
return
pools
;
...
...
@@ -131,9 +136,11 @@ void StorageDistributedDirectoryMonitor::run()
ConnectionPoolPtr
StorageDistributedDirectoryMonitor
::
createPool
(
const
std
::
string
&
name
)
{
const
auto
pool_factory
=
[
this
,
&
name
]
(
const
std
::
string
&
host
,
const
UInt16
port
,
const
std
::
string
&
user
,
const
std
::
string
&
password
)
{
const
std
::
string
&
user
,
const
std
::
string
&
password
,
const
std
::
string
&
default_database
)
{
return
std
::
make_shared
<
ConnectionPool
>
(
1
,
host
,
port
,
""
,
1
,
host
,
port
,
default_database
,
user
,
password
,
storage
.
getName
()
+
'_'
+
name
);
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录