From c9b2955b569ca3655d4116befbe4231a8e2d1d77 Mon Sep 17 00:00:00 2001 From: a-polyakov Date: Wed, 6 Jun 2018 13:10:48 +0300 Subject: [PATCH] IGNITE-8601 Add to control.sh utility information about transaction start time and date --- .../internal/TransactionsMXBeanImpl.java | 4 +--- .../internal/commandline/CommandHandler.java | 4 +--- .../ignite/internal/visor/tx/VisorTxInfo.java | 24 +++++++++++++++---- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/TransactionsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/TransactionsMXBeanImpl.java index c8be6b03366c5c..eb95b06425d818 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/TransactionsMXBeanImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/TransactionsMXBeanImpl.java @@ -97,8 +97,6 @@ else if ("SIZE".equals(order)) PrintWriter w = new PrintWriter(sw); - DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); - for (Map.Entry entry : res.entrySet()) { if (entry.getValue().getInfos().isEmpty()) continue; @@ -111,7 +109,7 @@ else if ("SIZE".equals(order)) w.println(" Tx: [xid=" + info.getXid() + ", label=" + info.getLabel() + ", state=" + info.getState() + - ", startTime=" + dateFormat.format(info.getStartTime()) + + ", startTime=" + info.getFormattedStartTime() + ", duration=" + info.getDuration() / 1000 + ", isolation=" + info.getIsolation() + ", concurrency=" + info.getConcurrency() + diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java index 96e830d7d605e0..f2fb1a0632692f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java @@ -977,8 +977,6 @@ else if (arg.getOperation() == VisorTxOperation.KILL) else log("Matching transactions:"); - DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); - for (Map.Entry entry : res.entrySet()) { if (entry.getValue().getInfos().isEmpty()) continue; @@ -991,7 +989,7 @@ else if (arg.getOperation() == VisorTxOperation.KILL) log(" Tx: [xid=" + info.getXid() + ", label=" + info.getLabel() + ", state=" + info.getState() + - ", startTime=" + dateFormat.format(info.getStartTime()) + + ", startTime=" + info.getFormattedStartTime() + ", duration=" + info.getDuration() / 1000 + ", isolation=" + info.getIsolation() + ", concurrency=" + info.getConcurrency() + diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxInfo.java index 5c76cf75bf2ca5..ba2f32b2d0d14e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxInfo.java @@ -20,8 +20,11 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import java.io.Serializable; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collection; +import java.util.TimeZone; import java.util.UUID; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -37,6 +40,9 @@ public class VisorTxInfo extends VisorDataTransferObject { /** */ private static final long serialVersionUID = 0L; + /** */ + private static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); + /** */ private IgniteUuid xid; @@ -113,6 +119,10 @@ public long getStartTime() { return startTime; } + public String getFormattedStartTime() { + return dateTimeFormatter.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), TimeZone.getDefault().toZoneId())); + } + /** */ public long getDuration() { return duration; @@ -153,10 +163,14 @@ public int getSize() { return size; } + /** {@inheritDoc} */ + @Override public byte getProtocolVersion() { + return V2; + } + /** {@inheritDoc} */ @Override protected void writeExternalData(ObjectOutput out) throws IOException { U.writeGridUuid(out, xid); - out.writeLong(startTime); out.writeLong(duration); U.writeEnum(out, isolation); U.writeEnum(out, concurrency); @@ -165,12 +179,13 @@ public int getSize() { U.writeCollection(out, primaryNodes); U.writeEnum(out, state); out.writeInt(size); + out.writeLong(startTime); } /** {@inheritDoc} */ - @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException { + @Override protected void readExternalData(byte protoVer, + ObjectInput in) throws IOException, ClassNotFoundException { xid = U.readGridUuid(in); - startTime = in.readLong(); duration = in.readLong(); isolation = TransactionIsolation.fromOrdinal(in.readByte()); concurrency = TransactionConcurrency.fromOrdinal(in.readByte()); @@ -179,6 +194,7 @@ public int getSize() { primaryNodes = U.readCollection(in); state = TransactionState.fromOrdinal(in.readByte()); size = in.readInt(); + startTime = protoVer >= V2 ? in.readLong() : 0L; } /** {@inheritDoc} */