Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
bfbf150c
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,发现更多精彩内容 >>
提交
bfbf150c
编写于
12月 02, 2020
作者:
A
Alexander Tokmakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix segfault when 'not enough space'
上级
5ad15e20
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
24 addition
and
6 deletion
+24
-6
src/Disks/StoragePolicy.cpp
src/Disks/StoragePolicy.cpp
+17
-1
src/Disks/StoragePolicy.h
src/Disks/StoragePolicy.h
+5
-2
src/Storages/Distributed/DistributedBlockOutputStream.cpp
src/Storages/Distributed/DistributedBlockOutputStream.cpp
+1
-1
src/Storages/MergeTree/MergeTreeData.cpp
src/Storages/MergeTree/MergeTreeData.cpp
+1
-2
未找到文件。
src/Disks/StoragePolicy.cpp
浏览文件 @
bfbf150c
...
...
@@ -30,6 +30,7 @@ namespace ErrorCodes
extern
const
int
UNKNOWN_POLICY
;
extern
const
int
UNKNOWN_VOLUME
;
extern
const
int
LOGICAL_ERROR
;
extern
const
int
NOT_ENOUGH_SPACE
;
}
...
...
@@ -210,6 +211,14 @@ ReservationPtr StoragePolicy::reserve(UInt64 bytes) const
}
ReservationPtr
StoragePolicy
::
reserveAndCheck
(
UInt64
bytes
)
const
{
if
(
auto
res
=
reserve
(
bytes
,
0
))
return
res
;
throw
Exception
(
ErrorCodes
::
NOT_ENOUGH_SPACE
,
"Cannot reserve {}, not enough space"
,
ReadableSize
(
bytes
));
}
ReservationPtr
StoragePolicy
::
makeEmptyReservationOnLargestDisk
()
const
{
UInt64
max_space
=
0
;
...
...
@@ -226,7 +235,14 @@ ReservationPtr StoragePolicy::makeEmptyReservationOnLargestDisk() const
}
}
}
return
max_disk
->
reserve
(
0
);
auto
reservation
=
max_disk
->
reserve
(
0
);
if
(
!
reservation
)
{
/// I'm not sure if it's really a logical error, but exception message
/// "Cannot reserve 0 bytes" looks too strange to throw it with another exception code.
throw
Exception
(
ErrorCodes
::
LOGICAL_ERROR
,
"Cannot reserve 0 bytes"
);
}
return
reservation
;
}
...
...
src/Disks/StoragePolicy.h
浏览文件 @
bfbf150c
...
...
@@ -61,10 +61,13 @@ public:
const
String
&
getName
()
const
{
return
name
;
}
/// Returns valid reservation or null
/// Returns valid reservation or null
ptr
ReservationPtr
reserve
(
UInt64
bytes
)
const
;
/// Reserve space on any volume with index > min_volume_index
/// Reserves space on any volume or throws
ReservationPtr
reserveAndCheck
(
UInt64
bytes
)
const
;
/// Reserves space on any volume with index > min_volume_index or returns nullptr
ReservationPtr
reserve
(
UInt64
bytes
,
size_t
min_volume_index
)
const
;
/// Find volume index, which contains disk
...
...
src/Storages/Distributed/DistributedBlockOutputStream.cpp
浏览文件 @
bfbf150c
...
...
@@ -567,7 +567,7 @@ void DistributedBlockOutputStream::writeToShard(const Block & block, const std::
/// and keep monitor thread out from reading incomplete data
std
::
string
first_file_tmp_path
{};
auto
reservation
=
storage
.
getStoragePolicy
()
->
reserve
(
block
.
bytes
());
auto
reservation
=
storage
.
getStoragePolicy
()
->
reserve
AndCheck
(
block
.
bytes
());
auto
disk
=
reservation
->
getDisk
()
->
getPath
();
auto
data_path
=
storage
.
getRelativeDataPath
();
...
...
src/Storages/MergeTree/MergeTreeData.cpp
浏览文件 @
bfbf150c
...
...
@@ -3140,8 +3140,7 @@ inline ReservationPtr checkAndReturnReservation(UInt64 expected_size, Reservatio
ReservationPtr
MergeTreeData
::
reserveSpace
(
UInt64
expected_size
)
const
{
expected_size
=
std
::
max
(
RESERVATION_MIN_ESTIMATION_SIZE
,
expected_size
);
auto
reservation
=
getStoragePolicy
()
->
reserve
(
expected_size
);
return
checkAndReturnReservation
(
expected_size
,
std
::
move
(
reservation
));
return
getStoragePolicy
()
->
reserveAndCheck
(
expected_size
);
}
ReservationPtr
MergeTreeData
::
reserveSpace
(
UInt64
expected_size
,
SpacePtr
space
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录