diff --git a/src/rootserver/ddl_task/ob_column_redefinition_task.h b/src/rootserver/ddl_task/ob_column_redefinition_task.h index 0fe2d99b4f..d2c6b3141d 100644 --- a/src/rootserver/ddl_task/ob_column_redefinition_task.h +++ b/src/rootserver/ddl_task/ob_column_redefinition_task.h @@ -51,6 +51,8 @@ public: virtual bool support_longops_monitoring() const { return true; } virtual void flt_set_task_span_tag() const override; virtual void flt_set_status_span_tag() const override; + INHERIT_TO_STRING_KV("ObDDLRedefinitionTask", ObDDLRedefinitionTask, + K(has_rebuild_index_), K(has_rebuild_constraint_), K(has_rebuild_foreign_key_), K(is_sstable_complete_task_submitted_)); private: int wait_data_complement(const share::ObDDLTaskStatus next_task_status); int send_build_single_replica_request(); diff --git a/src/rootserver/ddl_task/ob_ddl_redefinition_task.h b/src/rootserver/ddl_task/ob_ddl_redefinition_task.h index 9f5bf0e0e3..08b1dbc3d8 100644 --- a/src/rootserver/ddl_task/ob_ddl_redefinition_task.h +++ b/src/rootserver/ddl_task/ob_ddl_redefinition_task.h @@ -127,6 +127,11 @@ public: virtual void flt_set_status_span_tag() const = 0; virtual int cleanup_impl() override; int try_reap_old_replica_build_task(); + INHERIT_TO_STRING_KV("ObDDLTask", ObDDLTask, + K(wait_trans_ctx_), K(sync_tablet_autoinc_seq_ctx_), K(build_replica_request_time_), + K(complete_sstable_job_ret_code_), K(snapshot_held_), K(has_synced_autoincrement_), + K(has_synced_stats_info_), K(update_autoinc_job_ret_code_), K(update_autoinc_job_time_), + K(check_table_empty_job_ret_code_), K(check_table_empty_job_time_)); protected: int prepare(const share::ObDDLTaskStatus next_task_status); int lock_table(const share::ObDDLTaskStatus next_task_status); diff --git a/src/rootserver/ddl_task/ob_ddl_scheduler.cpp b/src/rootserver/ddl_task/ob_ddl_scheduler.cpp index 76785ffd0e..38e8b49950 100644 --- a/src/rootserver/ddl_task/ob_ddl_scheduler.cpp +++ b/src/rootserver/ddl_task/ob_ddl_scheduler.cpp @@ -2001,7 +2001,6 @@ int ObDDLScheduler::on_column_checksum_calc_reply( const int ret_code) { int ret = OB_SUCCESS; - LOG_INFO("receive column checksum response", K(tablet_id), K(task_key), K(ret_code)); if (OB_UNLIKELY(!is_inited_)) { ret = OB_NOT_INIT; LOG_WARN("not init", K(ret)); @@ -2020,6 +2019,7 @@ int ObDDLScheduler::on_column_checksum_calc_reply( }))) { LOG_WARN("failed to modify task", K(ret)); } + LOG_INFO("receive column checksum response", K(ret), K(tablet_id), K(task_key), K(ret_code)); return ret; } diff --git a/src/rootserver/ddl_task/ob_ddl_task.cpp b/src/rootserver/ddl_task/ob_ddl_task.cpp index 8c9888341b..b110556c49 100644 --- a/src/rootserver/ddl_task/ob_ddl_task.cpp +++ b/src/rootserver/ddl_task/ob_ddl_task.cpp @@ -1963,6 +1963,7 @@ int ObDDLWaitColumnChecksumCtx::init( || OB_INVALID_ID == tenant_id || OB_INVALID_ID == source_table_id || OB_INVALID_ID == target_table_id + || source_table_id == target_table_id || schema_version <= 0 || snapshot_version <= 0 || execution_id < 0 @@ -1972,11 +1973,15 @@ int ObDDLWaitColumnChecksumCtx::init( K(schema_version), K(snapshot_version), K(execution_id)); } else { ObArray tablet_ids; + hash::ObHashSet tablet_set; PartitionColChecksumStat tmp_stat; const int64_t NEED_CALC_CHECKSUM_COUNT = 2; // source table and target table tmp_stat.col_checksum_stat_ = CCS_INVALID; tmp_stat.execution_id_ = execution_id; tmp_stat.snapshot_ = -1; + if (OB_FAIL(tablet_set.create(1023))) { + LOG_WARN("create tablet set failed", K(ret)); + } for (int64_t i = 0; OB_SUCC(ret) && i < NEED_CALC_CHECKSUM_COUNT; ++i) { const uint64_t cur_table_id = 0 == i ? source_table_id : target_table_id; tablet_ids.reset(); @@ -1992,7 +1997,9 @@ int ObDDLWaitColumnChecksumCtx::init( for (int64_t j = 0; OB_SUCC(ret) && j < tablet_ids.count(); ++j) { tmp_stat.tablet_id_ = tablet_ids.at(j); tmp_stat.table_id_ = cur_table_id; - if (OB_FAIL(stat_array_.push_back(tmp_stat))) { + if (OB_FAIL(tablet_set.set_refactored(tmp_stat.tablet_id_, 0/*not cover exists object*/))) { + LOG_WARN("put into set failed", K(ret), K(tmp_stat)); + } else if (OB_FAIL(stat_array_.push_back(tmp_stat))) { LOG_WARN("push batck column checksum status array failed", K(ret), K(tmp_stat)); } } @@ -2032,6 +2039,8 @@ void ObDDLWaitColumnChecksumCtx::reset() int ObDDLWaitColumnChecksumCtx::try_wait(bool &is_column_checksum_ready) { is_column_checksum_ready = false; + int64_t success_count = 0; + int64_t send_succ_count = 0; int ret = OB_SUCCESS; if (OB_UNLIKELY(!is_inited_)) { ret = OB_NOT_INIT; @@ -2041,7 +2050,6 @@ int ObDDLWaitColumnChecksumCtx::try_wait(bool &is_column_checksum_ready) } else { SpinRLockGuard guard(lock_); const int64_t check_count = stat_array_.count(); - int64_t success_count = 0; for (int64_t i = 0; OB_SUCC(ret) && i < check_count; ++i) { const PartitionColChecksumStat &item = stat_array_.at(i); if (!item.is_valid()) { @@ -2062,7 +2070,6 @@ int ObDDLWaitColumnChecksumCtx::try_wait(bool &is_column_checksum_ready) } } if (OB_SUCC(ret) && !is_calc_done_) { - int64_t send_succ_count = 0; if (0 != last_drive_ts_ && last_drive_ts_ + timeout_us_ < ObTimeUtility::current_time()) { // wait too long, refresh to retry send rpc if (OB_FAIL(refresh_zombie_task())) { @@ -2077,6 +2084,9 @@ int ObDDLWaitColumnChecksumCtx::try_wait(bool &is_column_checksum_ready) } } is_column_checksum_ready = is_calc_done_; + if (REACH_TIME_INTERVAL(1000L * 1000L)) { + LOG_INFO("try wait checksum", K(ret), K(stat_array_.count()), K(success_count), K(send_succ_count)); + } return ret; } @@ -2110,6 +2120,18 @@ int ObDDLWaitColumnChecksumCtx::update_status(const common::ObTabletID &tablet_i if (!found) { ret = OB_ENTRY_NOT_EXIST; LOG_WARN("column_checksum_stat not found", K(ret), K(tablet_id)); + } else { + int64_t last_found_pos = -1; + for (int64_t i = 0; i < stat_array_.count(); ++i) { + PartitionColChecksumStat &item = stat_array_.at(i); + if (tablet_id == item.tablet_id_) { + if (last_found_pos < 0) { + last_found_pos = i; + } else { + LOG_WARN("duplicated tablet id for validating checksum", K(tablet_id), K(last_found_pos), K(i)); + } + } + } } } return ret; diff --git a/src/rootserver/ddl_task/ob_ddl_task.h b/src/rootserver/ddl_task/ob_ddl_task.h index 601e43f409..a8bfac4678 100644 --- a/src/rootserver/ddl_task/ob_ddl_task.h +++ b/src/rootserver/ddl_task/ob_ddl_task.h @@ -260,7 +260,7 @@ public: int try_wait(bool &is_trans_end, int64_t &snapshot_version, const bool need_wait_trans_end = true); transaction::ObTransID get_pending_tx_id() const { return pending_tx_id_; } TO_STRING_KV(K(is_inited_), K_(tenant_id), K(table_id_), K(is_trans_end_), K(wait_type_), - K(wait_version_), K_(pending_tx_id), K(tablet_ids_), K(snapshot_array_)); + K(wait_version_), K_(pending_tx_id), K(tablet_ids_.count()), K(snapshot_array_.count())); private: static bool is_wait_trans_type_valid(const WaitTransType wait_trans_type); diff --git a/src/rootserver/ddl_task/ob_table_redefinition_task.cpp b/src/rootserver/ddl_task/ob_table_redefinition_task.cpp index 5f5c963bed..d56cbfbaf9 100644 --- a/src/rootserver/ddl_task/ob_table_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_table_redefinition_task.cpp @@ -954,6 +954,8 @@ int ObTableRedefinitionTask::serialize_params_to_message(char *buf, const int64_ } else if (OB_FAIL(serialization::encode_i8(buf, buf_len, pos, do_finish))) { LOG_WARN("fail to serialize is_do_finish"); } + FLOG_INFO("serialize message for table redefinition", K(ret), + K(copy_indexes), K(copy_triggers), K(copy_constraints), K(copy_foreign_keys), K(ignore_errors), K(do_finish), K(*this)); return ret; } @@ -1002,6 +1004,8 @@ int ObTableRedefinitionTask::deserlize_params_from_message(const char *buf, cons is_do_finish_ = static_cast(do_finish); } } + FLOG_INFO("deserialize message for table redefinition", K(ret), + K(copy_indexes), K(copy_triggers), K(copy_constraints), K(copy_foreign_keys), K(ignore_errors), K(do_finish), K(*this)); return ret; } diff --git a/src/rootserver/ddl_task/ob_table_redefinition_task.h b/src/rootserver/ddl_task/ob_table_redefinition_task.h index 43c24f6722..6f28b032e1 100644 --- a/src/rootserver/ddl_task/ob_table_redefinition_task.h +++ b/src/rootserver/ddl_task/ob_table_redefinition_task.h @@ -61,6 +61,10 @@ public: virtual void flt_set_task_span_tag() const override; virtual void flt_set_status_span_tag() const override; static bool check_task_status_before_pending(const share::ObDDLTaskStatus task_status); + INHERIT_TO_STRING_KV("ObDDLRedefinitionTask", ObDDLRedefinitionTask, + K(has_rebuild_index_), K(has_rebuild_constraint_), K(has_rebuild_foreign_key_), + K(is_copy_indexes_), K(is_copy_triggers_), K(is_copy_constraints_), + K(is_copy_foreign_keys_), K(is_ignore_errors_), K(is_do_finish_)); protected: int table_redefinition(const share::ObDDLTaskStatus next_task_status); int copy_table_dependent_objects(const share::ObDDLTaskStatus next_task_status); diff --git a/src/rootserver/ob_root_service.cpp b/src/rootserver/ob_root_service.cpp index 2db8d77b9b..ecc535e8ea 100644 --- a/src/rootserver/ob_root_service.cpp +++ b/src/rootserver/ob_root_service.cpp @@ -3957,7 +3957,7 @@ int ObRootService::finish_redef_table(const obrpc::ObFinishRedefTableArg &arg) int ObRootService::copy_table_dependents(const obrpc::ObCopyTableDependentsArg &arg) { - LOG_DEBUG("receive copy table dependents arg", K(arg)); + LOG_INFO("receive copy table dependents arg", K(arg)); int ret = OB_SUCCESS; const int64_t task_id = arg.task_id_; const uint64_t tenant_id = arg.tenant_id_;