encryption type changed before defragmenting small sstables

This commit is contained in:
obdev 2022-12-09 13:12:00 +00:00 committed by ob-robot
parent f03258f1c0
commit 8138f13597
3 changed files with 17 additions and 2 deletions

View File

@ -31,8 +31,8 @@ const static char *ObSysTaskTypeStr[] = {
"BACKUP_BACKUPSET",
"BACKUP_ARCHIVELOG",
"DDL_KV_MERGE",
"RESTORE",
"COMPLEMENT_DATA",
"RESTORE",
"BACKUP_CLEAN",
"BACKFILL_TX",
"REMOVE_MEMBER"

View File

@ -536,7 +536,12 @@ int ObSharedMacroBlockMgr::rebuild_sstable(
if (OB_FAIL(parse_merge_type(old_sstable, merge_type))) {
LOG_WARN("fail to parse merge type from old_sstable", K(ret));
} else if (OB_FAIL(prepare_data_desc(
tablet, merge_type, tablet.get_snapshot_version(), GET_MIN_CLUSTER_VERSION(), data_desc))) {
tablet,
old_sstable.get_meta().get_basic_meta(),
merge_type,
tablet.get_snapshot_version(),
GET_MIN_CLUSTER_VERSION(),
data_desc))) {
LOG_WARN("fail to prepare data desc", K(ret), K(merge_type), K(tablet.get_snapshot_version()));
} else if (OB_FAIL(sstable_index_builder.init(data_desc, nullptr, ObSSTableIndexBuilder::DISABLE))) {
LOG_WARN("fail to init sstable index builder", K(ret), K(data_desc));
@ -642,6 +647,7 @@ int ObSharedMacroBlockMgr::create_new_sstable(
int ObSharedMacroBlockMgr::prepare_data_desc(
const ObTablet &tablet,
const ObSSTableBasicMeta &basic_meta,
const ObMergeType &merge_type,
const int64_t snapshot_version,
const int64_t cluster_version,
@ -659,6 +665,13 @@ int ObSharedMacroBlockMgr::prepare_data_desc(
LOG_WARN("fail to init data store desc", K(ret),
K(tablet), K(merge_type), K(snapshot_version), K(cluster_version));
} else {
// overwrite the encryption related memberships, otherwise these memberships of new sstable may differ
// from that of old sstable, since the encryption method of one tablet may change before defragmentation
data_desc.row_store_type_ = basic_meta.row_store_type_;
data_desc.compressor_type_ = basic_meta.compressor_type_;
data_desc.master_key_id_ = basic_meta.master_key_id_;
data_desc.encrypt_id_ = basic_meta.encrypt_id_;
MEMCPY(data_desc.encrypt_key_, basic_meta.encrypt_key_, share::OB_MAX_TABLESPACE_ENCRYPT_KEY_LENGTH);
data_desc.row_column_count_ = data_desc.rowkey_column_count_ + 1;
data_desc.col_desc_array_.reset();
data_desc.need_prebuild_bloomfilter_ = false;

View File

@ -31,6 +31,7 @@ class ObSSTableIndexBuilder;
class ObIndexBlockRebuilder;
class ObSSTableSecMetaIterator;
class ObSSTableMergeRes;
struct ObSSTableBasicMeta;
struct ObBlockInfo
{
public:
@ -138,6 +139,7 @@ private:
ObTableHandleV2 &table_handle);
int prepare_data_desc(
const ObTablet &tablet,
const ObSSTableBasicMeta &basic_meta,
const ObMergeType &merge_type,
const int64_t snapshot_version,
const int64_t cluster_version,