Ver Fonte

ZOOKEEPER-3039: TxnLogToolkit uses Scanner badly

Fixed by creating a single Scanner for all queries in the main() method.

Author: Andor Molnar <andor@cloudera.com>

Reviewers: phunt@apache.org

Closes #517 from anmolnar/ZOOKEEPER-3039 and squashes the following commits:

a35e2e280 [Andor Molnar] ZOOKEEPER-3039. Optimize imports
a196443cb [Andor Molnar] ZOOKEEPER-3039. Use the same Scanner for all queries

Change-Id: Icf66888d4e6ad902615ed8ffde58a5a8fdd41237
Andor Molnar há 7 anos atrás
pai
commit
2fa315b7d0

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

@@ -39,8 +39,6 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
 import java.text.DateFormat;
 import java.util.Date;
 import java.util.Scanner;
@@ -98,7 +96,7 @@ public class TxnLogToolkit implements Closeable {
      */
     public static void main(String[] args) throws Exception {
         try (final TxnLogToolkit lt = parseCommandLine(args)) {
-            lt.dump(new InputStreamReader(System.in));
+            lt.dump(new Scanner(System.in));
             lt.printStat();
         } catch (TxnLogToolkitParseException e) {
             System.err.println(e.getMessage() + "\n");
@@ -131,7 +129,7 @@ public class TxnLogToolkit implements Closeable {
         }
     }
 
-    public void dump(Reader input) throws Exception {
+    public void dump(Scanner scanner) throws Exception {
         crcFixed = 0;
 
         FileHeader fhdr = new FileHeader();
@@ -172,7 +170,7 @@ public class TxnLogToolkit implements Closeable {
                 if (recoveryMode) {
                     if (!force) {
                         printTxn(bytes, "CRC ERROR");
-                        if (askForFix(input)) {
+                        if (askForFix(scanner)) {
                             crcValue = crc.getValue();
                             ++crcFixed;
                         }
@@ -201,19 +199,17 @@ public class TxnLogToolkit implements Closeable {
         }
     }
 
-    private boolean askForFix(Reader input) throws TxnLogToolkitException {
-        try (Scanner scanner = new Scanner(input)) {
-            while (true) {
-                System.out.print("Would you like to fix it (Yes/No/Abort) ? ");
-                char answer = Character.toUpperCase(scanner.next().charAt(0));
-                switch (answer) {
-                    case 'Y':
-                        return true;
-                    case 'N':
-                        return false;
-                    case 'A':
-                        throw new TxnLogToolkitException(0, "Recovery aborted.");
-                }
+    private boolean askForFix(Scanner scanner) throws TxnLogToolkitException {
+        while (true) {
+            System.out.print("Would you like to fix it (Yes/No/Abort) ? ");
+            char answer = Character.toUpperCase(scanner.next().charAt(0));
+            switch (answer) {
+                case 'Y':
+                    return true;
+                case 'N':
+                    return false;
+                case 'A':
+                    throw new TxnLogToolkitException(0, "Recovery aborted.");
             }
         }
     }

+ 2 - 2
src/java/test/org/apache/zookeeper/server/persistence/TxnLogToolkitTest.java

@@ -29,7 +29,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.io.StringReader;
+import java.util.Scanner;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -138,7 +138,7 @@ public class TxnLogToolkitTest {
         TxnLogToolkit lt = new TxnLogToolkit(true, false, logfile.toString(), false);
 
         // Act
-        lt.dump(new StringReader("y\n"));
+        lt.dump(new Scanner("y\n"));
 
         // Assert
         String output = outContent.toString();