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/include/TransactionState.h

50 lines
1.8 KiB

/**
* @file TransactionState.h
* @brief Pure transaction state tracking logic for unit testability.
*
* Extracted from MySQL_Session/PgSQL_Session transaction persistence
* logic. The decision is identical for both protocols.
*
* @see Phase 3.8 (GitHub issue #5496)
*/
#ifndef TRANSACTION_STATE_H
#define TRANSACTION_STATE_H
/**
* @brief Update transaction_persistent_hostgroup based on backend state.
*
* Mirrors the transaction persistence logic in MySQL_Session and
* PgSQL_Session (near handler_rc0_Process_Resultset):
* - When a transaction starts on a backend, lock to the current HG
* - When a transaction ends, unlock (-1)
*
* @param transaction_persistent Whether transaction persistence is enabled.
* @param transaction_persistent_hostgroup Current persistent HG (-1 = none).
* @param current_hostgroup HG where the query executed.
* @param backend_in_transaction Whether the backend has an active transaction.
* @return Updated transaction_persistent_hostgroup value.
*/
int update_transaction_persistent_hostgroup(
bool transaction_persistent,
int transaction_persistent_hostgroup,
int current_hostgroup,
bool backend_in_transaction
);
/**
* @brief Check if a transaction has exceeded the maximum allowed time.
*
* @param transaction_started_at Timestamp when transaction started, in microseconds (0 = none).
* @param current_time Current timestamp, in microseconds.
* @param max_transaction_time_ms Maximum transaction time in milliseconds (0 or negative = no limit).
* @return true if the transaction has exceeded the time limit.
*/
bool is_transaction_timed_out(
unsigned long long transaction_started_at,
unsigned long long current_time,
int max_transaction_time_ms
);
#endif // TRANSACTION_STATE_H