[CP] [to #53768441] fix pl retry logic with package state change & fill cursor
This commit is contained in:
@ -849,6 +849,7 @@ int ObPLPackageManager::set_package_var_val(const ObPLResolveCtx &resolve_ctx,
|
|||||||
}
|
}
|
||||||
if (!need_deserialize) {
|
if (!need_deserialize) {
|
||||||
OZ (package_state->update_changed_vars(var_idx));
|
OZ (package_state->update_changed_vars(var_idx));
|
||||||
|
OX (resolve_ctx.session_info_.set_pl_can_retry(false));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3713,6 +3713,21 @@ int ObSPIService::spi_cursor_open(ObPLExecCtx *ctx,
|
|||||||
spi_cursor->fields_));
|
spi_cursor->fields_));
|
||||||
//}
|
//}
|
||||||
OZ (fill_cursor(*spi_result.get_result_set(), spi_cursor));
|
OZ (fill_cursor(*spi_result.get_result_set(), spi_cursor));
|
||||||
|
if (OB_FAIL(ret) && OB_NOT_NULL(spi_result.get_result_set())) {
|
||||||
|
int cli_ret = OB_SUCCESS;
|
||||||
|
retry_ctrl.test_and_save_retry_state(GCTX,
|
||||||
|
spi_result.get_sql_ctx(),
|
||||||
|
*spi_result.get_result_set(),
|
||||||
|
ret,
|
||||||
|
cli_ret,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true);
|
||||||
|
LOG_WARN("failed to do fill_cursor, check if need retry", K(ret), K(cli_ret), K(retry_ctrl.need_retry()), K(sql), K(ps_sql));
|
||||||
|
ret = cli_ret;
|
||||||
|
spi_result.get_sql_ctx().clear();
|
||||||
|
ctx->exec_ctx_->get_my_session()->set_session_in_retry(retry_ctrl.need_retry());
|
||||||
|
}
|
||||||
OX (spi_cursor->row_store_.finish_add_row())
|
OX (spi_cursor->row_store_.finish_add_row())
|
||||||
OX (cursor->open(spi_cursor));
|
OX (cursor->open(spi_cursor));
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
@ -3988,7 +4003,7 @@ int ObSPIService::dbms_cursor_open(ObPLExecCtx *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
OZ (fill_cursor(*spi_result.get_result_set(), spi_cursor));
|
OZ (fill_cursor(*spi_result.get_result_set(), spi_cursor));
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret) && OB_NOT_NULL(spi_result.get_result_set())) {
|
||||||
int cli_ret = OB_SUCCESS;
|
int cli_ret = OB_SUCCESS;
|
||||||
retry_ctrl.test_and_save_retry_state(GCTX,
|
retry_ctrl.test_and_save_retry_state(GCTX,
|
||||||
spi_result.get_sql_ctx(),
|
spi_result.get_sql_ctx(),
|
||||||
@ -8550,6 +8565,7 @@ int ObSPIService::spi_update_package_change_info(
|
|||||||
OZ (session_info->get_package_state(package_id, package_state));
|
OZ (session_info->get_package_state(package_id, package_state));
|
||||||
CK (OB_NOT_NULL(package_state));
|
CK (OB_NOT_NULL(package_state));
|
||||||
OZ (package_state->update_changed_vars(var_idx));
|
OZ (package_state->update_changed_vars(var_idx));
|
||||||
|
OX (session_info->set_pl_can_retry(false));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user