diff --git a/cloud/src/meta-service/meta_service_job.cpp b/cloud/src/meta-service/meta_service_job.cpp index 0c77d5d33b8694..dea58d7fa151f5 100644 --- a/cloud/src/meta-service/meta_service_job.cpp +++ b/cloud/src/meta-service/meta_service_job.cpp @@ -1270,6 +1270,22 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str new_tablet_meta.SerializeToString(&new_tablet_val); txn->put(new_tablet_key, new_tablet_val); + // process mow table, check lock + if (new_tablet_meta.enable_unique_key_merge_on_write()) { + bool success = check_and_remove_delete_bitmap_update_lock( + code, msg, ss, txn, instance_id, new_table_id, new_tablet_id, + SCHEMA_CHANGE_DELETE_BITMAP_LOCK_ID, schema_change.delete_bitmap_lock_initiator(), + use_version); + if (!success) { + return; + } + + std::string pending_key = meta_pending_delete_bitmap_key({instance_id, new_tablet_id}); + txn->remove(pending_key); + LOG(INFO) << "xxx sc remove delete bitmap pending key, pending_key=" << hex(pending_key) + << " tablet_id=" << new_tablet_id << ", job_id=" << schema_change.id(); + } + //========================================================================== // move rowsets [2-alter_version] to recycle //========================================================================== @@ -1399,22 +1415,6 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str return; } - // process mow table, check lock - if (new_tablet_meta.enable_unique_key_merge_on_write()) { - bool success = check_and_remove_delete_bitmap_update_lock( - code, msg, ss, txn, instance_id, new_table_id, new_tablet_id, - SCHEMA_CHANGE_DELETE_BITMAP_LOCK_ID, schema_change.delete_bitmap_lock_initiator(), - use_version); - if (!success) { - return; - } - - std::string pending_key = meta_pending_delete_bitmap_key({instance_id, new_tablet_id}); - txn->remove(pending_key); - LOG(INFO) << "xxx sc remove delete bitmap pending key, pending_key=" << hex(pending_key) - << " tablet_id=" << new_tablet_id << "job_id=" << schema_change.id(); - } - for (size_t i = 0; i < schema_change.txn_ids().size(); ++i) { auto tmp_rowset_key = meta_rowset_tmp_key({instance_id, schema_change.txn_ids().at(i), new_tablet_id}); diff --git a/cloud/test/meta_service_job_test.cpp b/cloud/test/meta_service_job_test.cpp index f0e5cb8fe3dd15..a81e9c843d62f2 100644 --- a/cloud/test/meta_service_job_test.cpp +++ b/cloud/test/meta_service_job_test.cpp @@ -3458,6 +3458,29 @@ TEST(MetaServiceJobTest, SchemaChangeJobWithMoWTest) { ASSERT_EQ(res_code, MetaServiceCode::OK); res.Clear(); } + + // alter version < 2 + { + int64_t new_tablet_id = 16; + ASSERT_NO_FATAL_FAILURE(create_tablet(meta_service.get(), table_id, index_id, partition_id, + new_tablet_id, true, true)); + StartTabletJobResponse sc_res; + ASSERT_NO_FATAL_FAILURE(start_schema_change_job(meta_service.get(), table_id, index_id, + partition_id, tablet_id, new_tablet_id, + "job2", "be1", sc_res)); + std::vector output_rowsets; + auto res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 12345); + ASSERT_EQ(res_code, MetaServiceCode::OK); + FinishTabletJobResponse res; + finish_schema_change_job(meta_service.get(), tablet_id, new_tablet_id, "job2", "be1", + output_rowsets, res); + ASSERT_EQ(res.status().code(), MetaServiceCode::OK); + res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 100, -1); + ASSERT_EQ(res_code, MetaServiceCode::OK); + res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 100, -1); + ASSERT_EQ(res_code, MetaServiceCode::OK); + res.Clear(); + } } TEST(MetaServiceJobTest, ConcurrentCompactionTest) {