This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 364c8733fa fix light schema change coredump (#10828)
364c8733fa is described below
commit 364c8733fa5b52279c9be4035986a6c97be120cd
Author: Lightman <[email protected]>
AuthorDate: Thu Jul 14 15:43:15 2022 +0800
fix light schema change coredump (#10828)
---
be/src/olap/data_dir.cpp | 25 +++++++++++++++----------
be/src/olap/tablet.cpp | 4 ----
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/be/src/olap/data_dir.cpp b/be/src/olap/data_dir.cpp
index d63d792acf..52d1570e48 100644
--- a/be/src/olap/data_dir.cpp
+++ b/be/src/olap/data_dir.cpp
@@ -442,6 +442,14 @@ Status DataDir::load() {
<< ", error tablet: " << failed_tablet_ids.size() << ",
path: " << _path;
}
+ for (int64_t tablet_id : tablet_ids) {
+ TabletSharedPtr tablet = _tablet_manager->get_tablet(tablet_id);
+ if (tablet && tablet->set_tablet_schema_into_rowset_meta()) {
+ TabletMetaManager::save(this, tablet->tablet_id(),
tablet->schema_hash(),
+ tablet->tablet_meta());
+ }
+ }
+
// traverse rowset
// 1. add committed rowset to txn map
// 2. add visible rowset to tablet
@@ -469,6 +477,11 @@ Status DataDir::load() {
}
if (rowset_meta->rowset_state() == RowsetStatePB::COMMITTED &&
rowset_meta->tablet_uid() == tablet->tablet_uid()) {
+ if (!rowset_meta->get_rowset_pb().has_tablet_schema()) {
+ rowset_meta->set_tablet_schema(&tablet->tablet_schema());
+ RowsetMetaManager::save(_meta, rowset_meta->tablet_uid(),
rowset_meta->rowset_id(),
+ rowset_meta->get_rowset_pb());
+ }
Status commit_txn_status = _txn_manager->commit_txn(
_meta, rowset_meta->partition_id(), rowset_meta->txn_id(),
rowset_meta->tablet_id(),
rowset_meta->tablet_schema_hash(),
@@ -485,13 +498,13 @@ Status DataDir::load() {
<< " schema hash: " <<
rowset_meta->tablet_schema_hash()
<< " for txn: " << rowset_meta->txn_id();
}
+ } else if (rowset_meta->rowset_state() == RowsetStatePB::VISIBLE &&
+ rowset_meta->tablet_uid() == tablet->tablet_uid()) {
if (!rowset_meta->get_rowset_pb().has_tablet_schema()) {
rowset_meta->set_tablet_schema(&tablet->tablet_schema());
RowsetMetaManager::save(_meta, rowset_meta->tablet_uid(),
rowset_meta->rowset_id(),
rowset_meta->get_rowset_pb());
}
- } else if (rowset_meta->rowset_state() == RowsetStatePB::VISIBLE &&
- rowset_meta->tablet_uid() == tablet->tablet_uid()) {
Status publish_status = tablet->add_rowset(rowset);
if (!publish_status &&
publish_status.precise_code() !=
OLAP_ERR_PUSH_VERSION_ALREADY_EXIST) {
@@ -512,14 +525,6 @@ Status DataDir::load() {
}
}
- for (int64_t tablet_id : tablet_ids) {
- TabletSharedPtr tablet = _tablet_manager->get_tablet(tablet_id);
- if (tablet && tablet->set_tablet_schema_into_rowset_meta()) {
- TabletMetaManager::save(this, tablet->tablet_id(),
tablet->schema_hash(),
- tablet->tablet_meta());
- }
- }
-
// At startup, we only count these invalid rowset, but do not actually
delete it.
// The actual delete operation is in
StorageEngine::_clean_unused_rowset_metas,
// which is cleaned up uniformly by the background cleanup thread.
diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp
index 17188991da..366755770e 100644
--- a/be/src/olap/tablet.cpp
+++ b/be/src/olap/tablet.cpp
@@ -1813,12 +1813,8 @@ void Tablet::remove_all_remote_rowsets() {
const TabletSchema& Tablet::tablet_schema() const {
std::shared_lock wrlock(_meta_lock);
- _tablet_meta->all_rs_metas();
const RowsetMetaSharedPtr rowset_meta =
rowset_meta_with_max_schema_version(_tablet_meta->all_rs_metas());
- if (rowset_meta->tablet_schema() == nullptr) {
- return _schema;
- }
return *rowset_meta->tablet_schema();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]