You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pegasus.apache.org by yu...@apache.org on 2020/09/14 06:46:30 UTC
[incubator-pegasus] 03/05: fix: fix db is not nullptr when
release_db (#594)
This is an automated email from the ASF dual-hosted git repository.
yuchenhe pushed a commit to branch v2.1
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git
commit 4276c2cede6a4f65f86790f987568a8dcfe3655f
Author: HeYuchen <37...@qq.com>
AuthorDate: Tue Sep 8 18:11:36 2020 +0800
fix: fix db is not nullptr when release_db (#594)
---
src/server/pegasus_server_impl.cpp | 32 +++++++++++++++++-----------
src/server/pegasus_server_impl.h | 2 +-
src/server/test/pegasus_server_impl_test.cpp | 16 ++++++++++++++
3 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/src/server/pegasus_server_impl.cpp b/src/server/pegasus_server_impl.cpp
index 1889e98..577c907 100644
--- a/src/server/pegasus_server_impl.cpp
+++ b/src/server/pegasus_server_impl.cpp
@@ -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;
}
}
diff --git a/src/server/pegasus_server_impl.h b/src/server/pegasus_server_impl.h
index 009f97f..1db2077 100644
--- a/src/server/pegasus_server_impl.h
+++ b/src/server/pegasus_server_impl.h
@@ -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);
diff --git a/src/server/test/pegasus_server_impl_test.cpp b/src/server/test/pegasus_server_impl_test.cpp
index d9d161a..0302d8f 100644
--- a/src/server/test/pegasus_server_impl_test.cpp
+++ b/src/server/test/pegasus_server_impl_test.cpp
@@ -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
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pegasus.apache.org
For additional commands, e-mail: commits-help@pegasus.apache.org