This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new f6881d2 [Bug] Fix coredump bug when create new tablets (#5089)
f6881d2 is described below
commit f6881d2f7b49aca1d0bc90b067eb9e1e73c409d1
Author: Yingchun Lai <[email protected]>
AuthorDate: Thu Dec 17 00:34:31 2020 +0800
[Bug] Fix coredump bug when create new tablets (#5089)
There is a bug may cause BE coredump when create tablet,
the accessing of tablet_set of a data dir should be protected by lock.
---
be/src/olap/data_dir.cpp | 5 +++++
be/src/olap/data_dir.h | 4 ++--
be/src/olap/storage_engine.cpp | 2 +-
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/be/src/olap/data_dir.cpp b/be/src/olap/data_dir.cpp
index ffb5fc7..d746730 100644
--- a/be/src/olap/data_dir.cpp
+++ b/be/src/olap/data_dir.cpp
@@ -992,6 +992,11 @@ void DataDir::update_user_data_size(int64_t size) {
disks_data_used_capacity->set_value(size);
}
+size_t DataDir::tablet_size() const {
+ std::lock_guard<std::mutex> l(_mutex);
+ return _tablet_set.size();
+}
+
bool DataDir::reach_capacity_limit(int64_t incoming_data_size) {
double used_pct = (_disk_capacity_bytes - _available_bytes +
incoming_data_size) /
(double)_disk_capacity_bytes;
diff --git a/be/src/olap/data_dir.h b/be/src/olap/data_dir.h
index 1a22f9e..a3c2d22 100644
--- a/be/src/olap/data_dir.h
+++ b/be/src/olap/data_dir.h
@@ -126,7 +126,7 @@ public:
void update_user_data_size(int64_t size);
- std::set<TabletInfo> tablet_set() { return _tablet_set; }
+ size_t tablet_size() const;
void disks_compaction_score_increment(int64_t delta);
@@ -180,7 +180,7 @@ private:
bool _to_be_deleted;
// used to protect _current_shard and _tablet_set
- std::mutex _mutex;
+ mutable std::mutex _mutex;
uint64_t _current_shard;
std::set<TabletInfo> _tablet_set;
diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index cc1df07..56f2d90 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -434,7 +434,7 @@ std::vector<DataDir*>
StorageEngine::get_stores_for_create_tablet(
for (int i = 0; i < stores.size(); i++) {
int j = i + 1;
if (j < stores.size()) {
- if (stores[i]->tablet_set().size() >
stores[j]->tablet_set().size()) {
+ if (stores[i]->tablet_size() > stores[j]->tablet_size()) {
std::swap(stores[i], stores[j]);
}
std::random_shuffle(stores.begin() + j, stores.end());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]