36
36
#define INVALID_CID 0
37
37
#define MIN_WAIT_TIMEOUT 1000
38
38
#define MAX_WAIT_TIMEOUT 100000
39
- #define MAX_GTID_SIZE 16
40
39
#define HASH_PER_ELEM_OVERHEAD 64
41
40
42
41
#define USEC 1000000
@@ -297,12 +296,6 @@ dtm_shmem_startup(void)
297
296
DtmInitialize ();
298
297
}
299
298
300
- static GlobalTransactionId
301
- dtm_get_global_trans_id ()
302
- {
303
- return GetLockedGlobalTransactionId ();
304
- }
305
-
306
299
static void
307
300
dtm_xact_callback (XactEvent event , void * arg )
308
301
{
@@ -324,15 +317,15 @@ dtm_xact_callback(XactEvent event, void *arg)
324
317
break ;
325
318
326
319
case XACT_EVENT_ABORT_PREPARED :
327
- DtmLocalAbortPrepared (& dtm_tx , dtm_get_global_trans_id () );
320
+ DtmLocalAbortPrepared (& dtm_tx );
328
321
break ;
329
322
330
323
case XACT_EVENT_COMMIT_PREPARED :
331
- DtmLocalCommitPrepared (& dtm_tx , dtm_get_global_trans_id () );
324
+ DtmLocalCommitPrepared (& dtm_tx );
332
325
break ;
333
326
334
327
case XACT_EVENT_PREPARE :
335
- DtmLocalSavePreparedState (dtm_get_global_trans_id () );
328
+ DtmLocalSavePreparedState (& dtm_tx );
336
329
DtmLocalEnd (& dtm_tx );
337
330
break ;
338
331
@@ -679,6 +672,7 @@ DtmLocalExtend(DtmCurrentTrans * x, GlobalTransactionId gtid)
679
672
id -> nSubxids = 0 ;
680
673
id -> subxids = 0 ;
681
674
}
675
+ strncpy (x -> gtid , gtid , MAX_GTID_SIZE );
682
676
SpinLockRelease (& local -> lock );
683
677
}
684
678
x -> is_global = true;
@@ -708,6 +702,7 @@ DtmLocalAccess(DtmCurrentTrans * x, GlobalTransactionId gtid, cid_t global_cid)
708
702
x -> snapshot = global_cid ;
709
703
x -> is_global = true;
710
704
}
705
+ strncpy (x -> gtid , gtid , MAX_GTID_SIZE );
711
706
SpinLockRelease (& local -> lock );
712
707
if (global_cid < local_cid - DtmVacuumDelay * USEC )
713
708
{
@@ -813,13 +808,13 @@ DtmLocalEndPrepare(GlobalTransactionId gtid, cid_t cid)
813
808
* Mark tranasction as prepared
814
809
*/
815
810
void
816
- DtmLocalCommitPrepared (DtmCurrentTrans * x , GlobalTransactionId gtid )
811
+ DtmLocalCommitPrepared (DtmCurrentTrans * x )
817
812
{
818
- Assert (gtid != NULL );
813
+ Assert (x -> gtid != NULL );
819
814
820
815
SpinLockAcquire (& local -> lock );
821
816
{
822
- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_REMOVE , NULL );
817
+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_REMOVE , NULL );
823
818
824
819
Assert (id != NULL );
825
820
@@ -881,13 +876,13 @@ DtmLocalCommit(DtmCurrentTrans * x)
881
876
* Mark tranasction as prepared
882
877
*/
883
878
void
884
- DtmLocalAbortPrepared (DtmCurrentTrans * x , GlobalTransactionId gtid )
879
+ DtmLocalAbortPrepared (DtmCurrentTrans * x )
885
880
{
886
- Assert (gtid != NULL );
881
+ Assert (x -> gtid != NULL );
887
882
888
883
SpinLockAcquire (& local -> lock );
889
884
{
890
- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_REMOVE , NULL );
885
+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_REMOVE , NULL );
891
886
892
887
Assert (id != NULL );
893
888
@@ -998,13 +993,13 @@ DtmGetCsn(TransactionId xid)
998
993
* Save state of parepared transaction
999
994
*/
1000
995
void
1001
- DtmLocalSavePreparedState (GlobalTransactionId gtid )
996
+ DtmLocalSavePreparedState (DtmCurrentTrans * x )
1002
997
{
1003
- if (gtid != NULL )
998
+ if (x -> gtid [ 0 ] )
1004
999
{
1005
1000
SpinLockAcquire (& local -> lock );
1006
1001
{
1007
- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_FIND , NULL );
1002
+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_FIND , NULL );
1008
1003
1009
1004
if (id != NULL )
1010
1005
{
0 commit comments