[CP] [to #53768441] fix pl retry logic with package state change & fill cursor

This commit is contained in:
obdev
2024-02-08 16:53:16 +00:00
committed by ob-robot
parent 75300339f3
commit 262a63c5ac
2 changed files with 18 additions and 1 deletions

View File

@ -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;
} }

View File

@ -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;
} }