From 8138f1359714e7a733c19a7dbd28ff35d745abdc Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 9 Dec 2022 13:12:00 +0000 Subject: [PATCH] encryption type changed before defragmenting small sstables --- src/share/scheduler/ob_sys_task_stat.cpp | 2 +- .../ob_shared_macro_block_manager.cpp | 15 ++++++++++++++- .../blocksstable/ob_shared_macro_block_manager.h | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/share/scheduler/ob_sys_task_stat.cpp b/src/share/scheduler/ob_sys_task_stat.cpp index d5c3d51694..e708d9ea36 100644 --- a/src/share/scheduler/ob_sys_task_stat.cpp +++ b/src/share/scheduler/ob_sys_task_stat.cpp @@ -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" diff --git a/src/storage/blocksstable/ob_shared_macro_block_manager.cpp b/src/storage/blocksstable/ob_shared_macro_block_manager.cpp index 9851007209..16d5ab9ee5 100644 --- a/src/storage/blocksstable/ob_shared_macro_block_manager.cpp +++ b/src/storage/blocksstable/ob_shared_macro_block_manager.cpp @@ -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; diff --git a/src/storage/blocksstable/ob_shared_macro_block_manager.h b/src/storage/blocksstable/ob_shared_macro_block_manager.h index 968fbeb90a..67f77d2e7a 100644 --- a/src/storage/blocksstable/ob_shared_macro_block_manager.h +++ b/src/storage/blocksstable/ob_shared_macro_block_manager.h @@ -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,