Browse Source

ZOOKEEPER-3332: TxnLogToolkit should print multi transactions readably

- more details in [ZOOKEEPER-3332](https://issues.apache.org/jira/browse/ZOOKEEPER-3332).

Author: maoling <maoling199210191@sina.com>

Reviewers: andor@apache.org

Closes #868 from maoling/ZOOKEEPER-3332
maoling 6 years ago
parent
commit
4b01c93745

+ 3 - 0
zookeeper-server/src/main/java/org/apache/zookeeper/server/LogFormatter.java

@@ -37,6 +37,9 @@ import org.apache.zookeeper.server.persistence.FileTxnLog;
 import org.apache.zookeeper.server.util.SerializeUtils;
 import org.apache.zookeeper.txn.TxnHeader;
 
+/**
+ * @deprecated deprecated in 3.5.5, use @see TxnLogToolkit instead
+ */
 @InterfaceAudience.Public
 public class LogFormatter {
     private static final Logger LOG = LoggerFactory.getLogger(LogFormatter.class);

+ 15 - 1
zookeeper-server/src/main/java/org/apache/zookeeper/server/TraceFormatter.java

@@ -48,7 +48,7 @@ public class TraceFormatter {
         case OpCode.exists:
             return "exists";
         case OpCode.getData:
-            return "getDate";
+            return "getData";
         case OpCode.setData:
             return "setData";
         case OpCode.multi:
@@ -75,6 +75,20 @@ public class TraceFormatter {
             return "error";
         case OpCode.reconfig:
            return "reconfig";
+        case OpCode.check:
+           return "check";
+        case OpCode.sync:
+            return "sync";
+        case OpCode.checkWatches:
+            return "checkWatches";
+        case OpCode.removeWatches:
+            return "removeWatches";
+        case OpCode.auth:
+            return "auth";
+        case OpCode.setWatches:
+            return "setWatches";
+        case OpCode.sasl:
+            return "sasl";
         default:
             return "unknown " + op;
         }

+ 14 - 0
zookeeper-server/src/main/java/org/apache/zookeeper/server/persistence/TxnLogToolkit.java

@@ -35,7 +35,9 @@ import org.apache.zookeeper.server.util.SerializeUtils;
 import org.apache.zookeeper.txn.CreateContainerTxn;
 import org.apache.zookeeper.txn.CreateTTLTxn;
 import org.apache.zookeeper.txn.CreateTxn;
+import org.apache.zookeeper.txn.MultiTxn;
 import org.apache.zookeeper.txn.SetDataTxn;
+import org.apache.zookeeper.txn.Txn;
 import org.apache.zookeeper.txn.TxnHeader;
 
 import java.io.BufferedInputStream;
@@ -51,6 +53,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.text.DateFormat;
 import java.util.Date;
+import java.util.List;
 import java.util.Scanner;
 import java.util.zip.Adler32;
 import java.util.zip.Checksum;
@@ -312,6 +315,17 @@ public class TxnLogToolkit implements Closeable {
             txnData.append(createTTLTxn.getPath() + "," + new String(createTTLTxn.getData()))
                    .append("," + createTTLTxn.getAcl() + "," + createTTLTxn.getParentCVersion())
                    .append("," + createTTLTxn.getTtl());
+        } else if (txn instanceof MultiTxn) {
+            MultiTxn multiTxn = ((MultiTxn) txn);
+            List<Txn> txnList = multiTxn.getTxns();
+            for (int i = 0; i < txnList.size(); i++ ) {
+                Txn t = txnList.get(i);
+                if (i == 0) {
+                    txnData.append(TraceFormatter.op2String(t.getType()) + ":" + new String(t.getData()));
+                } else {
+                    txnData.append(";" + TraceFormatter.op2String(t.getType()) + ":" + new String(t.getData()));
+                }
+            }
         } else {
             txnData.append(txn.toString());
         }