Author: kturner
Date: Fri Jan 18 23:38:08 2013
New Revision: 1435416
URL: http://svn.apache.org/viewvc?rev=1435416&view=rev
Log:
ACCUMULO-513 Added API and shell command for pinging tablet servers.
Added:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingCommand.java
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingIterator.java
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperationsImpl.java
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstanceOperations.java
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java?rev=1435416&r1=1435415&r2=1435416&view=diff
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java
(original)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java
Fri Jan 18 23:38:08 2013
@@ -90,6 +90,15 @@ public interface InstanceOperations {
public List<ActiveCompaction> getActiveCompactions(String tserver) throws
AccumuloException, AccumuloSecurityException;
/**
+ * Throws an exception if a tablet server can not be contacted.
+ *
+ * @param tserver
+ * The tablet server address should be of the form <ip
address>:<port>
+ * @throws AccumuloException
+ */
+ public void ping(String tserver) throws AccumuloException;
+
+ /**
* Test to see if the instance can load the given class as the given type.
*
* @param className
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperationsImpl.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperationsImpl.java?rev=1435416&r1=1435415&r2=1435416&view=diff
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperationsImpl.java
(original)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperationsImpl.java
Fri Jan 18 23:38:08 2013
@@ -35,11 +35,15 @@ import org.apache.accumulo.core.client.i
import org.apache.accumulo.core.client.impl.thrift.ConfigurationType;
import org.apache.accumulo.core.master.thrift.MasterClientService;
import org.apache.accumulo.core.security.thrift.AuthInfo;
+import org.apache.accumulo.core.security.thrift.ThriftSecurityException;
import org.apache.accumulo.core.tabletserver.thrift.TabletClientService;
+import org.apache.accumulo.core.tabletserver.thrift.TabletClientService.Client;
import org.apache.accumulo.core.util.ArgumentChecker;
import org.apache.accumulo.core.util.ThriftUtil;
import org.apache.accumulo.core.zookeeper.ZooUtil;
import org.apache.accumulo.fate.zookeeper.ZooCache;
+import org.apache.thrift.TException;
+import org.apache.thrift.transport.TTransportException;
/**
* Provides a class for administering the accumulo instance
@@ -194,4 +198,28 @@ public class InstanceOperationsImpl impl
}
return as;
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.apache.accumulo.core.client.admin.InstanceOperations#ping(java.lang.String)
+ */
+ @Override
+ public void ping(String tserver) throws AccumuloException {
+ Client client = null;
+ try {
+ client = ThriftUtil.getTServerClient(tserver,
instance.getConfiguration());
+ client.getTabletServerStatus(Tracer.traceInfo(), credentials);
+ } catch (TTransportException e) {
+ throw new AccumuloException(e);
+ } catch (ThriftSecurityException e) {
+ throw new AccumuloException(e);
+ } catch (TException e) {
+ throw new AccumuloException(e);
+ } finally {
+ if (client != null) {
+ ThriftUtil.returnClient(client);
+ }
+ }
+ }
}
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstanceOperations.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstanceOperations.java?rev=1435416&r1=1435415&r2=1435416&view=diff
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstanceOperations.java
(original)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstanceOperations.java
Fri Jan 18 23:38:08 2013
@@ -125,4 +125,15 @@ public class MockInstanceOperations impl
public List<ActiveCompaction> getActiveCompactions(String tserver) throws
AccumuloException, AccumuloSecurityException {
return new ArrayList<ActiveCompaction>();
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.apache.accumulo.core.client.admin.InstanceOperations#ping(java.lang.String)
+ */
+ @Override
+ public void ping(String tserver) throws AccumuloException {
+ // TODO Auto-generated method stub
+
+ }
}
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java?rev=1435416&r1=1435415&r2=1435416&view=diff
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
(original)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
Fri Jan 18 23:38:08 2013
@@ -113,6 +113,7 @@ import org.apache.accumulo.core.util.she
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.PasswdCommand;
+import org.apache.accumulo.core.util.shell.commands.PingCommand;
import org.apache.accumulo.core.util.shell.commands.QuestionCommand;
import org.apache.accumulo.core.util.shell.commands.QuitCommand;
import org.apache.accumulo.core.util.shell.commands.QuotedStringTokenizer;
@@ -294,7 +295,8 @@ public class Shell extends ShellOptions
Command[] dataCommands = {new DeleteCommand(), new DeleteManyCommand(),
new DeleteRowsCommand(), new EGrepCommand(), new FormatterCommand(),
new InterpreterCommand(), new GrepCommand(), new
ImportDirectoryCommand(), new InsertCommand(), new MaxRowCommand(), new
ScanCommand()};
- Command[] debuggingCommands = {new ClasspathCommand(), new DebugCommand(),
new ListScansCommand(), new ListCompactionsCommand(), new TraceCommand()};
+ Command[] debuggingCommands = {new ClasspathCommand(), new DebugCommand(),
new ListScansCommand(), new ListCompactionsCommand(), new TraceCommand(),
+ new PingCommand()};
Command[] execCommands = {new ExecfileCommand(), new HistoryCommand()};
Command[] exitCommands = {new ByeCommand(), new ExitCommand(), new
QuitCommand()};
Command[] helpCommands = {new AboutCommand(), new HelpCommand(), new
InfoCommand(), new QuestionCommand()};
Added:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingCommand.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingCommand.java?rev=1435416&view=auto
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingCommand.java
(added)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingCommand.java
Fri Jan 18 23:38:08 2013
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.core.util.shell.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.accumulo.core.client.admin.InstanceOperations;
+import org.apache.accumulo.core.util.shell.Shell;
+import org.apache.accumulo.core.util.shell.Shell.Command;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+
+/**
+ *
+ */
+public class PingCommand extends Command {
+
+ private Option tserverOption, disablePaginationOpt;
+
+ @Override
+ public String description() {
+ return "ping tablet servers";
+ }
+
+ @Override
+ public int execute(final String fullCommand, final CommandLine cl, final
Shell shellState) throws Exception {
+
+ List<String> tservers;
+
+ final InstanceOperations instanceOps =
shellState.getConnector().instanceOperations();
+
+ final boolean paginate = !cl.hasOption(disablePaginationOpt.getOpt());
+
+ if (cl.hasOption(tserverOption.getOpt())) {
+ tservers = new ArrayList<String>();
+ tservers.add(cl.getOptionValue(tserverOption.getOpt()));
+ } else {
+ tservers = instanceOps.getTabletServers();
+ }
+
+ shellState.printLines(new PingIterator(tservers, instanceOps), paginate);
+
+ return 0;
+ }
+
+ @Override
+ public int numArgs() {
+ return 0;
+ }
+
+ @Override
+ public Options getOptions() {
+ final Options opts = new Options();
+
+ tserverOption = new Option("ts", "tabletServer", true, "tablet server to
ping");
+ tserverOption.setArgName("tablet server");
+ opts.addOption(tserverOption);
+
+ disablePaginationOpt = new Option("np", "no-pagination", false, "disable
pagination of output");
+ opts.addOption(disablePaginationOpt);
+
+ return opts;
+ }
+
+}
+
Added:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingIterator.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingIterator.java?rev=1435416&view=auto
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingIterator.java
(added)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/PingIterator.java
Fri Jan 18 23:38:08 2013
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.core.util.shell.commands;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.admin.InstanceOperations;
+
+class PingIterator implements Iterator<String> {
+
+ private Iterator<String> iter;
+ private InstanceOperations instanceOps;
+
+ PingIterator(List<String> tservers, InstanceOperations instanceOps) {
+ iter = tservers.iterator();
+ this.instanceOps = instanceOps;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+
+ @Override
+ public String next() {
+ String tserver = iter.next();
+
+ try {
+ instanceOps.ping(tserver);
+ } catch (AccumuloException e) {
+ return tserver + " ERROR " + e.getMessage();
+ }
+
+ return tserver + " OK";
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+}