diff --git a/src/storage/compaction/ob_tablet_merge_ctx.cpp b/src/storage/compaction/ob_tablet_merge_ctx.cpp index dacf11883c..7c7732ecae 100755 --- a/src/storage/compaction/ob_tablet_merge_ctx.cpp +++ b/src/storage/compaction/ob_tablet_merge_ctx.cpp @@ -870,14 +870,14 @@ int ObTabletMergeCtx::update_tablet_or_release_memtable(const ObGetMergeTablesRe LOG_WARN("storage schema is unexpected null", K(ret), KPC(this)); } else if (OB_FAIL(old_tablet->load_storage_schema(temp_allocator, schema_on_tablet))) { LOG_WARN("failed to load storage schema", K(ret), KPC(old_tablet)); - } else if (OB_UNLIKELY(schema_on_tablet->compare_schema_newer(*schema_ctx_.storage_schema_))) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("schema on memtable is newer", K(ret), K(schema_ctx_.storage_schema_), KPC(schema_on_tablet)); } else if (OB_UNLIKELY(get_merge_table_result.scn_range_.end_scn_ > old_tablet->get_tablet_meta().clog_checkpoint_scn_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("can't have larger end_log_ts", K(ret), K(get_merge_table_result), K(old_tablet->get_tablet_meta())); - } else if (get_merge_table_result.version_range_.snapshot_version_ > old_tablet->get_snapshot_version()) { + } else if (get_merge_table_result.version_range_.snapshot_version_ > old_tablet->get_snapshot_version() + || schema_on_tablet->compare_schema_newer(*schema_ctx_.storage_schema_)) { // need write slog to update snapshot_version on tablet_meta + // if schema on memtable is newer, need update into tablet + // (written rows are rolled back on leader, no logging, end_scn won't be updated) update_table_store_flag = true; } diff --git a/src/storage/memtable/ob_memtable.cpp b/src/storage/memtable/ob_memtable.cpp index b9619522ae..b255ab71fd 100755 --- a/src/storage/memtable/ob_memtable.cpp +++ b/src/storage/memtable/ob_memtable.cpp @@ -2305,7 +2305,7 @@ int ObMemtable::get_schema_info( if (IS_NOT_INIT) { ret = OB_NOT_INIT; TRANS_LOG(WARN, "not inited", K(ret)); - } else if (get_max_column_cnt() > input_column_cnt) { + } else if (get_max_column_cnt() >= input_column_cnt) { TRANS_LOG(INFO, "column cnt or schema version is updated by memtable", KPC(this), K(max_column_cnt_on_memtable), K(max_schema_version_on_memtable)); max_column_cnt_on_memtable = MAX(max_column_cnt_on_memtable, get_max_column_cnt());