[CP] Fixed the inconsistency issue with PDML update index
This commit is contained in:
@ -1026,6 +1026,13 @@ int ObDMLService::lock_row(const ObDASLockCtDef &dlock_ctdef,
|
|||||||
stored_row);
|
stored_row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note: During the update process,
|
||||||
|
* ObDMLService::check_row_whether_changed() and ObDMLService::update_row() must be executed together
|
||||||
|
* within a single iteration,
|
||||||
|
* because the update_row process relies on check_row_whether_changed to determine
|
||||||
|
* whether the new and old values of the row being updated have changed.
|
||||||
|
**/
|
||||||
int ObDMLService::update_row(const ObUpdCtDef &upd_ctdef,
|
int ObDMLService::update_row(const ObUpdCtDef &upd_ctdef,
|
||||||
ObUpdRtDef &upd_rtdef,
|
ObUpdRtDef &upd_rtdef,
|
||||||
const ObDASTabletLoc *old_tablet_loc,
|
const ObDASTabletLoc *old_tablet_loc,
|
||||||
|
@ -100,7 +100,16 @@ int ObPxMultiPartUpdateOp::update_row_to_das(const ObDASTabletLoc *tablet_loc)
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObChunkDatumStore::StoredRow* stored_row = nullptr;
|
ObChunkDatumStore::StoredRow* stored_row = nullptr;
|
||||||
if (OB_FAIL(ObDMLService::update_row(MY_SPEC.upd_ctdef_, upd_rtdef_, tablet_loc, tablet_loc, dml_rtctx_, stored_row, stored_row, stored_row))) {
|
if (OB_FAIL(ObDMLService::check_row_whether_changed(MY_SPEC.upd_ctdef_, upd_rtdef_, eval_ctx_))) {
|
||||||
|
LOG_WARN("check row whether changed failed", K(ret));
|
||||||
|
} else if (OB_FAIL(ObDMLService::update_row(MY_SPEC.upd_ctdef_,
|
||||||
|
upd_rtdef_,
|
||||||
|
tablet_loc,
|
||||||
|
tablet_loc,
|
||||||
|
dml_rtctx_,
|
||||||
|
stored_row,
|
||||||
|
stored_row,
|
||||||
|
stored_row))) {
|
||||||
LOG_WARN("insert row with das failed", K(ret));
|
LOG_WARN("insert row with das failed", K(ret));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user