[FEAT MERGE] 4.2 add trans_debug_info for 4377

Co-authored-by: Handora <qcdsr970209@gmail.com>
This commit is contained in:
yishenglanlingzui
2023-05-06 06:08:35 +00:00
committed by ob-robot
parent 711f4d5cd0
commit 9e328378c8
63 changed files with 1013 additions and 169 deletions

View File

@ -0,0 +1,71 @@
/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "storage/concurrency_control/ob_trans_stat_row.h"
#include "sql/engine/basic/ob_pushdown_filter.h"
namespace oceanbase
{
namespace concurrency_control
{
void build_trans_stat_datum(const storage::ObTableIterParam *param,
const blocksstable::ObDatumRow &row,
const ObTransStatRow trans_stat_row)
{
const int64_t MAX_SIZE_FOR_TRANS_STAT_DATUM = 100;
// trans stat datum index for vectorized execution
TRANS_LOG(DEBUG, "memtable try to generate trans_info",
K(trans_stat_row), K(param), K(param->op_), K(row.trans_info_),
K(lbt()));
char *trans_stat_ptr = row.trans_info_;
if (OB_NOT_NULL(param->op_)
&& OB_NOT_NULL(trans_stat_ptr)) {
trans_stat_ptr[0] = '\0';
concurrency_control::build_trans_stat_(trans_stat_row,
MAX_SIZE_FOR_TRANS_STAT_DATUM,
trans_stat_ptr);
TRANS_LOG(DEBUG, "memtable generate trans_info",
K(ObString(strlen(trans_stat_ptr), trans_stat_ptr)),
K(param->op_->is_vectorized()), K(trans_stat_row), K(param),
K(param->op_->eval_ctx_));
}
}
void build_trans_stat_(const ObTransStatRow trans_stat_row,
const int64_t trans_stat_len,
char *trans_stat_ptr)
{
int ret = OB_SUCCESS;
int64_t pos = 0;
if (OB_FAIL(databuff_printf(trans_stat_ptr,
trans_stat_len,
pos,
"[%ld, %ld, %ld, %ld]",
trans_stat_row.trans_version_.get_val_for_tx(),
trans_stat_row.scn_.get_val_for_tx(),
trans_stat_row.trans_id_.get_id(),
trans_stat_row.seq_no_))) {
TRANS_LOG(WARN, "failed to printf", K(ret), K(pos), K(trans_stat_len), K(trans_stat_row));
trans_stat_ptr[0] = '\0';
} else {
if (pos > trans_stat_len) {
ret = OB_ERR_UNEXPECTED;
TRANS_LOG(ERROR, "unexpected length for datum", K(pos));
trans_stat_ptr[0] = '\0';
}
}
}
} // namespace concurrency_control
} // namespace oceanbase

View File

@ -0,0 +1,73 @@
/**
* Copyright (c) 2023 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_STORAGE_CONCURRENCY_CONTROL_OB_TRANS_STAT_ROW
#define OCEANBASE_STORAGE_CONCURRENCY_CONTROL_OB_TRANS_STAT_ROW
#include "share/scn.h"
#include "share/datum/ob_datum.h"
#include "storage/access/ob_table_access_param.h"
namespace oceanbase
{
namespace concurrency_control
{
class ObTransStatRow
{
public:
ObTransStatRow()
: trans_version_(share::SCN::max_scn()),
scn_(share::SCN::max_scn()),
trans_id_(),
seq_no_(0) {}
void set(const share::SCN trans_version,
const share::SCN scn,
const transaction::ObTransID trans_id,
const int64_t seq_no)
{
trans_version_ = trans_version;
scn_ = scn;
trans_id_ = trans_id;
seq_no_ = seq_no;
}
void reset()
{
trans_version_ = share::SCN::max_scn();
scn_ = share::SCN::max_scn();
trans_id_.reset();
seq_no_ = 0;
}
TO_STRING_KV(K_(trans_version), K_(scn), K_(trans_id), K_(seq_no));
share::SCN trans_version_;
share::SCN scn_;
transaction::ObTransID trans_id_;
int64_t seq_no_;
public:
static const int64_t MAX_TRANS_STRING_SIZE = 120;
};
void build_trans_stat_datum(const storage::ObTableIterParam *param,
const blocksstable::ObDatumRow &row,
const ObTransStatRow trans_stat_row);
void build_trans_stat_(const ObTransStatRow trans_stat_row,
const int64_t trans_stat_len,
char *trans_stat_ptr);
} // namespace concurrency_control
} // namespace oceanbase
#endif // OCEANBASE_STORAGE_CONCURRENCY_CONTROL_OB_TRANS_STAT_ROW