@@ -464,13 +464,15 @@ static void MtmInitialize()
464464 dtm -> transListTail = & dtm -> transListHead ;
465465 dtm -> nReceivers = 0 ;
466466 dtm -> timeShift = 0 ;
467+ dtm -> transCount = 0 ;
468+ memset (dtm -> nodeTransDelay , 0 , sizeof (dtm -> nodeTransDelay ));
467469 PGSemaphoreCreate (& dtm -> votingSemaphore );
468470 PGSemaphoreReset (& dtm -> votingSemaphore );
469471 SpinLockInit (& dtm -> spinlock );
470472 BgwPoolInit (& dtm -> pool , MtmExecutor , MtmDatabaseName , MtmQueueSize );
471473 RegisterXactCallback (MtmXactCallback , NULL );
472474 dtmTx .snapshot = INVALID_CSN ;
473- dtmTx .xid = InvalidTransactionId ;
475+ dtmTx .xid = InvalidTransactionId ;
474476 }
475477 xid2state = MtmCreateHash ();
476478 MtmDoReplication = true;
@@ -628,7 +630,8 @@ static void MtmPrecommitTransaction(MtmCurrentTrans* x)
628630 ts -> procno = MyProc -> pgprocno ;
629631 ts -> nVotes = 0 ;
630632 ts -> done = false;
631-
633+ dtm -> transCount += 1 ;
634+
632635 if (TransactionIdIsValid (x -> gtid .xid )) {
633636 ts -> gtid = x -> gtid ;
634637 } else {
@@ -1282,8 +1285,8 @@ typedef struct
12821285 int nodeId ;
12831286 char * connStrPtr ;
12841287 TupleDesc desc ;
1285- Datum values [6 ];
1286- bool nulls [6 ];
1288+ Datum values [7 ];
1289+ bool nulls [7 ];
12871290} MtmGetNodeStateCtx ;
12881291
12891292Datum
@@ -1319,11 +1322,12 @@ mtm_get_nodes_state(PG_FUNCTION_ARGS)
13191322 lag = MtmGetSlotLag (usrfctx -> nodeId );
13201323 usrfctx -> values [4 ] = Int64GetDatum (lag );
13211324 usrfctx -> nulls [4 ] = lag < 0 ;
1325+ usrfctx -> values [5 ] = Int64GetDatum (dtm -> transCount ? dtm -> nodeTransDelay [usrfctx -> nodeId - 1 ]/dtm -> transCount : 0 );
13221326 p = strchr (usrfctx -> connStrPtr , ',' );
13231327 if (p != NULL ) {
13241328 * p ++ = '\0' ;
13251329 }
1326- usrfctx -> values [5 ] = CStringGetTextDatum (usrfctx -> connStrPtr );
1330+ usrfctx -> values [6 ] = CStringGetTextDatum (usrfctx -> connStrPtr );
13271331 usrfctx -> connStrPtr = p ;
13281332 usrfctx -> nodeId += 1 ;
13291333
@@ -1334,8 +1338,8 @@ Datum
13341338mtm_get_cluster_state (PG_FUNCTION_ARGS )
13351339{
13361340 TupleDesc desc ;
1337- Datum values [7 ];
1338- bool nulls [7 ] = {false};
1341+ Datum values [10 ];
1342+ bool nulls [10 ] = {false};
13391343 get_call_result_type (fcinfo , NULL , & desc );
13401344
13411345 values [0 ] = CStringGetTextDatum (MtmNodeStatusMnem [dtm -> status ]);
@@ -1345,6 +1349,10 @@ mtm_get_cluster_state(PG_FUNCTION_ARGS)
13451349 values [4 ] = Int32GetDatum (dtm -> nNodes );
13461350 values [5 ] = Int32GetDatum ((int )dtm -> pool .active );
13471351 values [6 ] = Int64GetDatum (BgwPoolGetQueueSize (& dtm -> pool ));
1352+ values [7 ] = Int64GetDatum (dtm -> transCount );
1353+ values [8 ] = Int64GetDatum (dtm -> timeShift );
1354+ values [9 ] = Int32GetDatum (dtm -> recoverySlot );
1355+ nulls [9 ] = dtm -> recoverySlot == 0 ;
13481356
13491357 PG_RETURN_DATUM (HeapTupleGetDatum (heap_form_tuple (desc , values , nulls )));
13501358}
0 commit comments