Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Incubator Pegasus
提交
4276c2ce
Incubator Pegasus
项目概览
apache
/
Incubator Pegasus
通知
9
Star
5
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Incubator Pegasus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4276c2ce
编写于
9月 08, 2020
作者:
小地鼠家的小松鼠
提交者:
heyuchen
9月 14, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: fix db is not nullptr when release_db (#594)
上级
a83343d4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
36 addition
and
14 deletion
+36
-14
src/server/pegasus_server_impl.cpp
src/server/pegasus_server_impl.cpp
+19
-13
src/server/pegasus_server_impl.h
src/server/pegasus_server_impl.h
+1
-1
src/server/test/pegasus_server_impl_test.cpp
src/server/test/pegasus_server_impl_test.cpp
+16
-0
未找到文件。
src/server/pegasus_server_impl.cpp
浏览文件 @
4276c2ce
...
...
@@ -1813,7 +1813,16 @@ private:
if
(
remove_checkpoint
&&
!::
dsn
::
utils
::
filesystem
::
remove_path
(
checkpoint_dir
))
{
derror_replica
(
"remove checkpoint directory {} failed"
,
checkpoint_dir
);
}
release_db
(
snapshot_db
,
handles_opened
);
if
(
snapshot_db
)
{
for
(
auto
handle
:
handles_opened
)
{
if
(
handle
)
{
snapshot_db
->
DestroyColumnFamilyHandle
(
handle
);
handle
=
nullptr
;
}
}
delete
snapshot_db
;
snapshot_db
=
nullptr
;
}
};
// Because of RocksDB's restriction, we have to to open default column family even though
...
...
@@ -2716,19 +2725,16 @@ void pegasus_server_impl::set_partition_version(int32_t partition_version)
return
::
dsn
::
ERR_OK
;
}
void
pegasus_server_impl
::
release_db
()
{
release_db
(
_db
,
{
_data_cf
,
_meta_cf
});
}
void
pegasus_server_impl
::
release_db
(
rocksdb
::
DB
*
db
,
const
std
::
vector
<
rocksdb
::
ColumnFamilyHandle
*>
&
handles
)
void
pegasus_server_impl
::
release_db
()
{
if
(
db
)
{
for
(
auto
handle
:
handles
)
{
dassert_replica
(
handle
!=
nullptr
,
""
);
db
->
DestroyColumnFamilyHandle
(
handle
)
;
handle
=
nullptr
;
}
delete
db
;
db
=
nullptr
;
if
(
_
db
)
{
dassert_replica
(
_data_cf
!=
nullptr
&&
_meta_cf
!=
nullptr
,
""
);
_db
->
DestroyColumnFamilyHandle
(
_data_cf
);
_data_cf
=
nullptr
;
_db
->
DestroyColumnFamilyHandle
(
_meta_cf
)
;
_meta_cf
=
nullptr
;
delete
_
db
;
_
db
=
nullptr
;
}
}
...
...
src/server/pegasus_server_impl.h
浏览文件 @
4276c2ce
...
...
@@ -168,6 +168,7 @@ private:
FRIEND_TEST
(
pegasus_server_impl_test
,
default_data_version
);
FRIEND_TEST
(
pegasus_server_impl_test
,
test_open_db_with_latest_options
);
FRIEND_TEST
(
pegasus_server_impl_test
,
test_open_db_with_app_envs
);
FRIEND_TEST
(
pegasus_server_impl_test
,
test_stop_db_twice
);
friend
class
pegasus_manual_compact_service
;
friend
class
pegasus_write_service
;
...
...
@@ -314,7 +315,6 @@ private:
check_column_families
(
const
std
::
string
&
path
,
bool
*
missing_meta_cf
,
bool
*
miss_data_cf
);
void
release_db
();
void
release_db
(
rocksdb
::
DB
*
db
,
const
std
::
vector
<
rocksdb
::
ColumnFamilyHandle
*>
&
handles
);
::
dsn
::
error_code
flush_all_family_columns
(
bool
wait
);
...
...
src/server/test/pegasus_server_impl_test.cpp
浏览文件 @
4276c2ce
...
...
@@ -99,5 +99,21 @@ TEST_F(pegasus_server_impl_test, test_open_db_with_app_envs)
ASSERT_EQ
(
ROCKSDB_ENV_USAGE_SCENARIO_BULK_LOAD
,
_server
->
_usage_scenario
);
}
TEST_F
(
pegasus_server_impl_test
,
test_stop_db_twice
)
{
start
();
ASSERT_TRUE
(
_server
->
_is_open
);
ASSERT_TRUE
(
_server
->
_db
!=
nullptr
);
_server
->
stop
(
false
);
ASSERT_FALSE
(
_server
->
_is_open
);
ASSERT_TRUE
(
_server
->
_db
==
nullptr
);
// stop again
_server
->
stop
(
false
);
ASSERT_FALSE
(
_server
->
_is_open
);
ASSERT_TRUE
(
_server
->
_db
==
nullptr
);
}
}
// namespace server
}
// namespace pegasus
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录