You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/lib/MySQLErrorClassifier.cpp

67 lines
1.4 KiB

/**
* @file MySQLErrorClassifier.cpp
* @brief Implementation of MySQL error classification.
*
* @see MySQLErrorClassifier.h
* @see Phase 3.7 (GitHub issue #5495)
*/
#include "MySQLErrorClassifier.h"
MySQLErrorAction classify_mysql_error(
unsigned int error_code,
int retries_remaining,
bool connection_reusable,
bool in_active_transaction,
bool multiplex_disabled)
{
// Check if this error code is retryable
bool retryable_error = false;
switch (error_code) {
case 1047: // ER_UNKNOWN_COM_ERROR (WSREP not ready)
case 1053: // ER_SERVER_SHUTDOWN
retryable_error = true;
break;
default:
break;
}
if (!retryable_error) {
return MYSQL_ERROR_REPORT_TO_CLIENT;
}
// Check retry conditions (mirrors handler_minus1_HandleErrorCodes)
if (retries_remaining > 0
&& connection_reusable
&& !in_active_transaction
&& !multiplex_disabled) {
return MYSQL_ERROR_RETRY_ON_NEW_CONN;
}
return MYSQL_ERROR_REPORT_TO_CLIENT;
}
bool can_retry_on_new_connection(
bool server_offline,
int retries_remaining,
bool connection_reusable,
bool in_active_transaction,
bool multiplex_disabled,
bool transfer_started)
{
if (!server_offline) {
return false; // server is fine, no retry needed
}
// Mirror handler_ProcessingQueryError_CheckBackendConnectionStatus
if (retries_remaining > 0
&& connection_reusable
&& !in_active_transaction
&& !multiplex_disabled
&& !transfer_started) {
return true;
}
return false;
}