You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dl...@apache.org on 2014/09/08 03:59:48 UTC
git commit: ACCUMULO-3093: Use ContextManager to load the Formatter
classes
Repository: accumulo
Updated Branches:
refs/heads/1.6.1-SNAPSHOT 8b2cbe777 -> 7eeb08ae9
ACCUMULO-3093: Use ContextManager to load the Formatter classes
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/7eeb08ae
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/7eeb08ae
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/7eeb08ae
Branch: refs/heads/1.6.1-SNAPSHOT
Commit: 7eeb08ae940407ee29ce8673ea77a98a87ecd311
Parents: 8b2cbe7
Author: Dave Marion <dl...@hotmail.com>
Authored: Sun Sep 7 21:57:45 2014 -0400
Committer: Dave Marion <dl...@hotmail.com>
Committed: Sun Sep 7 21:57:45 2014 -0400
----------------------------------------------------------------------
.../apache/accumulo/core/util/shell/Shell.java | 58 ++++++++++++++++++++
.../core/util/shell/commands/ScanCommand.java | 8 +--
.../util/shell/commands/SetIterCommand.java | 55 +------------------
.../ShellPluginConfigurationCommand.java | 23 +++++++-
4 files changed, 83 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/7eeb08ae/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 ff6ba09..6043df3 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
@@ -49,6 +49,7 @@ import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.Instance;
import org.apache.accumulo.core.client.IteratorSetting;
+import org.apache.accumulo.core.client.NamespaceNotFoundException;
import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.impl.ServerConfigurationUtil;
@@ -130,6 +131,7 @@ import org.apache.accumulo.core.util.shell.commands.NamespacesCommand;
import org.apache.accumulo.core.util.shell.commands.NoTableCommand;
import org.apache.accumulo.core.util.shell.commands.OfflineCommand;
import org.apache.accumulo.core.util.shell.commands.OnlineCommand;
+import org.apache.accumulo.core.util.shell.commands.OptUtil;
import org.apache.accumulo.core.util.shell.commands.PasswdCommand;
import org.apache.accumulo.core.util.shell.commands.PingCommand;
import org.apache.accumulo.core.util.shell.commands.QuestionCommand;
@@ -158,6 +160,8 @@ import org.apache.accumulo.core.util.shell.commands.WhoAmICommand;
import org.apache.accumulo.core.volume.VolumeConfiguration;
import org.apache.accumulo.core.zookeeper.ZooUtil;
import org.apache.accumulo.fate.zookeeper.ZooReader;
+import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
+import org.apache.accumulo.start.classloader.vfs.ContextManager;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
@@ -165,6 +169,7 @@ import org.apache.commons.cli.MissingOptionException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
+import org.apache.commons.vfs2.FileSystemException;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@@ -454,6 +459,59 @@ public class Shell extends ShellOptions {
return instance;
}
+ public ClassLoader getClassLoader(final CommandLine cl, final Shell shellState) throws AccumuloException, TableNotFoundException, AccumuloSecurityException,
+ IOException, FileSystemException {
+
+ boolean tables = cl.hasOption(OptUtil.tableOpt().getOpt()) || !shellState.getTableName().isEmpty();
+ boolean namespaces = cl.hasOption(OptUtil.namespaceOpt().getOpt());
+
+ String classpath = null;
+ Iterable<Entry<String,String>> tableProps;
+
+ if (namespaces) {
+ try {
+ tableProps = shellState.getConnector().namespaceOperations().getProperties(OptUtil.getNamespaceOpt(cl, shellState));
+ } catch (NamespaceNotFoundException e) {
+ throw new IllegalArgumentException(e);
+ }
+ } else if (tables) {
+ tableProps = shellState.getConnector().tableOperations().getProperties(OptUtil.getTableOpt(cl, shellState));
+ } else {
+ throw new IllegalArgumentException("No table or namespace specified");
+ }
+ for (Entry<String,String> entry : tableProps) {
+ if (entry.getKey().equals(Property.TABLE_CLASSPATH.getKey())) {
+ classpath = entry.getValue();
+ }
+ }
+
+ ClassLoader classloader;
+
+ if (classpath != null && !classpath.equals("")) {
+ shellState.getConnector().instanceOperations().getSystemConfiguration().get(Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey() + classpath);
+
+ try {
+ AccumuloVFSClassLoader.getContextManager().setContextConfig(new ContextManager.DefaultContextsConfig(new Iterable<Map.Entry<String,String>>() {
+ @Override
+ public Iterator<Entry<String,String>> iterator() {
+ try {
+ return shellState.getConnector().instanceOperations().getSystemConfiguration().entrySet().iterator();
+ } catch (AccumuloException e) {
+ throw new RuntimeException(e);
+ } catch (AccumuloSecurityException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }));
+ } catch (IllegalStateException ise) {}
+
+ classloader = AccumuloVFSClassLoader.getContextManager().getClassLoader(classpath);
+ } else {
+ classloader = AccumuloVFSClassLoader.getClassLoader();
+ }
+ return classloader;
+ }
+
public static void main(String args[]) throws IOException {
Shell shell = new Shell();
try {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/7eeb08ae/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 a02a781..0270e6c 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,6 +28,7 @@ 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;
@@ -199,12 +200,11 @@ public class ScanCommand extends Command {
try {
if (cl.hasOption(formatterOpt.getOpt())) {
- return AccumuloVFSClassLoader.loadClass(cl.getOptionValue(formatterOpt.getOpt()), Formatter.class);
-
+ return shellState.getClassLoader(cl, shellState).loadClass(cl.getOptionValue(formatterOpt.getOpt())).asSubclass(Formatter.class);
} else if (cl.hasOption(formatterInterpeterOpt.getOpt())) {
- return AccumuloVFSClassLoader.loadClass(cl.getOptionValue(formatterInterpeterOpt.getOpt()), Formatter.class);
+ return shellState.getClassLoader(cl, shellState).loadClass(cl.getOptionValue(formatterInterpeterOpt.getOpt())).asSubclass(Formatter.class);
}
- } catch (ClassNotFoundException e) {
+ } catch (Exception e) {
shellState.getReader().println("Formatter class could not be loaded.\n" + e.getMessage());
}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/7eeb08ae/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 3d8a5a7..4be178a 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
@@ -85,7 +85,7 @@ public class SetIterCommand extends Command {
classname = ReqVisFilter.class.getName();
}
- ClassLoader classloader = getClassLoader(cl, shellState);
+ ClassLoader classloader = shellState.getClassLoader(cl, shellState);
// Get the iterator options, with potentially a name provided by the OptionDescriber impl or through user input
String configuredName = setUpOptions(classloader, shellState.getReader(), classname, options);
@@ -115,59 +115,6 @@ public class SetIterCommand extends Command {
return 0;
}
- private ClassLoader getClassLoader(final CommandLine cl, final Shell shellState) throws AccumuloException, TableNotFoundException, AccumuloSecurityException,
- IOException, FileSystemException {
-
- boolean tables = cl.hasOption(OptUtil.tableOpt().getOpt()) || !shellState.getTableName().isEmpty();
- boolean namespaces = cl.hasOption(OptUtil.namespaceOpt().getOpt());
-
- String classpath = null;
- Iterable<Entry<String,String>> tableProps;
-
- if (namespaces) {
- try {
- tableProps = shellState.getConnector().namespaceOperations().getProperties(OptUtil.getNamespaceOpt(cl, shellState));
- } catch (NamespaceNotFoundException e) {
- throw new IllegalArgumentException(e);
- }
- } else if (tables) {
- tableProps = shellState.getConnector().tableOperations().getProperties(OptUtil.getTableOpt(cl, shellState));
- } else {
- throw new IllegalArgumentException("No table or namespace specified");
- }
- for (Entry<String,String> entry : tableProps) {
- if (entry.getKey().equals(Property.TABLE_CLASSPATH.getKey())) {
- classpath = entry.getValue();
- }
- }
-
- ClassLoader classloader;
-
- if (classpath != null && !classpath.equals("")) {
- shellState.getConnector().instanceOperations().getSystemConfiguration().get(Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey() + classpath);
-
- try {
- AccumuloVFSClassLoader.getContextManager().setContextConfig(new ContextManager.DefaultContextsConfig(new Iterable<Map.Entry<String,String>>() {
- @Override
- public Iterator<Entry<String,String>> iterator() {
- try {
- return shellState.getConnector().instanceOperations().getSystemConfiguration().entrySet().iterator();
- } catch (AccumuloException e) {
- throw new RuntimeException(e);
- } catch (AccumuloSecurityException e) {
- throw new RuntimeException(e);
- }
- }
- }));
- } catch (IllegalStateException ise) {}
-
- classloader = AccumuloVFSClassLoader.getContextManager().getClassLoader(classpath);
- } else {
- classloader = AccumuloVFSClassLoader.getClassLoader();
- }
- return classloader;
- }
-
protected void setTableProperties(final CommandLine cl, final Shell shellState, final int priority, final Map<String,String> options, final String classname,
final String name) throws AccumuloException, AccumuloSecurityException, ShellCommandException, TableNotFoundException {
// remove empty values
http://git-wip-us.apache.org/repos/asf/accumulo/blob/7eeb08ae/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
index d4c9739..39bba5c 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
@@ -16,6 +16,7 @@
*/
package org.apache.accumulo.core.util.shell.commands;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.Map.Entry;
@@ -25,11 +26,12 @@ import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.util.shell.Shell;
import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
+import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
import org.apache.log4j.Logger;
public abstract class ShellPluginConfigurationCommand extends Command {
@@ -101,10 +103,25 @@ public abstract class ShellPluginConfigurationCommand extends Command {
final Entry<String,String> ent = props.next();
if (ent.getKey().equals(pluginProp.toString())) {
Class<? extends T> pluginClazz;
+ String[] args = new String[2];
try {
- pluginClazz = AccumuloVFSClassLoader.loadClass(ent.getValue(), clazz);
+ Options o = new Options();
+ o.addOption(OptUtil.tableOpt());
+ args[0] = "-t";
+ args[1] = tableName;
+ CommandLine cl = new BasicParser().parse(o, args);
+ pluginClazz = shellState.getClassLoader(cl, shellState).loadClass(ent.getValue()).asSubclass(clazz);
} catch (ClassNotFoundException e) {
- Logger.getLogger(ShellPluginConfigurationCommand.class).warn("Class not found" + e.getMessage());
+ Logger.getLogger(ShellPluginConfigurationCommand.class).error("Class not found" + e.getMessage());
+ return null;
+ } catch (ParseException e) {
+ Logger.getLogger(ShellPluginConfigurationCommand.class).error("Error parsing table: " + Arrays.toString(args) + e.getMessage());
+ return null;
+ } catch (TableNotFoundException e) {
+ Logger.getLogger(ShellPluginConfigurationCommand.class).error("Table not found: " + tableName + e.getMessage());
+ return null;
+ } catch (Exception e) {
+ Logger.getLogger(ShellPluginConfigurationCommand.class).error("Error: " + e.getMessage());
return null;
}