[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-02-25 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:
src/start/src/main/java/org/apache/accumulo/start/Main.java


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 625801848cbb93ac0240eecf09ce62f225ee0960
Parents: 7e106a2 1543d65
Author: Mike Drob md...@cloudera.com
Authored: Tue Feb 25 14:38:25 2014 -0500
Committer: Mike Drob md...@cloudera.com
Committed: Tue Feb 25 14:38:25 2014 -0500

--
 .../java/org/apache/accumulo/start/Main.java| 30 
 1 file changed, 24 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/62580184/start/src/main/java/org/apache/accumulo/start/Main.java
--
diff --cc start/src/main/java/org/apache/accumulo/start/Main.java
index cbc90c6,000..29c47a7
mode 100644,00..100644
--- a/start/src/main/java/org/apache/accumulo/start/Main.java
+++ b/start/src/main/java/org/apache/accumulo/start/Main.java
@@@ -1,125 -1,0 +1,143 @@@
 +/*
 + * 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.start;
 +
++import java.lang.reflect.InvocationTargetException;
 +import java.lang.reflect.Method;
 +import java.lang.reflect.Modifier;
- 
++ 
 +import org.apache.accumulo.start.classloader.AccumuloClassLoader;
 +
 +public class Main {
 +  
-   public static void main(String[] args) throws Exception {
++  public static void main(String[] args) {
 +Runnable r = null;
 +
 +try {
 +  if (args.length == 0) {
 +printUsage();
 +System.exit(1);
 +  }
 +  final String argsToPass[] = new String[args.length - 1];
 +  System.arraycopy(args, 1, argsToPass, 0, args.length - 1);
 +  
 +  
Thread.currentThread().setContextClassLoader(AccumuloClassLoader.getClassLoader());
 +  
 +  Class? vfsClassLoader = 
AccumuloClassLoader.getClassLoader().loadClass(org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader);
 +  
 +  ClassLoader cl = (ClassLoader) 
vfsClassLoader.getMethod(getClassLoader, new Class[] {}).invoke(null, new 
Object[] {});
 +  
 +  Class? runTMP = null;
 +  
 +  Thread.currentThread().setContextClassLoader(cl);
 +  
 +  if (args[0].equals(master)) {
 +runTMP = cl.loadClass(org.apache.accumulo.server.master.Master);
 +  } else if (args[0].equals(tserver)) {
 +runTMP = 
cl.loadClass(org.apache.accumulo.server.tabletserver.TabletServer);
 +  } else if (args[0].equals(shell)) {
 +runTMP = cl.loadClass(org.apache.accumulo.core.util.shell.Shell);
 +  } else if (args[0].equals(init)) {
 +runTMP = cl.loadClass(org.apache.accumulo.server.util.Initialize);
 +  } else if (args[0].equals(admin)) {
 +runTMP = cl.loadClass(org.apache.accumulo.server.util.Admin);
 +  } else if (args[0].equals(gc)) {
 +runTMP = 
cl.loadClass(org.apache.accumulo.server.gc.SimpleGarbageCollector);
 +  } else if (args[0].equals(monitor)) {
 +runTMP = cl.loadClass(org.apache.accumulo.server.monitor.Monitor);
 +  } else if (args[0].equals(tracer)) {
 +runTMP = cl.loadClass(org.apache.accumulo.server.trace.TraceServer);
 +  } else if (args[0].equals(proxy)) {
 +runTMP = cl.loadClass(org.apache.accumulo.proxy.Proxy);
 +  } else if (args[0].equals(classpath)) {
 +vfsClassLoader.getMethod(printClassPath, new Class[] 
{}).invoke(vfsClassLoader, new Object[] {});
 +return;
 +  } else if (args[0].equals(version)) {
 +runTMP = cl.loadClass(org.apache.accumulo.core.Constants);
 +System.out.println(runTMP.getField(VERSION).get(null));
 +return;
 +  } else if (args[0].equals(rfile-info)) {
 +runTMP = 
cl.loadClass(org.apache.accumulo.core.file.rfile.PrintInfo);
 +  } 

[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-02-24 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:

src/trace/src/main/java/org/apache/accumulo/cloudtrace/instrument/TraceProxy.java

src/trace/src/test/java/org/apache/accumulo/cloudtrace/instrument/TracerTest.java


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 41ce56a51ac2f18506e996a60fba44a464f65529
Parents: a38b004 2829426
Author: Mike Drob md...@cloudera.com
Authored: Mon Feb 24 12:26:48 2014 -0500
Committer: Mike Drob md...@cloudera.com
Committed: Mon Feb 24 12:26:48 2014 -0500

--
 .../accumulo/trace/instrument/TraceProxy.java   | 37 ---
 .../accumulo/trace/instrument/TracerTest.java   | 38 
 2 files changed, 63 insertions(+), 12 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/41ce56a5/trace/src/main/java/org/apache/accumulo/trace/instrument/TraceProxy.java
--
diff --cc 
trace/src/main/java/org/apache/accumulo/trace/instrument/TraceProxy.java
index a7eba1c,000..cb93210
mode 100644,00..100644
--- a/trace/src/main/java/org/apache/accumulo/trace/instrument/TraceProxy.java
+++ b/trace/src/main/java/org/apache/accumulo/trace/instrument/TraceProxy.java
@@@ -1,59 -1,0 +1,72 @@@
 +/*
 + * 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.trace.instrument;
 +
 +import java.lang.reflect.InvocationHandler;
++import java.lang.reflect.InvocationTargetException;
 +import java.lang.reflect.Method;
 +import java.lang.reflect.Proxy;
 +
++import org.apache.log4j.Logger;
++
 +public class TraceProxy {
-   // private static final Logger log = Logger.getLogger(TraceProxy.class);
-   
++  private static final Logger log = Logger.getLogger(TraceProxy.class);
++
 +  static final Sampler ALWAYS = new Sampler() {
 +@Override
 +public boolean next() {
 +  return true;
 +}
 +  };
-   
++
 +  public static T T trace(T instance) {
 +return trace(instance, ALWAYS);
 +  }
-   
++
 +  @SuppressWarnings(unchecked)
 +  public static T T trace(final T instance, final Sampler sampler) {
 +InvocationHandler handler = new InvocationHandler() {
 +  @Override
 +  public Object invoke(Object obj, Method method, Object[] args) throws 
Throwable {
- if (!sampler.next()) {
-   return method.invoke(instance, args);
++Span span = null;
++if (sampler.next()) {
++  span = Trace.on(method.getName());
 +}
- Span span = Trace.on(method.getName());
 +try {
 +  return method.invoke(instance, args);
- } catch (Throwable ex) {
-   ex.printStackTrace();
-   throw ex;
++  // Can throw RuntimeException, Error, or any checked exceptions of 
the method.
++} catch (InvocationTargetException ite) {
++  Throwable cause = ite.getCause();
++  if (cause == null) {
++// This should never happen, but account for it anyway
++log.error(Invocation exception during trace with null cause: , 
ite);
++throw new RuntimeException(ite);
++  }
++  throw cause;
++} catch (IllegalAccessException e) {
++  throw new RuntimeException(e);
 +} finally {
-   span.stop();
++  if (span != null) {
++span.stop();
++  }
 +}
 +  }
 +};
 +return (T) Proxy.newProxyInstance(instance.getClass().getClassLoader(), 
instance.getClass().getInterfaces(), handler);
 +  }
-   
++
 +}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/41ce56a5/trace/src/test/java/org/apache/accumulo/trace/instrument/TracerTest.java
--
diff --cc 
trace/src/test/java/org/apache/accumulo/trace/instrument/TracerTest.java
index 

[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-02-20 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:
test/src/main/java/org/apache/accumulo/test/functional/RunTests.java
test/system/auto/TestUtils.py


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 44a76367add9b886a8c94e36b3476ba01e28f524
Parents: 1a79677 7059c76
Author: Bill Havanki bhava...@cloudera.com
Authored: Thu Feb 20 16:54:23 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Thu Feb 20 16:54:23 2014 -0500

--
 .../accumulo/test/functional/RunTests.java  | 50 
 test/system/auto/run.py | 34 -
 2 files changed, 73 insertions(+), 11 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/44a76367/test/src/main/java/org/apache/accumulo/test/functional/RunTests.java
--
diff --cc test/src/main/java/org/apache/accumulo/test/functional/RunTests.java
index 0da0f61,000..0f4dd8e
mode 100644,00..100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/RunTests.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/RunTests.java
@@@ -1,169 -1,0 +1,201 @@@
 +/*
 + * 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.test.functional;
 +
++import java.io.BufferedReader;
 +import java.io.File;
 +import java.io.IOException;
 +import java.io.InputStream;
++import java.io.InputStreamReader;
 +import java.util.Arrays;
 +import java.util.List;
++import java.util.Map;
 +
 +import org.apache.accumulo.core.Constants;
 +import org.apache.accumulo.core.cli.Help;
 +import org.apache.hadoop.conf.Configuration;
 +import org.apache.hadoop.conf.Configured;
 +import org.apache.hadoop.fs.FileSystem;
 +import org.apache.hadoop.fs.Path;
 +import org.apache.hadoop.io.LongWritable;
 +import org.apache.hadoop.io.Text;
 +import org.apache.hadoop.mapreduce.Job;
 +import org.apache.hadoop.mapreduce.Mapper;
 +import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
 +import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
 +import org.apache.hadoop.util.Tool;
 +import org.apache.hadoop.util.ToolRunner;
 +import org.apache.log4j.Logger;
 +
 +import com.beust.jcommander.Parameter;
 +
 +/**
 + * Runs the functional tests via map-reduce.
 + * 
 + * First, be sure everything is compiled.
 + * 
 + * Second, get a list of the tests you want to run:
 + * 
 + * pre
 + *  $ python test/system/auto/run.py -l  tests
 + * /pre
 + * 
 + * Put the list of tests into HDFS:
 + * 
 + * pre
 + *  $ hadoop fs -put tests /user/hadoop/tests
 + * /pre
 + * 
 + * Run the map-reduce job:
 + * 
 + * pre
 + *  $ ./bin/accumulo accumulo.test.functional.RunTests --tests 
/user/hadoop/tests --output /user/hadoop/results
 + * /pre
 + * 
 + * Note that you will need to have some configuration in 
conf/accumulo-site.xml (to locate zookeeper). The map-reduce jobs will not use 
your local accumulo
 + * instance.
 + * 
 + */
 +public class RunTests extends Configured implements Tool {
 +  
 +  static final public String JOB_NAME = Functional Test Runner;
 +  private static final Logger log = Logger.getLogger(RunTests.class);
 +  
 +  private Job job = null;
 +  
 +  static class Opts extends Help {
 +@Parameter(names=--tests, description=newline separated list of tests 
to run, required=true)
 +String testFile;
 +@Parameter(names=--output, description=destination for the results of 
tests in HDFS, required=true)
 +String outputPath;
 +  }
 +  
 +  static public class TestMapper extends MapperLongWritable,Text,Text,Text {
 +
++private static final String REDUCER_RESULT_START = : ;
++private static final int RRS_LEN = REDUCER_RESULT_START.length();
++private Text result = new Text();
++
++private static enum Outcome {
++  

[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-02-19 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:
test/system/auto/README


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: f6c268e56b6428fbf9bb4da347ffe9406f2d8044
Parents: 8828328 ac18b56
Author: Bill Havanki bhava...@cloudera.com
Authored: Wed Feb 19 11:11:06 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Wed Feb 19 11:11:06 2014 -0500

--
 test/system/auto/README | 94 ++--
 1 file changed, 65 insertions(+), 29 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/f6c268e5/test/system/auto/README
--
diff --cc test/system/auto/README
index 7d18e8b,45ed158..41f6159
--- a/test/system/auto/README
+++ b/test/system/auto/README
@@@ -53,6 -63,32 +63,32 @@@ cluster at your disposal, you can run t
  
   $ python test/system/auto/run.py -l  tests
   $ hadoop fs -put tests /user/hadoop/tests
-  $ ./bin/accumulo org.apache.accumulo.test.functional.RunTests --tests 
/user/hadoop/tests --output /user/hadoop/results
 - $ ./bin/accumulo org.apache.accumulo.server.test.functional.RunTests \
 -   /user/hadoop/tests /user/hadoop/results
++ $ ./bin/accumulo org.apache.accumulo.test.functional.RunTests --tests \
++   /user/hadoop/tests --output /user/hadoop/results
+ 
+ The example above runs every test. You can trim the tests file to include
+ only the tests you wish to run.
+ 
+ In some clusters, the user under which MR jobs run is different from the user
+ under which Accumulo is installed, and this can cause failures running the
+ tests. Various configuration and permission changes can be made to help the
+ tests run, including the following:
+ 
+ * Opening up directory and file permissions on each cluster node so that the 
MR
+   user has the same read/write privileges as the Accumulo user. Adding the MR
+   user to a shared group is one easy way to accomplish this. Access is 
required
+   to the Accumulo installation, log, write-ahead log, and configuration
+   directories.
+ * Creating a user directory in HDFS, named after and owned by the MR user,
+   e.g., /user/mruser.
+ * Setting the ZOOKEEPER_HOME and HADOOP_CONF_DIR environment variables for the
+   MR user. These can be set using the mapred.child.env property in
+   mapred-site.xml, e.g.:
+ 
+   property
+ namemapred.child.env/name
+ 
valueZOOKEEPER_HOME=/path/to/zookeeper,HADOOP_CONF_DIR=/path/to/hadoop/conf/value
+   /property
  
-  
+ Each functional test is run by a mapper, and so you can check the mapper logs
+ to see any error messages tests produce.



[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT (-sours)

2014-01-30 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT (-sours)


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 688d4e476181bfd4d93f44fea0bfd663ea13da75
Parents: be26f79 9bff89f
Author: Bill Havanki bhava...@cloudera.com
Authored: Thu Jan 30 11:21:59 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Thu Jan 30 11:21:59 2014 -0500

--

--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT (-sours)

2014-01-24 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT (-sours)


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 295643ab039e813d35d00f8c7e248b4ca79d199c
Parents: 8981ba0 6593a9f
Author: Bill Havanki bhava...@cloudera.com
Authored: Fri Jan 24 15:24:17 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Fri Jan 24 15:24:17 2014 -0500

--

--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-01-22 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: bd67c465ffa17b4b063f123d1494f1d29c411f0a
Parents: 13eb19c 06f8030
Author: Bill Havanki bhava...@cloudera.com
Authored: Wed Jan 22 14:05:28 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Wed Jan 22 14:05:28 2014 -0500

--
 test/system/randomwalk/README | 10 ++
 1 file changed, 10 insertions(+)
--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-01-22 Thread elserj
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:

core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java

src/core/src/main/java/org/apache/accumulo/core/client/mapreduce/InputFormatBase.java

test/src/main/java/org/apache/accumulo/test/continuous/ContinuousVerify.java
test/system/continuous/run-verify.sh


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 7bef40489b3049d3baf66b210bd63123687e18a0
Parents: bd67c46 57f9b6c
Author: Josh Elser els...@apache.org
Authored: Wed Jan 22 16:59:26 2014 -0500
Committer: Josh Elser els...@apache.org
Committed: Wed Jan 22 16:59:26 2014 -0500

--
 .../core/client/mapreduce/RangeInputSplit.java  | 11 -
 .../mapreduce/lib/util/ConfiguratorBase.java| 14 +---
 .../test/continuous/ContinuousVerify.java   | 22 ++
 test/system/continuous/run-verify.sh| 24 +++-
 4 files changed, 66 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/7bef4048/core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
--
diff --cc 
core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
index 561e7ac,000..592cde6
mode 100644,00..100644
--- 
a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
@@@ -1,433 -1,0 +1,442 @@@
 +/*
 + * 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.client.mapreduce;
 +
 +import java.io.DataInput;
 +import java.io.DataOutput;
 +import java.io.IOException;
 +import java.math.BigInteger;
 +import java.nio.charset.Charset;
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.List;
 +import java.util.Set;
 +
 +import org.apache.accumulo.core.client.AccumuloSecurityException;
 +import org.apache.accumulo.core.client.Instance;
 +import org.apache.accumulo.core.client.IteratorSetting;
 +import org.apache.accumulo.core.client.ZooKeeperInstance;
 +import org.apache.accumulo.core.client.mapreduce.lib.util.InputConfigurator;
 +import org.apache.accumulo.core.client.mock.MockInstance;
 +import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
++import org.apache.accumulo.core.conf.AccumuloConfiguration;
++import org.apache.accumulo.core.conf.SiteConfiguration;
 +import org.apache.accumulo.core.data.ByteSequence;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.PartialKey;
 +import org.apache.accumulo.core.data.Range;
 +import org.apache.accumulo.core.security.Authorizations;
 +import org.apache.accumulo.core.security.CredentialHelper;
 +import org.apache.accumulo.core.util.Pair;
 +import org.apache.commons.codec.binary.Base64;
 +import org.apache.hadoop.io.Text;
 +import org.apache.hadoop.io.Writable;
 +import org.apache.hadoop.mapreduce.InputSplit;
 +import org.apache.log4j.Level;
 +
 +/**
 + * The Class RangeInputSplit. Encapsulates an Accumulo range for use in Map 
Reduce jobs.
 + */
 +public class RangeInputSplit extends InputSplit implements Writable {
 +  private Range range;
 +  private String[] locations;
 +  private String table, instanceName, zooKeepers, principal;
 +  private AuthenticationToken token;
 +  private Boolean offline, mockInstance, isolatedScan, localIterators;
 +  private Authorizations auths;
 +  private SetPairText,Text fetchedColumns;
 +  private ListIteratorSetting iterators;
 +  private Level level;
 +
 +  public RangeInputSplit() {
 +range = new Range();
 +locations = new String[0];
 +  }
 +
 +  public RangeInputSplit(Range range, String[] locations) {
 +this.range = 

[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-01-21 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 78c5f460b1a7f5b2762c2dba7437892151b4d59b
Parents: 0328838 e887f37
Author: Mike Drob md...@cloudera.com
Authored: Tue Jan 21 10:30:19 2014 -0500
Committer: Mike Drob md...@cloudera.com
Committed: Tue Jan 21 10:30:19 2014 -0500

--
 test/system/bench/README | 1 +
 1 file changed, 1 insertion(+)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/78c5f460/test/system/bench/README
--
diff --cc test/system/bench/README
index 03b1e97,06e174b..e5fe692
--- a/test/system/bench/README
+++ b/test/system/bench/README
@@@ -8,10 -8,11 +8,11 @@@ Syntax for running run.py
  Specifying a specific benchmark or set of benchmarks runs only those, while 
  not specifying any runs all benchmarks.
  -l Lists the benchmarks that will be run
 --v run_speed can either be slow, medium or fast
 --s log_level is a number representing the verbosity of the debugging 
output: 10 is debug, 20 is info, 30 is warning, etc.
 +-s run_speed can either be slow, medium or fast
 +-v log_level is a number representing the verbosity of the debugging 
output: 10 is debug, 20 is info, 30 is warning, etc.
  -u user user to use when connecting with accumulo.  If not set you will be 
prompted to input it.
  -p password password to use when connecting with accumulo.  If not set you 
will be prompted to input it.
+ -z zookeepers comma delimited lit of zookeeper host:port pairs to use when 
connecting with accumulo.  If not set you will be prompted to input it.
  -i instance instance to use when connecting with accumulo.  If not set you 
will be prompted to input it.
  
  **



[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-01-17 Thread bhavanki
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 52ef7c6e00beb6cd501ee57978eecea3adca109c
Parents: 75f27e5 7a677b5
Author: Bill Havanki bhava...@cloudera.com
Authored: Fri Jan 17 12:12:18 2014 -0500
Committer: Bill Havanki bhava...@cloudera.com
Committed: Fri Jan 17 12:12:18 2014 -0500

--
 .../system/randomwalk/conf/modules/LongEach.xml | 50 
 .../randomwalk/conf/modules/ShortEach.xml   | 50 
 2 files changed, 100 insertions(+)
--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2014-01-07 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 7088004c81618a5a5c5b7784e9b47f2647680e76
Parents: 833ac35 d2a1fe7
Author: Mike Drob md...@cloudera.com
Authored: Tue Jan 7 09:54:22 2014 -0800
Committer: Mike Drob md...@cloudera.com
Committed: Tue Jan 7 09:54:22 2014 -0800

--
 test/system/continuous/continuous-env.sh.example | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/7088004c/test/system/continuous/continuous-env.sh.example
--



[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2013-12-31 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

Conflicts:
test/system/auto/simple/readwrite.py


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 89c996229dc259fd6c4555d97e1da7b0d0f2e7a7
Parents: 20cc9f4 d605ebb
Author: Mike Drob md...@cloudera.com
Authored: Tue Dec 31 13:37:29 2013 -0800
Committer: Mike Drob md...@cloudera.com
Committed: Tue Dec 31 13:37:29 2013 -0800

--
 test/system/auto/TestUtils.py   | 8 ++--
 test/system/auto/simple/readwrite.py| 5 ++---
 test/system/auto/simple/zooCacheTest.py | 4 ++--
 3 files changed, 10 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/89c99622/test/system/auto/TestUtils.py
--
diff --cc test/system/auto/TestUtils.py
index 32dc4b8,3101cf9..68d2a9c
--- a/test/system/auto/TestUtils.py
+++ b/test/system/auto/TestUtils.py
@@@ -47,7 -47,10 +47,8 @@@ if os.getenv('ACCUMULO_CONF_DIR')
  else:
 ACCUMULO_CONF_DIR = os.path.join(ACCUMULO_HOME, 'conf')
  SITE = test- + ID
+ SITE_PATH = os.path.join(ACCUMULO_CONF_DIR, SITE)
  
 -WALOG = os.path.join(ACCUMULO_HOME, 'walogs', ID)
 -
  LOG_PROPERTIES= os.path.join(ACCUMULO_CONF_DIR, 'log4j.properties')
  LOG_GENERIC = os.path.join(ACCUMULO_CONF_DIR, 'generic_logger.xml')
  LOG_MONITOR = os.path.join(ACCUMULO_CONF_DIR, 'monitor_logger.xml')
@@@ -252,10 -259,10 +253,10 @@@ class TestUtilsMixin
  def stop_accumulo(self, signal=signal.SIGHUP):
  log.info('killing accumulo processes everywhere')
  for host in self.hosts:
 -self.pkill(host, 'org.apache.accumulo.start', signal)
 +self.pkill(host, 'accumulo.config.file', signal)
  
  def create_config_file(self, settings):
- fp = open(os.path.join(ACCUMULO_CONF_DIR, SITE), 'w')
+ fp = open(SITE_PATH, 'w')
fp.write('configuration\n')
  settings = self.settings.copy()
  settings.update({ 'instance.zookeeper.host': ZOOKEEPERS,
@@@ -442,10 -455,11 +446,10 @@@
 ['hadoop', 'fs', '-rmr', ACCUMULO_DIR]))
self.wait(self.runClassOn(self.masterHost(),
  
'org.apache.accumulo.server.util.DeleteZooInstance',
 -[INSTANCE_NAME]))
 -  self.wait(self.runOn(self.masterHost(), ['rm', '-rf', WALOG]))
 +['-i', INSTANCE_NAME]))
self.wait(self.runOn(self.masterHost(), ['rm', '-rf', ACCUMULO_HOME 
+ '/logs/' + ID]))
self.clean_logging() 
-   os.unlink(os.path.join(ACCUMULO_HOME, 'conf', SITE))
+   self.clean_config_file()
  
  def createTable(self, table, splitFile=None):
  if splitFile :

http://git-wip-us.apache.org/repos/asf/accumulo/blob/89c99622/test/system/auto/simple/readwrite.py
--
diff --cc test/system/auto/simple/readwrite.py
index 895daf5,13d2afa..d252677
--- a/test/system/auto/simple/readwrite.py
+++ b/test/system/auto/simple/readwrite.py
@@@ -20,7 -20,7 +20,7 @@@ import unittes
  import time
  import sys
  
- from TestUtils import TestUtilsMixin, FUZZ, ACCUMULO_HOME, SITE, 
INSTANCE_NAME, ROOT, ROOT_PASSWORD
 -from TestUtils import TestUtilsMixin, FUZZ, SITE_PATH
++from TestUtils import TestUtilsMixin, FUZZ, SITE_PATH, INSTANCE_NAME, ROOT, 
ROOT_PASSWORD
  
  log = logging.getLogger('test.auto')
  

http://git-wip-us.apache.org/repos/asf/accumulo/blob/89c99622/test/system/auto/simple/zooCacheTest.py
--



[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2013-12-17 Thread ecn
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 144d9d5bfd3f249cdabfb8a7f5d60543ff6cc6c1
Parents: 3458bfa bec36bc
Author: Eric Newton eric.new...@gmail.com
Authored: Tue Dec 17 15:03:37 2013 -0500
Committer: Eric Newton eric.new...@gmail.com
Committed: Tue Dec 17 15:03:37 2013 -0500

--
 .../accumulo/server/master/balancer/DefaultLoadBalancer.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/144d9d5b/server/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java
--
diff --cc 
server/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java
index 9b88d74,000..1fcab46
mode 100644,00..100644
--- 
a/server/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java
+++ 
b/server/src/main/java/org/apache/accumulo/server/master/balancer/DefaultLoadBalancer.java
@@@ -1,318 -1,0 +1,319 @@@
 +/*
 + * 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.server.master.balancer;
 +
 +import java.util.ArrayList;
 +import java.util.Collections;
 +import java.util.HashMap;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.Set;
 +import java.util.SortedMap;
 +
 +import org.apache.accumulo.core.data.KeyExtent;
 +import org.apache.accumulo.core.master.thrift.TableInfo;
 +import org.apache.accumulo.core.master.thrift.TabletServerStatus;
 +import org.apache.accumulo.core.tabletserver.thrift.TabletStats;
 +import org.apache.accumulo.server.master.state.TServerInstance;
 +import org.apache.accumulo.server.master.state.TabletMigration;
 +import org.apache.log4j.Logger;
 +
 +public class DefaultLoadBalancer extends TabletBalancer {
 +  
 +  private static final Logger log = 
Logger.getLogger(DefaultLoadBalancer.class);
 +  
 +  IteratorTServerInstance assignments;
 +  // if tableToBalance is set, then only balance the given table
 +  String tableToBalance = null;
 +  
 +  public DefaultLoadBalancer() {
 +
 +  }
 +  
 +  public DefaultLoadBalancer(String table) {
 +tableToBalance = table;
 +  }
 +  
 +  ListTServerInstance randomize(SetTServerInstance locations) {
 +ListTServerInstance result = new ArrayListTServerInstance(locations);
 +Collections.shuffle(result);
 +return result;
 +  }
 +  
 +  public TServerInstance 
getAssignment(SortedMapTServerInstance,TabletServerStatus locations, 
KeyExtent extent, TServerInstance last) {
 +if (locations.size() == 0)
 +  return null;
 +
 +if (last != null) {
 +  // Maintain locality
-   TServerInstance simple = new TServerInstance(last.getLocation(), );
++  String fakeSessionID =  ;
++  TServerInstance simple = new TServerInstance(last.getLocation(), 
fakeSessionID);
 +  IteratorTServerInstance find = 
locations.tailMap(simple).keySet().iterator();
 +  if (find.hasNext()) {
 +TServerInstance current = find.next();
 +if (current.host().equals(last.host()))
 +  return current;
 +  }
 +}
 +
 +// The strategy here is to walk through the locations and hand them back, 
one at a time
 +// Grab an iterator off of the set of options; use a new iterator if it 
hands back something not in the current list.
 +if (assignments == null || !assignments.hasNext())
 +  assignments = randomize(locations.keySet()).iterator();
 +TServerInstance result = assignments.next();
 +if (!locations.containsKey(result)) {
 +  assignments = null;
 +  return randomize(locations.keySet()).iterator().next();
 +}
 +return result;
 +  }
 +  
 +  static class ServerCounts 

[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2013-12-12 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 5fa1a75e393ce54fd8a675a949bfb820292b9dfa
Parents: 480c964 72106a6
Author: Mike Drob md...@cloudera.com
Authored: Thu Dec 12 17:49:47 2013 -0800
Committer: Mike Drob md...@cloudera.com
Committed: Thu Dec 12 17:49:47 2013 -0800

--

--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2013-11-26 Thread ecn
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 11ba435a4002ef44d18d0c646a3c7649943d7c80
Parents: ad9ee5e 51dd805
Author: Eric Newton eric.new...@gmail.com
Authored: Tue Nov 26 11:04:02 2013 -0500
Committer: Eric Newton eric.new...@gmail.com
Committed: Tue Nov 26 11:04:02 2013 -0500

--

--




[06/10] git commit: Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT

2013-11-11 Thread mdrob
Merge branch '1.4.5-SNAPSHOT' into 1.5.1-SNAPSHOT


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

Branch: refs/heads/1.5.1-SNAPSHOT
Commit: 8b5f261160f9e9c786d2d6ae61eddcebede34c81
Parents: 7f403df d059d00
Author: Mike Drob md...@mdrob.com
Authored: Mon Nov 11 14:42:02 2013 -0500
Committer: Mike Drob md...@mdrob.com
Committed: Mon Nov 11 14:42:22 2013 -0500

--
 .../accumulo/core/security/ColumnVisibility.java   | 13 +++--
 .../accumulo/core/security/ColumnVisibilityTest.java   |  7 +++
 2 files changed, 18 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/accumulo/blob/8b5f2611/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
--
diff --cc 
core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
index fe8128e,000..7d7daa2
mode 100644,00..100644
--- a/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
@@@ -1,499 -1,0 +1,508 @@@
 +/*
 + * 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.security;
 +
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collections;
 +import java.util.Comparator;
 +import java.util.List;
 +import java.util.TreeSet;
 +
 +import org.apache.accumulo.core.Constants;
 +import org.apache.accumulo.core.data.ArrayByteSequence;
 +import org.apache.accumulo.core.data.ByteSequence;
 +import org.apache.accumulo.core.util.BadArgumentException;
 +import org.apache.accumulo.core.util.TextUtil;
 +import org.apache.hadoop.io.Text;
 +import org.apache.hadoop.io.WritableComparator;
 +
 +/**
 + * Validate the column visibility is a valid expression and set the 
visibility for a Mutation. See {@link 
ColumnVisibility#ColumnVisibility(byte[])} for the
 + * definition of an expression.
 + */
 +public class ColumnVisibility {
 +  
 +  Node node = null;
 +  private byte[] expression;
 +  
 +  /**
 +   * Accessor for the underlying byte string.
 +   * 
 +   * @return byte array representation of a visibility expression
 +   */
 +  public byte[] getExpression() {
 +return expression;
 +  }
 +  
 +  public static enum NodeType {
- TERM, OR, AND,
++EMPTY, TERM, OR, AND,
 +  }
++
++  /**
++   * All empty nodes are equal and represent the same value.
++   */
++  private static final Node EMPTY_NODE = new Node(NodeType.EMPTY);
 +  
 +  public static class Node {
 +public final static ListNode EMPTY = Collections.emptyList();
 +NodeType type;
 +int start = 0;
 +int end = 0;
 +ListNode children = EMPTY;
 +
 +public Node(NodeType type) {
 +  this.type = type;
 +}
 +
 +public Node(int start, int end) {
 +  this.type = NodeType.TERM;
 +  this.start = start;
 +  this.end = end;
 +}
 +
 +public void add(Node child) {
 +  if (children == EMPTY)
 +children = new ArrayListNode();
 +  
 +  children.add(child);
 +}
 +
 +public NodeType getType() {
 +  return type;
 +}
 +
 +public ListNode getChildren() {
 +  return children;
 +}
 +
 +public int getTermStart() {
 +  return start;
 +}
 +
 +public int getTermEnd() {
 +  return end;
 +}
 +
 +public ByteSequence getTerm(byte expression[]) {
 +  if (type != NodeType.TERM)
 +throw new RuntimeException();
 +  
 +  if (expression[start] == '') {
 +// its a quoted term
 +int qStart = start + 1;
 +int qEnd = end - 1;
 +
 +return new ArrayByteSequence(expression, qStart, qEnd - qStart);
 +  }
 +  return new ArrayByteSequence(expression, start, end - start);
 +}
 +  }
 +  
 +  public static class NodeComparator