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/TransactionState.cpp

56 lines
1.4 KiB

/**
* @file TransactionState.cpp
* @brief Implementation of pure transaction state tracking.
*
* @see TransactionState.h
* @see Phase 3.8 (GitHub issue #5496)
*/
#include "TransactionState.h"
int update_transaction_persistent_hostgroup(
bool transaction_persistent,
int transaction_persistent_hostgroup,
int current_hostgroup,
bool backend_in_transaction)
{
if (!transaction_persistent) {
return -1; // persistence disabled
}
if (transaction_persistent_hostgroup == -1) {
// Not currently locked — lock if transaction just started
if (backend_in_transaction) {
return current_hostgroup;
}
} else {
// Currently locked — unlock if transaction just ended
if (!backend_in_transaction) {
return -1;
}
}
return transaction_persistent_hostgroup; // no change
}
bool is_transaction_timed_out(
unsigned long long transaction_started_at,
unsigned long long current_time,
int max_transaction_time_ms)
{
if (transaction_started_at == 0) {
return false; // no active transaction
}
if (max_transaction_time_ms <= 0) {
return false; // no time limit
}
unsigned long long elapsed_ms = 0;
if (current_time > transaction_started_at) {
elapsed_ms = (current_time - transaction_started_at) / 1000;
// transaction_started_at and current_time are in microseconds
}
return (elapsed_ms > (unsigned long long)max_transaction_time_ms);
}