You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2017/01/09 23:40:05 UTC
[3/6] accumulo git commit: ACCUMULO-4541 Ensure grep output gets
flushed
ACCUMULO-4541 Ensure grep output gets flushed
Ensure output of grep command in shell (and egrep) gets flushed to the
output file when the '-o' option is used. Also ensure the '-o' option is
not shown as an option in ScanCommand subclasses which do not support
its use.
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/c3d87032
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/c3d87032
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/c3d87032
Branch: refs/heads/master
Commit: c3d8703296718141e86d5d63a27f235d6f98f1ce
Parents: 62c31b5
Author: Christopher Tubbs <ct...@apache.org>
Authored: Mon Jan 9 17:52:16 2017 -0500
Committer: Christopher Tubbs <ct...@apache.org>
Committed: Mon Jan 9 17:52:16 2017 -0500
----------------------------------------------------------------------
.../java/org/apache/accumulo/shell/Shell.java | 2 +-
.../accumulo/shell/commands/GrepCommand.java | 67 ++++++++-------
.../accumulo/shell/commands/ScanCommand.java | 90 ++++++++++----------
3 files changed, 82 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/c3d87032/shell/src/main/java/org/apache/accumulo/shell/Shell.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/Shell.java b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
index 776c4f4..9dc69c5 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/Shell.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
@@ -995,7 +995,7 @@ public class Shell extends ShellOptions implements KeywordExecutable {
}
}
- public interface PrintLine {
+ public interface PrintLine extends AutoCloseable {
void print(String s);
void close();
http://git-wip-us.apache.org/repos/asf/accumulo/blob/c3d87032/shell/src/main/java/org/apache/accumulo/shell/commands/GrepCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/GrepCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/GrepCommand.java
index 97bddc9..6d20790 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/GrepCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/GrepCommand.java
@@ -39,39 +39,40 @@ public class GrepCommand extends ScanCommand {
@Override
public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
- final PrintFile printFile = getOutputFile(cl);
-
- final String tableName = OptUtil.getTableOpt(cl, shellState);
-
- if (cl.getArgList().isEmpty()) {
- throw new MissingArgumentException("No terms specified");
- }
- final Class<? extends Formatter> formatter = getFormatter(cl, tableName, shellState);
- final ScanInterpreter interpeter = getInterpreter(cl, tableName, shellState);
-
- // handle first argument, if present, the authorizations list to
- // scan with
- int numThreads = 20;
- if (cl.hasOption(numThreadsOpt.getOpt())) {
- numThreads = Integer.parseInt(cl.getOptionValue(numThreadsOpt.getOpt()));
- }
- final Authorizations auths = getAuths(cl, shellState);
- final BatchScanner scanner = shellState.getConnector().createBatchScanner(tableName, auths, numThreads);
- scanner.setRanges(Collections.singletonList(getRange(cl, interpeter)));
-
- scanner.setTimeout(getTimeout(cl), TimeUnit.MILLISECONDS);
-
- for (int i = 0; i < cl.getArgs().length; i++) {
- setUpIterator(Integer.MAX_VALUE - cl.getArgs().length + i, "grep" + i, cl.getArgs()[i], scanner, cl);
- }
- try {
- // handle columns
- fetchColumns(cl, scanner, interpeter);
-
- // output the records
- printRecords(cl, shellState, scanner, formatter, printFile);
- } finally {
- scanner.close();
+ try (final PrintFile printFile = getOutputFile(cl)) {
+
+ final String tableName = OptUtil.getTableOpt(cl, shellState);
+
+ if (cl.getArgList().isEmpty()) {
+ throw new MissingArgumentException("No terms specified");
+ }
+ final Class<? extends Formatter> formatter = getFormatter(cl, tableName, shellState);
+ final ScanInterpreter interpeter = getInterpreter(cl, tableName, shellState);
+
+ // handle first argument, if present, the authorizations list to
+ // scan with
+ int numThreads = 20;
+ if (cl.hasOption(numThreadsOpt.getOpt())) {
+ numThreads = Integer.parseInt(cl.getOptionValue(numThreadsOpt.getOpt()));
+ }
+ final Authorizations auths = getAuths(cl, shellState);
+ final BatchScanner scanner = shellState.getConnector().createBatchScanner(tableName, auths, numThreads);
+ scanner.setRanges(Collections.singletonList(getRange(cl, interpeter)));
+
+ scanner.setTimeout(getTimeout(cl), TimeUnit.MILLISECONDS);
+
+ for (int i = 0; i < cl.getArgs().length; i++) {
+ setUpIterator(Integer.MAX_VALUE - cl.getArgs().length + i, "grep" + i, cl.getArgs()[i], scanner, cl);
+ }
+ try {
+ // handle columns
+ fetchColumns(cl, scanner, interpeter);
+
+ // output the records
+ printRecords(cl, shellState, scanner, formatter, printFile);
+ } finally {
+ scanner.close();
+ }
}
return 0;
http://git-wip-us.apache.org/repos/asf/accumulo/blob/c3d87032/shell/src/main/java/org/apache/accumulo/shell/commands/ScanCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/ScanCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/ScanCommand.java
index 6f1ddd3..b6eb8d6 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/ScanCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/ScanCommand.java
@@ -19,6 +19,7 @@ package org.apache.accumulo.shell.commands;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
import java.util.List;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
@@ -64,50 +65,48 @@ public class ScanCommand extends Command {
@Override
public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
- final PrintFile printFile = getOutputFile(cl);
- final String tableName = OptUtil.getTableOpt(cl, shellState);
-
- final Class<? extends Formatter> formatter = getFormatter(cl, tableName, shellState);
- final ScanInterpreter interpeter = getInterpreter(cl, tableName, shellState);
-
- // handle first argument, if present, the authorizations list to
- // scan with
- final Authorizations auths = getAuths(cl, shellState);
- final Scanner scanner = shellState.getConnector().createScanner(tableName, auths);
-
- // handle session-specific scan iterators
- addScanIterators(shellState, cl, scanner, tableName);
-
- // handle remaining optional arguments
- scanner.setRange(getRange(cl, interpeter));
-
- // handle columns
- fetchColumns(cl, scanner, interpeter);
-
- // set timeout
- scanner.setTimeout(getTimeout(cl), TimeUnit.MILLISECONDS);
-
- // output the records
- if (cl.hasOption(showFewOpt.getOpt())) {
- final String showLength = cl.getOptionValue(showFewOpt.getOpt());
- try {
- final int length = Integer.parseInt(showLength);
- if (length < 1) {
- throw new IllegalArgumentException();
+ try (final PrintFile printFile = getOutputFile(cl)) {
+ final String tableName = OptUtil.getTableOpt(cl, shellState);
+
+ final Class<? extends Formatter> formatter = getFormatter(cl, tableName, shellState);
+ final ScanInterpreter interpeter = getInterpreter(cl, tableName, shellState);
+
+ // handle first argument, if present, the authorizations list to
+ // scan with
+ final Authorizations auths = getAuths(cl, shellState);
+ final Scanner scanner = shellState.getConnector().createScanner(tableName, auths);
+
+ // handle session-specific scan iterators
+ addScanIterators(shellState, cl, scanner, tableName);
+
+ // handle remaining optional arguments
+ scanner.setRange(getRange(cl, interpeter));
+
+ // handle columns
+ fetchColumns(cl, scanner, interpeter);
+
+ // set timeout
+ scanner.setTimeout(getTimeout(cl), TimeUnit.MILLISECONDS);
+
+ // output the records
+ if (cl.hasOption(showFewOpt.getOpt())) {
+ final String showLength = cl.getOptionValue(showFewOpt.getOpt());
+ try {
+ final int length = Integer.parseInt(showLength);
+ if (length < 1) {
+ throw new IllegalArgumentException();
+ }
+ BinaryFormatter.getlength(length);
+ printBinaryRecords(cl, shellState, scanner, printFile);
+ } catch (NumberFormatException nfe) {
+ shellState.getReader().println("Arg must be an integer.");
+ } catch (IllegalArgumentException iae) {
+ shellState.getReader().println("Arg must be greater than one.");
}
- BinaryFormatter.getlength(length);
- printBinaryRecords(cl, shellState, scanner, printFile);
- } catch (NumberFormatException nfe) {
- shellState.getReader().println("Arg must be an integer.");
- } catch (IllegalArgumentException iae) {
- shellState.getReader().println("Arg must be greater than one.");
- }
- } else {
- printRecords(cl, shellState, scanner, formatter, printFile);
- }
- if (printFile != null) {
- printFile.close();
+ } else {
+ printRecords(cl, shellState, scanner, formatter, printFile);
+ }
}
return 0;
@@ -325,7 +324,12 @@ public class ScanCommand extends Command {
o.addOption(interpreterOpt);
o.addOption(formatterInterpeterOpt);
o.addOption(timeoutOption);
- o.addOption(outputFileOpt);
+ if (Arrays.asList(new String[] {ScanCommand.class.getName(), GrepCommand.class.getName(), EGrepCommand.class.getName()})
+ .contains(this.getClass().getName())) {
+ // supported subclasses must handle the output file option properly
+ // only add this option to commands which handle it correctly
+ o.addOption(outputFileOpt);
+ }
o.addOption(profileOpt);
return o;