From 6be806aa395e58bc3092ec341e2d36bbd3bd8d75 Mon Sep 17 00:00:00 2001 From: lichaoyong Date: Wed, 12 Jun 2019 16:21:14 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20creating=20rollup=20bug=20from=20multi=20?= =?UTF-8?q?SegmentGroups=20generated=20streaming=20=E2=80=A6=20(#1287)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In streaming load, one version will generate multi SegmentGroups. Upon creating rollup, the previous code only check version exists or not. Instead, every SegmentGroup should be checked independently. --- be/src/olap/olap_table.cpp | 15 +++++++++++++-- be/src/olap/olap_table.h | 2 +- be/src/olap/schema_change.cpp | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/be/src/olap/olap_table.cpp b/be/src/olap/olap_table.cpp index 332bf69e07..5e8ff54515 100644 --- a/be/src/olap/olap_table.cpp +++ b/be/src/olap/olap_table.cpp @@ -1867,8 +1867,19 @@ void OLAPTable::_list_files_with_suffix(const string& file_suffix, set* } } -bool OLAPTable::has_version(const Version& version) const { - return (_data_sources.find(version) != _data_sources.end()); +bool OLAPTable::has_segment_group(const Version& version, const SegmentGroup* new_segment_group) const { + auto it = _data_sources.find(version); + if (it == _data_sources.end()) { + return false; + } + bool exist = false; + for (auto segment_group : it->second) { + if (segment_group->segment_group_id() == new_segment_group->segment_group_id()) { + exist = true; + break; + } + } + return exist; } void OLAPTable::list_versions(vector* versions) const { diff --git a/be/src/olap/olap_table.h b/be/src/olap/olap_table.h index ff2d514c26..7befcc9b12 100644 --- a/be/src/olap/olap_table.h +++ b/be/src/olap/olap_table.h @@ -234,7 +234,7 @@ public: void list_index_files(std::set* filenames) const; - bool has_version(const Version& version) const; + bool has_segment_group(const Version& version, const SegmentGroup* new_segment_group) const; void list_versions(std::vector* versions) const; diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index 45963b7e90..b60f8fb30a 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -2106,7 +2106,7 @@ OLAPStatus SchemaChangeHandler::_alter_table(SchemaChangeParams* sc_params) { sc_params->ref_olap_table->obtain_header_wrlock(); sc_params->new_olap_table->obtain_header_wrlock(); - if (!sc_params->new_olap_table->has_version((*it)->version())) { + if (!sc_params->new_olap_table->has_segment_group((*it)->version(), new_segment_group)) { // register version std::vector segment_group_vec; segment_group_vec.push_back(new_segment_group);