You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2015/09/03 23:30:09 UTC

accumulo git commit: ACCUMULO-3972 fix how setshelliter and setscaniter check classes can load

Repository: accumulo
Updated Branches:
  refs/heads/1.6 07ac4c85f -> e4ffc7797


ACCUMULO-3972 fix how setshelliter and setscaniter check classes can load


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/e4ffc779
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/e4ffc779
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/e4ffc779

Branch: refs/heads/1.6
Commit: e4ffc77974e80a085aad86a8089bfa13650d0530
Parents: 07ac4c8
Author: Keith Turner <ke...@deenlo.com>
Authored: Thu Sep 3 16:43:40 2015 -0400
Committer: Keith Turner <ke...@deenlo.com>
Committed: Thu Sep 3 16:43:40 2015 -0400

----------------------------------------------------------------------
 .../apache/accumulo/core/util/shell/Shell.java    |  8 ++++----
 .../core/util/shell/commands/CompactCommand.java  |  5 +++++
 .../core/util/shell/commands/ScanCommand.java     | 18 +++++++++++++++++-
 .../core/util/shell/commands/SetIterCommand.java  | 11 ++++-------
 .../util/shell/commands/SetScanIterCommand.java   | 15 +--------------
 .../util/shell/commands/SetShellIterCommand.java  |  7 -------
 6 files changed, 31 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java b/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
index 8cfb689..143ce28 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
@@ -40,10 +40,6 @@ import java.util.TreeMap;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
-import jline.console.ConsoleReader;
-import jline.console.UserInterruptException;
-import jline.console.history.FileHistory;
-
 import org.apache.accumulo.core.Constants;
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -180,6 +176,10 @@ import org.apache.log4j.Logger;
 import com.beust.jcommander.JCommander;
 import com.beust.jcommander.ParameterException;
 
+import jline.console.ConsoleReader;
+import jline.console.UserInterruptException;
+import jline.console.history.FileHistory;
+
 /**
  * A convenient console interface to perform basic accumulo functions Includes auto-complete, help, and quoted strings with escape sequences
  */

http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/commands/CompactCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/CompactCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/CompactCommand.java
index a535347..868e728 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/CompactCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/CompactCommand.java
@@ -47,6 +47,7 @@ public class CompactCommand extends TableOperation {
     return "sets all tablets for a table to major compact as soon as possible (based on current time)";
   }
 
+  @Override
   protected void doTableOp(final Shell shellState, final String tableName) throws AccumuloException, AccumuloSecurityException {
     // compact the tables
 
@@ -63,6 +64,10 @@ public class CompactCommand extends TableOperation {
           Shell.log.info("Compacting table ...");
         }
 
+        for (IteratorSetting iteratorSetting : iterators) {
+          ScanCommand.ensureTserversCanLoadIterator(shellState, tableName, iteratorSetting.getIteratorClass());
+        }
+
         shellState.getConnector().tableOperations().compact(tableName, startRow, endRow, iterators, flush, wait);
 
         Shell.log.info("Compaction of table " + tableName + " " + (wait ? "completed" : "started") + " for given range");

http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ScanCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ScanCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ScanCommand.java
index 38736dd..78657b9 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ScanCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ScanCommand.java
@@ -28,10 +28,12 @@ import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.ScannerBase;
+import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.accumulo.core.util.format.BinaryFormatter;
 import org.apache.accumulo.core.util.format.Formatter;
@@ -40,6 +42,8 @@ import org.apache.accumulo.core.util.interpret.ScanInterpreter;
 import org.apache.accumulo.core.util.shell.Shell;
 import org.apache.accumulo.core.util.shell.Shell.Command;
 import org.apache.accumulo.core.util.shell.Shell.PrintFile;
+import org.apache.accumulo.core.util.shell.ShellCommandException;
+import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
 import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -116,7 +120,15 @@ public class ScanCommand extends Command {
     return Long.MAX_VALUE;
   }
 
-  protected void addScanIterators(final Shell shellState, CommandLine cl, final Scanner scanner, final String tableName) {
+  static void ensureTserversCanLoadIterator(final Shell shellState, String tableName, String classname)
+      throws AccumuloException, AccumuloSecurityException, TableNotFoundException, ShellCommandException {
+    if (!shellState.getConnector().tableOperations().testClassLoad(tableName, classname, SortedKeyValueIterator.class.getName())) {
+      throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE,
+          "Servers are unable to load " + classname + " as type " + SortedKeyValueIterator.class.getName());
+    }
+  }
+
+  protected void addScanIterators(final Shell shellState, CommandLine cl, final Scanner scanner, final String tableName) throws Exception {
 
     List<IteratorSetting> tableScanIterators;
     if (cl.hasOption(profileOpt.getOpt())) {
@@ -126,6 +138,10 @@ public class ScanCommand extends Command {
       if (tableScanIterators == null) {
         throw new IllegalArgumentException("Profile " + profile + " does not exist");
       }
+
+      for (IteratorSetting iteratorSetting : tableScanIterators) {
+        ensureTserversCanLoadIterator(shellState, tableName, iteratorSetting.getIteratorClass());
+      }
     } else {
       tableScanIterators = shellState.scanIteratorOptions.get(tableName);
       if (tableScanIterators == null) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
index 2266f52..0ff240b 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
@@ -23,8 +23,6 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import jline.console.ConsoleReader;
-
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.IteratorSetting;
@@ -50,6 +48,8 @@ import org.apache.commons.cli.OptionGroup;
 import org.apache.commons.cli.Options;
 import org.apache.commons.lang.StringUtils;
 
+import jline.console.ConsoleReader;
+
 public class SetIterCommand extends Command {
 
   private Option allScopeOpt, mincScopeOpt, majcScopeOpt, scanScopeOpt, nameOpt, priorityOpt;
@@ -117,10 +117,7 @@ public class SetIterCommand extends Command {
 
     final String tableName = OptUtil.getTableOpt(cl, shellState);
 
-    if (!shellState.getConnector().tableOperations().testClassLoad(tableName, classname, SortedKeyValueIterator.class.getName())) {
-      throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + classname + " as type "
-          + SortedKeyValueIterator.class.getName());
-    }
+    ScanCommand.ensureTserversCanLoadIterator(shellState, tableName, classname);
 
     final String aggregatorClass = options.get("aggregatorClass");
     @SuppressWarnings("deprecation")
@@ -225,7 +222,7 @@ public class SetIterCommand extends Command {
     }
 
     @SuppressWarnings("unchecked")
-    SortedKeyValueIterator<Key,Value> skvi = (SortedKeyValueIterator<Key,Value>) untypedInstance;
+    SortedKeyValueIterator<Key,Value> skvi = untypedInstance;
     OptionDescriber iterOptions = null;
     if (OptionDescriber.class.isAssignableFrom(skvi.getClass())) {
       iterOptions = (OptionDescriber) skvi;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
index 9c74586..95efd22 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
@@ -30,11 +30,9 @@ import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.accumulo.core.util.shell.Shell;
 import org.apache.accumulo.core.util.shell.ShellCommandException;
-import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionGroup;
@@ -54,18 +52,7 @@ public class SetScanIterCommand extends SetIterCommand {
 
     final String tableName = OptUtil.getTableOpt(cl, shellState);
 
-    // instead of setting table properties, just put the options in a list to use at scan time
-    Class<?> loadClass;
-    try {
-      loadClass = getClass().getClassLoader().loadClass(classname);
-    } catch (ClassNotFoundException e) {
-      throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Unable to load " + classname);
-    }
-    try {
-      loadClass.asSubclass(SortedKeyValueIterator.class);
-    } catch (ClassCastException ex) {
-      throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Unable to load " + classname + " as type " + SortedKeyValueIterator.class.getName());
-    }
+    ScanCommand.ensureTserversCanLoadIterator(shellState, tableName, classname);
 
     for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
       final Entry<String,String> entry = i.next();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/e4ffc779/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
index a06c412..f164548 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
@@ -29,10 +29,8 @@ import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.util.shell.Shell;
 import org.apache.accumulo.core.util.shell.ShellCommandException;
-import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionGroup;
@@ -54,11 +52,6 @@ public class SetShellIterCommand extends SetIterCommand {
 
     String profile = cl.getOptionValue(profileOpt.getOpt());
 
-    if (!shellState.getConnector().instanceOperations().testClassLoad(classname, SortedKeyValueIterator.class.getName())) {
-      throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + classname + " as type "
-          + SortedKeyValueIterator.class.getName());
-    }
-
     // instead of setting table properties, just put the options in a list to use at scan time
     for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
       final Entry<String,String> entry = i.next();