From 359f9b38f85359e0cd93d13f95fb297c474b49f5 Mon Sep 17 00:00:00 2001 From: Barzilai Spinak Date: Thu, 19 May 2022 13:53:40 -0300 Subject: [PATCH 1/2] QueryHost force abort when expired in continuations mode --- .../main/java/org/jpos/transaction/participant/QueryHost.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java b/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java index 56a856826f..6a8d8ff382 100644 --- a/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java +++ b/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java @@ -100,16 +100,19 @@ public int prepare (long id, Serializable ser) { return PREPARED | NO_JOIN | READONLY; } + @Override public void responseReceived (ISOMsg resp, Object handBack) { Context ctx = (Context) handBack; ctx.put (responseName, resp); ctx.resume(); } + @Override public void expired (Object handBack) { Context ctx = (Context) handBack; String ds = ctx.getString(destination); String muxName = cfg.get ("mux." + ds , "mux." + ds); ctx.getResult().fail(CMF.HOST_UNREACHABLE, Caller.info(), "'%s' does not respond", muxName).FAIL(); + ctx.getPausedTransaction().forceAbort(); ctx.resume(); } From 22c33081d6b13f3e19fe4be6bfaafa479267b034 Mon Sep 17 00:00:00 2001 From: Barzilai Spinak Date: Thu, 19 May 2022 14:59:00 -0300 Subject: [PATCH 2/2] TransactionManager: give explicit info about forced abort of paused txn --- .../main/java/org/jpos/transaction/TransactionManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jpos/src/main/java/org/jpos/transaction/TransactionManager.java b/jpos/src/main/java/org/jpos/transaction/TransactionManager.java index 2a3946b3eb..e9090907d6 100644 --- a/jpos/src/main/java/org/jpos/transaction/TransactionManager.java +++ b/jpos/src/main/java/org/jpos/transaction/TransactionManager.java @@ -275,6 +275,9 @@ public void run () { if (prof != null) prof.reenable(); pausedCounter.decrementAndGet(); + + if (evt != null && abort) + evt.addMessage (" [force abort]"); } } else pt = null; @@ -312,7 +315,8 @@ public void run () { if (prof == null) prof = new Profiler(); else - prof.checkPoint("resume"); + prof.checkPoint("resume" + + (pt != null && pt.isAborting() ? " [force abort]" : "")); } snapshot (id, context, PREPARING); setThreadLocal(id, context);