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/08/27 23:41:15 UTC
[3/4] accumulo git commit: Merge branch '1.6' into 1.7
Merge branch '1.6' into 1.7
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/d77863e0
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/d77863e0
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/d77863e0
Branch: refs/heads/master
Commit: d77863e044f36107fcf84449f56c818b55a15ed4
Parents: 162acf2 a1497d1
Author: Keith Turner <ke...@deenlo.com>
Authored: Thu Aug 27 17:15:52 2015 -0400
Committer: Keith Turner <ke...@deenlo.com>
Committed: Thu Aug 27 17:15:52 2015 -0400
----------------------------------------------------------------------
.../apache/accumulo/tserver/FileManager.java | 8 +-
.../shell/commands/SetShellIterCommand.java | 15 +---
.../accumulo/test/IsolationAndDeepCopyIT.java | 85 ++++++++++++++++++++
3 files changed, 93 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/d77863e0/server/tserver/src/main/java/org/apache/accumulo/tserver/FileManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/d77863e0/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java
----------------------------------------------------------------------
diff --cc shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java
index 10c67be,0000000..6b1da3b
mode 100644,000000..100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/SetShellIterCommand.java
@@@ -1,130 -1,0 +1,123 @@@
+/*
+ * 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.shell.commands;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.accumulo.core.client.AccumuloException;
+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.shell.Shell;
+import org.apache.accumulo.shell.ShellCommandException;
+import org.apache.accumulo.shell.ShellCommandException.ErrorCode;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionGroup;
+import org.apache.commons.cli.Options;
+
+public class SetShellIterCommand extends SetIterCommand {
+ private Option profileOpt;
+
+ @Override
+ public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException,
+ TableNotFoundException, IOException, ShellCommandException {
+ return super.execute(fullCommand, cl, shellState);
+ }
+
+ @Override
+ 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 {
+ // instead of setting table properties, just put the options in a list to use at scan time
+
+ String profile = cl.getOptionValue(profileOpt.getOpt());
+
- // 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, "xUnable to load " + classname + " as type " + SortedKeyValueIterator.class.getName());
++ 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();
+ if (entry.getValue() == null || entry.getValue().isEmpty()) {
+ i.remove();
+ }
+ }
+
+ List<IteratorSetting> tableScanIterators = shellState.iteratorProfiles.get(profile);
+ if (tableScanIterators == null) {
+ tableScanIterators = new ArrayList<IteratorSetting>();
+ shellState.iteratorProfiles.put(profile, tableScanIterators);
+ }
+ final IteratorSetting setting = new IteratorSetting(priority, name, classname);
+ setting.addOptions(options);
+
+ Iterator<IteratorSetting> iter = tableScanIterators.iterator();
+ while (iter.hasNext()) {
+ if (iter.next().getName().equals(name)) {
+ iter.remove();
+ }
+ }
+
+ tableScanIterators.add(setting);
+ }
+
+ @Override
+ public String description() {
+ return "adds an iterator to a profile for this shell session";
+ }
+
+ @Override
+ public Options getOptions() {
+ // Remove the options that specify which type of iterator this is, since
+ // they are all scan iterators with this command.
+ final HashSet<OptionGroup> groups = new HashSet<OptionGroup>();
+ final Options parentOptions = super.getOptions();
+ final Options modifiedOptions = new Options();
+ for (Iterator<?> it = parentOptions.getOptions().iterator(); it.hasNext();) {
+ Option o = (Option) it.next();
+ if (!IteratorScope.majc.name().equals(o.getOpt()) && !IteratorScope.minc.name().equals(o.getOpt()) && !IteratorScope.scan.name().equals(o.getOpt())
+ && !"table".equals(o.getLongOpt())) {
+ modifiedOptions.addOption(o);
+ OptionGroup group = parentOptions.getOptionGroup(o);
+ if (group != null)
+ groups.add(group);
+ }
+ }
+ for (OptionGroup group : groups) {
+ modifiedOptions.addOptionGroup(group);
+ }
+
+ profileOpt = new Option("pn", "profile", true, "iterator profile name");
+ profileOpt.setRequired(true);
+ profileOpt.setArgName("profile");
+
+ modifiedOptions.addOption(profileOpt);
+
+ return modifiedOptions;
+ }
+
+}