int CommitTranGTM(GlobalTransactionId gxid) { int ret; if (!GlobalTransactionIdIsValid(gxid)) return 0; CheckConnection(); ret = commit_transaction(conn, gxid); /* * If something went wrong (timeout), try and reset GTM connection. * We will close the transaction locally anyway, and closing GTM will force * it to be closed on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); } /* Close connection in case commit is done by autovacuum worker or launcher */ if (IsAutoVacuumWorkerProcess() || IsAutoVacuumLauncherProcess()) CloseGTM(); return ret; }
int StartPreparedTranGTM(GlobalTransactionId gxid, char *gid, char *nodestring) { int ret = 0; if (!GlobalTransactionIdIsValid(gxid)) return 0; CheckConnection(); ret = start_prepared_transaction(conn, gxid, gid, nodestring); /* * If something went wrong (timeout), try and reset GTM connection. * We will abort the transaction locally anyway, and closing GTM will force * it to end on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); } return ret; }
int RollbackTranGTM(GlobalTransactionId gxid) { int ret = -1; if (!GlobalTransactionIdIsValid(gxid)) return 0; CheckConnection(); if (conn) ret = abort_transaction(conn, gxid); /* * If something went wrong (timeout), try and reset GTM connection. * We will abort the transaction locally anyway, and closing GTM will force * it to end on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); } currentGxid = InvalidGlobalTransactionId; return ret; }
int PrepareTranGTM(GlobalTransactionId gxid) { int ret; if (!GlobalTransactionIdIsValid(gxid)) return 0; CheckConnection(); #ifdef XCP ret = -1; if (conn) #endif ret = prepare_transaction(conn, gxid); /* * If something went wrong (timeout), try and reset GTM connection. * We will close the transaction locally anyway, and closing GTM will force * it to be closed on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); #ifdef XCP if (conn) ret = prepare_transaction(conn, gxid); #endif } currentGxid = InvalidGlobalTransactionId; return ret; }
/* * For a prepared transaction, commit the gxid used for PREPARE TRANSACTION * and for COMMIT PREPARED. */ int CommitPreparedTranGTM(GlobalTransactionId gxid, GlobalTransactionId prepared_gxid) { int ret = 0; if (!GlobalTransactionIdIsValid(gxid) || !GlobalTransactionIdIsValid(prepared_gxid)) return ret; CheckConnection(); ret = commit_prepared_transaction(conn, gxid, prepared_gxid); /* * If something went wrong (timeout), try and reset GTM connection. * We will close the transaction locally anyway, and closing GTM will force * it to be closed on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); } return ret; }
/* * For a prepared transaction, commit the gxid used for PREPARE TRANSACTION * and for COMMIT PREPARED. */ int CommitPreparedTranGTM(GlobalTransactionId gxid, GlobalTransactionId prepared_gxid, int waited_xid_count, GlobalTransactionId *waited_xids) { int ret = 0; if (!GlobalTransactionIdIsValid(gxid) || !GlobalTransactionIdIsValid(prepared_gxid)) return ret; CheckConnection(); #ifdef XCP ret = -1; if (conn) #endif ret = commit_prepared_transaction(conn, gxid, prepared_gxid, waited_xid_count, waited_xids); /* * If something went wrong (timeout), try and reset GTM connection. * We will close the transaction locally anyway, and closing GTM will force * it to be closed on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); #ifdef XCP if (conn) ret = commit_prepared_transaction(conn, gxid, prepared_gxid, waited_xid_count, waited_xids); #endif } currentGxid = InvalidGlobalTransactionId; return ret; }
int CommitTranGTM(GlobalTransactionId gxid, int waited_xid_count, GlobalTransactionId *waited_xids) { int ret; if (!GlobalTransactionIdIsValid(gxid)) return 0; CheckConnection(); #ifdef XCP ret = -1; if (conn) #endif ret = commit_transaction(conn, gxid, waited_xid_count, waited_xids); /* * If something went wrong (timeout), try and reset GTM connection. * We will close the transaction locally anyway, and closing GTM will force * it to be closed on GTM. */ if (ret < 0) { CloseGTM(); InitGTM(); #ifdef XCP if (conn) ret = commit_transaction(conn, gxid, waited_xid_count, waited_xids); #endif } /* Close connection in case commit is done by autovacuum worker or launcher */ if (IsAutoVacuumWorkerProcess() || IsAutoVacuumLauncherProcess()) CloseGTM(); currentGxid = InvalidGlobalTransactionId; return ret; }