accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ctubb...@apache.org
Subject [accumulo] branch 1.9 updated: Updates to support Java 11 on 1.9 branch (#1295)
Date Mon, 29 Jul 2019 18:49:05 GMT
This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a commit to branch 1.9
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/1.9 by this push:
     new fd4d478  Updates to support Java 11 on 1.9 branch (#1295)
fd4d478 is described below

commit fd4d4788dfc8726f27e235249479677318384c09
Author: Christopher Tubbs <ctubbsii@apache.org>
AuthorDate: Mon Jul 29 14:48:59 2019 -0400

    Updates to support Java 11 on 1.9 branch (#1295)
    
    This includes partial backports of:
    * ec76015d6e357d3a799fc2507ae0c4f33e53bba0 and
    * 0e89ab238b14d257f9f901a36a9b87a7491c1ea9
    
    * Build on travis with Java 11
    * Update maven-javadoc-plugin
    * Drop `<javadocVersion>` from maven-javadoc-plugin configuration
    * Replace `<tt>` tags with `<code>`, since the former is no longer supported
    * Add `<caption>` for tables (weird Java 11 javadoc requirement)
    * Remove unnecessary suppressions with EasyMock updates
    * Make ShellServerIT.classpath test handle output under Java 11
    * Convert dubious DynamicThreadPoolsIT from an IT to a unit test
      (TabletServerResourceManagerDynamicCompactionPoolTest)
    * Give SimpleGarbageCollector 16MB of memory instead of 10MB for its
      gcLotsOfCandidatesIT test, so it doesn't crash under Java 11 before the
      test runs (Java 11 needs slightly more base memory, it appears)
    * Fix proxy tests in Java 11 by updating resource loading to be based
      on containing class
    * Update compiler compliance settings in Eclipse, in the m2e profile
    * Use newer version of minikdc for Kerberos testing
---
 .travis.yml                                        |   1 +
 .../data/doc-files/mutation-serialization.html     | 322 ++++++++++-----------
 .../org/apache/accumulo/core/iterators/Filter.java |   2 +-
 .../core/iterators/SortedKeyValueIterator.java     |  36 +--
 .../accumulo/core/iterators/YieldCallback.java     |   2 +-
 .../apache/accumulo/fate/ReadOnlyStoreTest.java    |   2 -
 pom.xml                                            |  19 +-
 .../server/conf/ZooCachePropertyAccessorTest.java  |   5 -
 .../accumulo/server/master/LiveTServerSetTest.java |   5 +-
 .../BaseHostRegexTableLoadBalancerTest.java        |   3 +-
 .../accumulo/gc/SimpleGarbageCollectorTest.java    |   4 +-
 .../tserver/TabletServerResourceManager.java       |  21 +-
 .../tserver/compaction/CompactionStrategy.java     |   2 +-
 ...erResourceManagerDynamicCompactionPoolTest.java | 159 ++++++++++
 .../accumulo/shell/ShellSetInstanceTest.java       |   3 +-
 .../classloader/vfs/AccumuloVFSClassLoader.java    |   5 +-
 .../vfs/AccumuloVFSClassLoaderTest.java            |   2 +-
 .../org/apache/accumulo/test/ShellServerIT.java    |   4 +-
 .../test/functional/DynamicThreadPoolsIT.java      | 128 --------
 .../test/functional/GarbageCollectorIT.java        |   5 +-
 .../accumulo/test/proxy/SimpleProxyBase.java       |   4 +-
 21 files changed, 388 insertions(+), 346 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index b67e92a..8ae5f09 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,6 +23,7 @@ cache:
 install: echo NOOP Skipping pre-fetch of Maven dependencies
 jdk:
   - openjdk8
+  - openjdk11
 before_script:
   - unset _JAVA_OPTIONS
 env:
diff --git a/core/src/main/java/org/apache/accumulo/core/data/doc-files/mutation-serialization.html b/core/src/main/java/org/apache/accumulo/core/data/doc-files/mutation-serialization.html
index d4d5ed3..f00d1b7 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/doc-files/mutation-serialization.html
+++ b/core/src/main/java/org/apache/accumulo/core/data/doc-files/mutation-serialization.html
@@ -1,6 +1,3 @@
-<html>
-<head>
-    <title>Serialization Formats for Mutation</title>
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
@@ -17,180 +14,175 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-</head>
-<body>
+<html>
+  <head>
+    <title>Serialization Formats for Mutation</title>
+  </head>
+  <body>
     <p>
-        The <code>Mutation</code> class supports two serialization formats.
-        While it only currently serializes to the newer version 2 format, it
-        can read both version 1 and version 2 serialized forms.
+    The <code>Mutation</code> class supports two serialization formats.
+    While it only currently serializes to the newer version 2 format, it
+    can read both version 1 and version 2 serialized forms.
     </p>
 
     <h2>Version 1 Format</h2>
-    <p>
-        Mutation data serialized in the version 1 format has the following
-        layout.
-    </p>
     <table>
-        <tr>
-            <th>data location</th>
-            <th>description</th>
-        </tr>
-        <tr>
-            <td>bytes 0 through 3</td>
-            <td>4-byte integer for length of row ID</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>row ID</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>data length</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>data (see below)</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>number of entries</td>
-        </tr>
-        <tr>
-            <td>next boolean</td>
-            <td>values present flag</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>number of values (only if values present flag is set)</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> sets of integers and byte arrays</td>
-            <td><i>n</i> value lengths and value data bytes (only if values
-                present flag is set)</td>
-        </tr>
+      <caption>Version 1 mutation data serialization layout</caption>
+      <tr>
+        <th>data location</th>
+        <th>description</th>
+      </tr>
+      <tr>
+        <td>bytes 0 through 3</td>
+        <td>4-byte integer for length of row ID</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>row ID</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>data length</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>data (see below)</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>number of entries</td>
+      </tr>
+      <tr>
+        <td>next boolean</td>
+        <td>values present flag</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>number of values (only if values present flag is set)</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> sets of integers and byte arrays</td>
+        <td><i>n</i> value lengths and value data bytes (only if values
+          present flag is set)</td>
+      </tr>
     </table>
-    <p>
-        The "data" block noted above has the following layout for each entry.
-    </p>
     <table>
-        <tr>
-            <td>first integer and byte array</td>
-            <td>column family length and bytes</td>
-        </tr>
-        <tr>
-            <td>next integer and byte array</td>
-            <td>column qualifier length and bytes</td>
-        </tr>
-        <tr>
-            <td>next integer and byte array</td>
-            <td>column visibility length and bytes</td>
-        </tr>
-        <tr>
-            <td>next boolean</td>
-            <td>has timestamp flag</td>
-        </tr>
-        <tr>
-            <td>next long</td>
-            <td>timestamp</td>
-        </tr>
-        <tr>
-            <td>next boolean</td>
-            <td>deleted flag</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>value length; if negative, value bytes are the same as those
-                for already-read value (-length - 1)</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>value bytes (only if value length is non-negative)</td>
-        </tr>
+      <caption>Version 1 "data" block layout for each entry</caption>
+      <tr>
+        <td>first integer and byte array</td>
+        <td>column family length and bytes</td>
+      </tr>
+      <tr>
+        <td>next integer and byte array</td>
+        <td>column qualifier length and bytes</td>
+      </tr>
+      <tr>
+        <td>next integer and byte array</td>
+        <td>column visibility length and bytes</td>
+      </tr>
+      <tr>
+        <td>next boolean</td>
+        <td>has timestamp flag</td>
+      </tr>
+      <tr>
+        <td>next long</td>
+        <td>timestamp</td>
+      </tr>
+      <tr>
+        <td>next boolean</td>
+        <td>deleted flag</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>value length; if negative, value bytes are the same as those
+          for already-read value (-length - 1)</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>value bytes (only if value length is non-negative)</td>
+      </tr>
     </table>
 
     <h2>Version 2 Format</h2>
-    <p>
-        Mutation data serialized in the version 2 format has the following
-        layout. This format uses variable length encoding for integers and
-        longs.
-    </p>
     <table>
-        <tr>
-            <th>data location</th>
-            <th>description</th>
-        </tr>
-        <tr>
-            <td>byte 0</td>
-            <td>control byte: top bit = 1 for version 2; bottom bit =
-                values present flag</td>
-        </tr>
-        <tr>
-            <td>next integer
-            <td>length of row ID</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>row ID</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>data length</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>data (see below)</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>number of entries</td>
-        </tr>
-        <tr>
-            <td>next integer</td>
-            <td>number of values (only if values present flag is set)</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> sets of integers and byte arrays</td>
-            <td><i>n</i> value lengths and value data bytes (only if values
-                present flag is set)</td>
-        </tr>
+      <caption>
+        Version 2 mutation data serialization layout<br>
+        (variable length encoding for integers and longs)
+      </caption>
+      <tr>
+        <th>data location</th>
+        <th>description</th>
+      </tr>
+      <tr>
+        <td>byte 0</td>
+        <td>control byte: top bit = 1 for version 2; bottom bit =
+          values present flag</td>
+      </tr>
+      <tr>
+        <td>next integer
+          <td>length of row ID</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>row ID</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>data length</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>data (see below)</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>number of entries</td>
+      </tr>
+      <tr>
+        <td>next integer</td>
+        <td>number of values (only if values present flag is set)</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> sets of integers and byte arrays</td>
+        <td><i>n</i> value lengths and value data bytes (only if values
+          present flag is set)</td>
+      </tr>
     </table>
-    <p>
-        The "data" block noted above has the following layout for each entry.
-    </p>
     <table>
-        <tr>
-            <td>first long and byte array</td>
-            <td>column family length and bytes</td>
-        </tr>
-        <tr>
-            <td>next long and byte array</td>
-            <td>column qualifier length and bytes</td>
-        </tr>
-        <tr>
-            <td>next long and byte array</td>
-            <td>column visibility length and bytes</td>
-        </tr>
-        <tr>
-            <td>next boolean</td>
-            <td>has timestamp flag</td>
-        </tr>
-        <tr>
-            <td>next long</td>
-            <td>timestamp (only present if timestamp flag is set)</td>
-        </tr>
-        <tr>
-            <td>next boolean</td>
-            <td>deleted flag</td>
-        </tr>
-        <tr>
-            <td>next long</td>
-            <td>value length; if negative, value bytes are the same as those
-                for already-read value (-length - 1)</td>
-        </tr>
-        <tr>
-            <td>next <i>n</i> bytes</td>
-            <td>value bytes (only if value length is non-negative)</td>
-        </tr>
+      <caption>Version 2 "data" block layout for each entry</caption>
+      <tr>
+        <td>first long and byte array</td>
+        <td>column family length and bytes</td>
+      </tr>
+      <tr>
+        <td>next long and byte array</td>
+        <td>column qualifier length and bytes</td>
+      </tr>
+      <tr>
+        <td>next long and byte array</td>
+        <td>column visibility length and bytes</td>
+      </tr>
+      <tr>
+        <td>next boolean</td>
+        <td>has timestamp flag</td>
+      </tr>
+      <tr>
+        <td>next long</td>
+        <td>timestamp (only present if timestamp flag is set)</td>
+      </tr>
+      <tr>
+        <td>next boolean</td>
+        <td>deleted flag</td>
+      </tr>
+      <tr>
+        <td>next long</td>
+        <td>value length; if negative, value bytes are the same as those
+          for already-read value (-length - 1)</td>
+      </tr>
+      <tr>
+        <td>next <i>n</i> bytes</td>
+        <td>value bytes (only if value length is non-negative)</td>
+      </tr>
     </table>
-</body>
+  </body>
 </html>
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java b/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java
index 8c39fef..c67252f 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java
@@ -83,7 +83,7 @@ public abstract class Filter extends WrappingIterator implements OptionDescriber
   }
 
   /**
-   * @return <tt>true</tt> if the key/value pair is accepted by the filter.
+   * @return <code>true</code> if the key/value pair is accepted by the filter.
    */
   public abstract boolean accept(Key k, Value v);
 
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyValueIterator.java b/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyValueIterator.java
index 9aee045..256cd5d 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyValueIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyValueIterator.java
@@ -36,11 +36,11 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * Initializes the iterator. Data should not be read from the source in this method.
    *
    * @param source
-   *          <tt>SortedKeyValueIterator</tt> source to read data from.
+   *          <code>SortedKeyValueIterator</code> source to read data from.
    * @param options
-   *          <tt>Map</tt> map of string option names to option values.
+   *          <code>Map</code> map of string option names to option values.
    * @param env
-   *          <tt>IteratorEnvironment</tt> environment in which iterator is being run.
+   *          <code>IteratorEnvironment</code> environment in which iterator is being run.
    * @throws IOException
    *           unused.
    * @exception IllegalArgumentException
@@ -55,7 +55,7 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * Returns true if the iterator has more elements. Note that if this iterator has yielded (@see
    * enableYielding(YieldCallback)), this this method must return false.
    *
-   * @return <tt>true</tt> if the iterator has more elements.
+   * @return <code>true</code> if the iterator has more elements.
    * @exception IllegalStateException
    *              if called before seek.
    */
@@ -100,12 +100,12 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * ensure that data from separate locality groups is not inadvertently read.
    *
    * @param range
-   *          <tt>Range</tt> of keys to iterate over.
+   *          <code>Range</code> of keys to iterate over.
    * @param columnFamilies
-   *          <tt>Collection</tt> of column families to include or exclude.
+   *          <code>Collection</code> of column families to include or exclude.
    * @param inclusive
-   *          <tt>boolean</tt> that indicates whether to include (true) or exclude (false) column
-   *          families.
+   *          <code>boolean</code> that indicates whether to include (true) or exclude (false)
+   *          column families.
    * @throws IOException
    *           if an I/O error occurs.
    * @exception IllegalArgumentException
@@ -122,11 +122,11 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * scopes. Deletion entries are only removed during full major compactions.
    * <p>
    * For performance reasons, iterators reserve the right to reuse objects returned by
-   * <tt>getTopKey</tt> when {@link #next()} is called, changing the data that the object
-   * references. Iterators that need to save an object returned by <tt>getTopKey</tt> ought to copy
-   * the object's data into a new object in order to avoid aliasing bugs.
+   * <code>getTopKey</code> when {@link #next()} is called, changing the data that the object
+   * references. Iterators that need to save an object returned by <code>getTopKey</code> ought to
+   * copy the object's data into a new object in order to avoid aliasing bugs.
    *
-   * @return <tt>K</tt>
+   * @return <code>K</code>
    * @exception IllegalStateException
    *              if called before seek.
    * @exception NoSuchElementException
@@ -139,11 +139,11 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * hasTop().
    * <p>
    * For performance reasons, iterators reserve the right to reuse objects returned by
-   * <tt>getTopValue</tt> when {@link #next()} is called, changing the underlying data that the
-   * object references. Iterators that need to save an object returned by <tt>getTopValue</tt> ought
-   * to copy the object's data into a new object in order to avoid aliasing bugs.
+   * <code>getTopValue</code> when {@link #next()} is called, changing the underlying data that the
+   * object references. Iterators that need to save an object returned by <code>getTopValue</code>
+   * ought to copy the object's data into a new object in order to avoid aliasing bugs.
    *
-   * @return <tt>V</tt>
+   * @return <code>V</code>
    * @exception IllegalStateException
    *              if called before seek.
    * @exception NoSuchElementException
@@ -159,8 +159,8 @@ public interface SortedKeyValueIterator<K extends WritableComparable<?>,V extend
    * either on the original or the copy. A proper implementation would call deepCopy on the source.
    *
    * @param env
-   *          <tt>IteratorEnvironment</tt> environment in which iterator is being run.
-   * @return <tt>SortedKeyValueIterator</tt> a copy of this iterator (with the same source and
+   *          <code>IteratorEnvironment</code> environment in which iterator is being run.
+   * @return <code>SortedKeyValueIterator</code> a copy of this iterator (with the same source and
    *         settings).
    * @exception UnsupportedOperationException
    *              if not supported.
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/YieldCallback.java b/core/src/main/java/org/apache/accumulo/core/iterators/YieldCallback.java
index 2e19b62..dd25031 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/YieldCallback.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/YieldCallback.java
@@ -46,7 +46,7 @@ public class YieldCallback<K> {
    * range in a subsequent seek call when the iterator is rebuilt. This will also reset the state
    * returned by hasYielded.
    *
-   * @return <tt>K</tt> The key position
+   * @return <code>K</code> The key position
    */
   public K getPositionAndReset() {
     try {
diff --git a/fate/src/test/java/org/apache/accumulo/fate/ReadOnlyStoreTest.java b/fate/src/test/java/org/apache/accumulo/fate/ReadOnlyStoreTest.java
index 8a02bbd..f182e92 100644
--- a/fate/src/test/java/org/apache/accumulo/fate/ReadOnlyStoreTest.java
+++ b/fate/src/test/java/org/apache/accumulo/fate/ReadOnlyStoreTest.java
@@ -33,12 +33,10 @@ public class ReadOnlyStoreTest {
 
   @Test
   public void everythingPassesThrough() throws Exception {
-    @SuppressWarnings("unchecked")
     Repo<String> repo = EasyMock.createMock(Repo.class);
     EasyMock.expect(repo.getDescription()).andReturn("description");
     EasyMock.expect(repo.isReady(0xdeadbeefl, null)).andReturn(0x0l);
 
-    @SuppressWarnings("unchecked")
     TStore<String> mock = EasyMock.createNiceMock(TStore.class);
     EasyMock.expect(mock.reserve()).andReturn(0xdeadbeefl);
     mock.reserve(0xdeadbeefl);
diff --git a/pom.xml b/pom.xml
index 78dbdd3..ff3f20b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,7 +138,7 @@
     <maven.plugin-version>3.0.5</maven.plugin-version>
     <!-- surefire/failsafe plugin option -->
     <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
-    <powermock.version>1.7.4</powermock.version>
+    <powermock.version>2.0.2</powermock.version>
     <!-- surefire/failsafe plugin option -->
     <reuseForks>false</reuseForks>
     <slf4j.version>1.7.25</slf4j.version>
@@ -146,6 +146,7 @@
     <surefire.excludedGroups />
     <surefire.failIfNoSpecifiedTests>false</surefire.failIfNoSpecifiedTests>
     <surefire.groups />
+    <surefire.version>3.0.0-M3</surefire.version>
     <!-- Thrift version -->
     <thrift.version>0.9.3-1</thrift.version>
     <!-- ZooKeeper version -->
@@ -367,8 +368,7 @@
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-vfs2</artifactId>
-        <!-- commons-vfs2 version 2.2 has defects that impacts changing Accumulo classpath contexts. -->
-        <version>2.1</version>
+        <version>2.3</version>
       </dependency>
       <dependency>
         <groupId>org.apache.curator</groupId>
@@ -413,7 +413,8 @@
       <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-minikdc</artifactId>
-        <version>${hadoop.version}</version>
+        <!-- this version works better with java 11 than Hadoop 2 versions -->
+        <version>3.0.0</version>
       </dependency>
       <dependency>
         <groupId>org.apache.hadoop</groupId>
@@ -478,7 +479,7 @@
       <dependency>
         <groupId>org.easymock</groupId>
         <artifactId>easymock</artifactId>
-        <version>3.6</version>
+        <version>4.0.2</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
@@ -655,9 +656,9 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
+          <version>3.1.0</version>
           <configuration>
             <quiet>true</quiet>
-            <javadocVersion>1.8.0</javadocVersion>
             <additionalJOption>-J-Xmx512m</additionalJOption>
             <doclint>all,-missing</doclint>
           </configuration>
@@ -687,6 +688,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
+          <version>${surefire.version}</version>
           <configuration>
             <excludedGroups>${surefire.excludedGroups}</excludedGroups>
             <groups>${surefire.groups}</groups>
@@ -699,6 +701,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-failsafe-plugin</artifactId>
+          <version>${surefire.version}</version>
           <configuration>
             <excludedGroups>${failsafe.excludedGroups}</excludedGroups>
             <groups>${failsafe.groups}</groups>
@@ -1097,6 +1100,10 @@
           <name>m2e.version</name>
         </property>
       </activation>
+      <properties>
+        <!-- enforces Java 7 compiler compliance, even when Eclipse uses JDK 9 or later -->
+        <maven.compiler.release>7</maven.compiler.release>
+      </properties>
       <build>
         <pluginManagement>
           <plugins>
diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/ZooCachePropertyAccessorTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/ZooCachePropertyAccessorTest.java
index 9bd7b90..4b29e41 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/conf/ZooCachePropertyAccessorTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/conf/ZooCachePropertyAccessorTest.java
@@ -107,7 +107,6 @@ public class ZooCachePropertyAccessorTest {
   public void testGetProperties() {
     Map<String,String> props = new java.util.HashMap<>();
     AccumuloConfiguration parent = createMock(AccumuloConfiguration.class);
-    @SuppressWarnings("unchecked")
     Predicate<String> filter = createMock(Predicate.class);
     parent.getProperties(props, filter);
     replay(parent);
@@ -134,7 +133,6 @@ public class ZooCachePropertyAccessorTest {
   public void testGetProperties_NoChildren() {
     Map<String,String> props = new java.util.HashMap<>();
     AccumuloConfiguration parent = createMock(AccumuloConfiguration.class);
-    @SuppressWarnings("unchecked")
     Predicate<String> filter = createMock(Predicate.class);
     parent.getProperties(props, filter);
     replay(parent);
@@ -149,7 +147,6 @@ public class ZooCachePropertyAccessorTest {
   public void testGetProperties_Filter() {
     Map<String,String> props = new java.util.HashMap<>();
     AccumuloConfiguration parent = createMock(AccumuloConfiguration.class);
-    @SuppressWarnings("unchecked")
     Predicate<String> filter = createMock(Predicate.class);
     parent.getProperties(props, filter);
     replay(parent);
@@ -169,9 +166,7 @@ public class ZooCachePropertyAccessorTest {
   public void testGetProperties_ParentFilter() {
     Map<String,String> props = new java.util.HashMap<>();
     AccumuloConfiguration parent = createMock(AccumuloConfiguration.class);
-    @SuppressWarnings("unchecked")
     Predicate<String> filter = createMock(Predicate.class);
-    @SuppressWarnings("unchecked")
     Predicate<String> parentFilter = createMock(Predicate.class);
     parent.getProperties(props, parentFilter);
     replay(parent);
diff --git a/server/base/src/test/java/org/apache/accumulo/server/master/LiveTServerSetTest.java b/server/base/src/test/java/org/apache/accumulo/server/master/LiveTServerSetTest.java
index 69bf2b6..e40b051 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/master/LiveTServerSetTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/master/LiveTServerSetTest.java
@@ -42,8 +42,9 @@ public class LiveTServerSetTest {
         new TServerInstance(HostAndPort.fromParts("localhost", 1234), "5555"), mockConn);
     servers.put("server1", server1);
 
-    LiveTServerSet tservers = new LiveTServerSet(EasyMock.createMock(ClientContext.class),
-        EasyMock.createMock(Listener.class));
+    ClientContext clientContext = EasyMock.createMock(ClientContext.class);
+    Listener listener = EasyMock.createMock(Listener.class);
+    LiveTServerSet tservers = new LiveTServerSet(clientContext, listener);
 
     assertEquals(server1.instance, tservers.find(servers, "localhost:1234"));
     assertNull(tservers.find(servers, "localhost:4321"));
diff --git a/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java b/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
index 23ad6ad..b7dc3dd 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/master/balancer/BaseHostRegexTableLoadBalancerTest.java
@@ -333,7 +333,8 @@ public abstract class BaseHostRegexTableLoadBalancerTest extends HostRegexTableL
 
   @Override
   protected TableOperations getTableOperations() {
-    return new TableOperationsImpl(EasyMock.createMock(ClientContext.class)) {
+    ClientContext clientContext = EasyMock.createMock(ClientContext.class);
+    return new TableOperationsImpl(clientContext) {
       @Override
       public Map<String,String> tableIdMap() {
         HashMap<String,String> tables = new HashMap<>();
diff --git a/server/gc/src/test/java/org/apache/accumulo/gc/SimpleGarbageCollectorTest.java b/server/gc/src/test/java/org/apache/accumulo/gc/SimpleGarbageCollectorTest.java
index 06afe58..543b89e 100644
--- a/server/gc/src/test/java/org/apache/accumulo/gc/SimpleGarbageCollectorTest.java
+++ b/server/gc/src/test/java/org/apache/accumulo/gc/SimpleGarbageCollectorTest.java
@@ -110,7 +110,9 @@ public class SimpleGarbageCollectorTest {
   @Test
   public void testConstruction() {
     assertSame(opts, gc.getOpts());
-    assertNotNull(gc.getStatus(createMock(TInfo.class), createMock(TCredentials.class)));
+    TCredentials tcreds = createMock(TCredentials.class);
+    TInfo tinfo = createMock(TInfo.class);
+    assertNotNull(gc.getStatus(tinfo, tcreds));
   }
 
   private ConfigurationCopy createSystemConfig() {
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
index e674eda..3d8f061 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
@@ -113,7 +113,7 @@ public class TabletServerResourceManager {
     return tp;
   }
 
-  private ExecutorService addEs(final Property maxThreads, String name,
+  private ExecutorService addEs(final Property maxThreads, final String name,
       final ThreadPoolExecutor tp) {
     ExecutorService result = addEs(name, tp);
     SimpleTimer.getInstance(tserver.getConfiguration()).schedule(new Runnable() {
@@ -121,17 +121,26 @@ public class TabletServerResourceManager {
       public void run() {
         try {
           int max = tserver.getConfiguration().getCount(maxThreads);
-          if (tp.getMaximumPoolSize() != max) {
-            log.info("Changing " + maxThreads.getKey() + " to " + max);
-            tp.setCorePoolSize(max);
-            tp.setMaximumPoolSize(max);
+          int currentMax = tp.getMaximumPoolSize();
+          if (currentMax != max) {
+            log.info("Changing {} for {} from {} to {}", maxThreads.getKey(), name, currentMax,
+                max);
+            if (max > currentMax) {
+              // increasing, increase the max first, or the core will fail to be increased
+              tp.setMaximumPoolSize(max);
+              tp.setCorePoolSize(max);
+            } else {
+              // decreasing, lower the core size first, or the max will fail to be lowered
+              tp.setCorePoolSize(max);
+              tp.setMaximumPoolSize(max);
+            }
           }
         } catch (Throwable t) {
           log.error("Failed to change thread pool size", t);
         }
       }
 
-    }, 1000, 10 * 1000);
+    }, 1000, 10_000);
     return result;
   }
 
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/CompactionStrategy.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/CompactionStrategy.java
index 435f6ec..c0faa05 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/CompactionStrategy.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/CompactionStrategy.java
@@ -39,7 +39,7 @@ public abstract class CompactionStrategy {
 
   /**
    * The settings for the compaction strategy pulled from zookeeper. The
-   * <tt>table.compacations.major.strategy.opts</tt> part of the setting will be removed.
+   * <code>table.compacations.major.strategy.opts</code> part of the setting will be removed.
    */
   public void init(Map<String,String> options) {}
 
diff --git a/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletServerResourceManagerDynamicCompactionPoolTest.java b/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletServerResourceManagerDynamicCompactionPoolTest.java
new file mode 100644
index 0000000..337115b
--- /dev/null
+++ b/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletServerResourceManagerDynamicCompactionPoolTest.java
@@ -0,0 +1,159 @@
+/*
+ * 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.tserver;
+
+import static org.apache.accumulo.fate.util.UtilWaitThread.sleep;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.conf.ConfigurationCopy;
+import org.apache.accumulo.core.conf.DefaultConfiguration;
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.data.impl.KeyExtent;
+import org.apache.accumulo.server.conf.ServerConfigurationFactory;
+import org.junit.After;
+import org.junit.Test;
+
+public class TabletServerResourceManagerDynamicCompactionPoolTest {
+
+  private final AtomicBoolean keepRunning = new AtomicBoolean(true);
+  private final AtomicInteger numRunning = new AtomicInteger(0);
+  private final AtomicInteger maxRan = new AtomicInteger(0);
+
+  private class FakeCompaction implements Runnable, Comparable<Runnable> {
+    private final String tableId;
+
+    public FakeCompaction(String tableId) {
+      this.tableId = tableId;
+    }
+
+    @Override
+    public void run() {
+      numRunning.addAndGet(1);
+      while (keepRunning.get()) {
+        sleep(5);
+      }
+      numRunning.decrementAndGet();
+      maxRan.addAndGet(1);
+    }
+
+    @Override
+    public int compareTo(Runnable o) {
+      if (o instanceof FakeCompaction) {
+        return tableId.compareTo(((FakeCompaction) o).tableId);
+      }
+      return 1;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      return super.equals(obj);
+    }
+
+    @Override
+    public int hashCode() {
+      return super.hashCode();
+    }
+  }
+
+  @After
+  public void stopRunningThreads() {
+    keepRunning.set(false);
+  }
+
+  /*
+   * Ensure the TabletServerResourceManager increases the thread pool size dynamically
+   */
+  @Test(timeout = 20_000)
+  public void testDynamicThreadPoolUpdates() {
+    // create a mock config that substitutes for the system configuration in ZK
+    ConfigurationCopy config = new ConfigurationCopy(DefaultConfiguration.getInstance());
+    config.set(Property.TSERV_NATIVEMAP_ENABLED, "false");
+    config.set(Property.TSERV_MAJC_DELAY, "100ms");
+    config.set(Property.TSERV_MAJC_MAXCONCURRENT, "3");
+    // not actually using this memory, so trick the resource manager into thinking all the memory
+    // usage fits into the small memory footprint of the unit test environment
+    config.set(Property.TSERV_MAXMEM, "1");
+
+    ServerConfigurationFactory serverConfFactory = createMock(ServerConfigurationFactory.class);
+    expect(serverConfFactory.getConfiguration()).andReturn(config).anyTimes();
+    TabletServer context = createMock(TabletServer.class);
+    expect(context.getConfiguration()).andReturn(config).anyTimes();
+    Instance instance = createMock(Instance.class);
+    expect(serverConfFactory.getInstance()).andReturn(instance).anyTimes();
+    expect(context.getServerConfigurationFactory()).andReturn(serverConfFactory).anyTimes();
+    replay(context, serverConfFactory, instance);
+
+    // create a resource manager to test
+    keepRunning.set(true);
+    TabletServerResourceManager manager = new TabletServerResourceManager(context, null);
+
+    // start first batch and ensure it runs at most 3 at a time (initial configuration)
+    for (int i = 0; i < 10; i++) {
+      String tableId = "userTableBatch1_" + i;
+      manager.executeMajorCompaction(new KeyExtent(tableId, null, null),
+          new FakeCompaction(tableId));
+    }
+    waitForNumRunningToReach(3);
+
+    // increase the number of concurrent threads to 5 and wait for it to eventually reach 5
+    config.set(Property.TSERV_MAJC_MAXCONCURRENT, "5");
+    waitForNumRunningToReach(5);
+
+    // shut down the first batch (this will run all the remaining queued)
+    keepRunning.set(false);
+    waitForNumRunningToReach(0);
+
+    // make sure all 10 in the first batch ran, and reset it for the second batch
+    assertTrue(maxRan.compareAndSet(10, 0));
+
+    // decrease to 2, but need to wait for it to propagate, or else the running compactions will
+    // block the decrease in the threadpool size; the scheduler updates this every 10 seconds, so
+    // we'll give it 12 to be sure it updated before we execute any new tasks
+    config.set(Property.TSERV_MAJC_MAXCONCURRENT, "2");
+    sleep(12_000);
+
+    // start the second batch of 10 tasks, and make sure it stops at 2
+    keepRunning.set(true);
+    for (int i = 0; i < 10; i++) {
+      String tableId = "userTableBatch2_" + i;
+      manager.executeMajorCompaction(new KeyExtent(tableId, null, null),
+          new FakeCompaction(tableId));
+    }
+    waitForNumRunningToReach(2);
+
+    // shut down second batch (this will run out all the remaining queued)
+    keepRunning.set(false);
+    waitForNumRunningToReach(0);
+
+    // make sure all 10 in the second batch ran, and reset it
+    assertTrue(maxRan.compareAndSet(10, 0));
+  }
+
+  private void waitForNumRunningToReach(int expected) {
+    while (numRunning.get() != expected) {
+      sleep(10);
+    }
+  }
+
+}
diff --git a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
index ee0cc37..2879020 100644
--- a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
+++ b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
@@ -60,7 +60,8 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import jline.console.ConsoleReader;
 
 @RunWith(PowerMockRunner.class)
-@PowerMockIgnore("javax.security.*")
+@PowerMockIgnore({"javax.security.*", "javax.xml.*", "org.xml.*", "com.sun.org.apache.xerces.*",
+    "org.w3c.dom.*", "org.apache.xerces.*"})
 @PrepareForTest({Shell.class, ZooUtil.class, ConfigSanityCheck.class})
 public class ShellSetInstanceTest {
   public static class TestOutputStream extends OutputStream {
diff --git a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
index dac921d..25b8ac6 100644
--- a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
+++ b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoader.java
@@ -363,7 +363,10 @@ public class AccumuloVFSClassLoader {
             break;
         }
 
-        if (classLoader instanceof URLClassLoader) {
+        if (classLoader.getClass().getName().startsWith("jdk.internal")) {
+          out.print("Level " + classLoaderDescription + " " + classLoader.getClass().getName()
+              + " configuration not inspectable.");
+        } else if (classLoader instanceof URLClassLoader) {
           // If VFS class loader enabled, but no contexts defined.
           out.print("Level " + classLoaderDescription + " URL classpath items are:");
 
diff --git a/start/src/test/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoaderTest.java b/start/src/test/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoaderTest.java
index 2858484..d7bfda7 100644
--- a/start/src/test/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoaderTest.java
+++ b/start/src/test/java/org/apache/accumulo/start/classloader/vfs/AccumuloVFSClassLoaderTest.java
@@ -45,7 +45,7 @@ import org.powermock.reflect.Whitebox;
     "org.apache.log4j.LogManager"})
 @PowerMockIgnore({"org.apache.log4j.*", "org.apache.hadoop.log.metrics",
     "org.apache.commons.logging.*", "org.xml.*", "javax.xml.*", "org.w3c.dom.*",
-    "org.apache.hadoop.*"})
+    "org.apache.hadoop.*", "com.sun.org.apache.xerces.*"})
 public class AccumuloVFSClassLoaderTest {
 
   private TemporaryFolder folder1 =
diff --git a/test/src/main/java/org/apache/accumulo/test/ShellServerIT.java b/test/src/main/java/org/apache/accumulo/test/ShellServerIT.java
index 5193278..23ef3bf 100644
--- a/test/src/main/java/org/apache/accumulo/test/ShellServerIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ShellServerIT.java
@@ -800,8 +800,8 @@ public class ShellServerIT extends SharedMiniClusterBase {
   @Test
   public void classpath() throws Exception {
     // classpath
-    ts.exec("classpath", true, "Level 2: Java Classloader (loads everything"
-        + " defined by java classpath) URL classpath items are", true);
+    ts.exec("classpath", true,
+        "Level 2: Java Classloader (loads everything defined by java classpath)", true);
   }
 
   @Test
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java b/test/src/main/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
deleted file mode 100644
index 5aee614..0000000
--- a/test/src/main/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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 static org.apache.accumulo.fate.util.UtilWaitThread.sleepUninterruptibly;
-import static org.junit.Assert.fail;
-
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.accumulo.core.cli.BatchWriterOpts;
-import org.apache.accumulo.core.client.ClientConfiguration;
-import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.impl.ClientContext;
-import org.apache.accumulo.core.client.impl.Credentials;
-import org.apache.accumulo.core.client.impl.MasterClient;
-import org.apache.accumulo.core.conf.AccumuloConfiguration;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.master.thrift.MasterClientService;
-import org.apache.accumulo.core.master.thrift.MasterMonitorInfo;
-import org.apache.accumulo.core.master.thrift.TableInfo;
-import org.apache.accumulo.core.master.thrift.TabletServerStatus;
-import org.apache.accumulo.core.trace.Tracer;
-import org.apache.accumulo.harness.AccumuloClusterHarness;
-import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.accumulo.test.TestIngest;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class DynamicThreadPoolsIT extends AccumuloClusterHarness {
-
-  @Override
-  public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
-    cfg.setNumTservers(1);
-    Map<String,String> siteConfig = cfg.getSiteConfig();
-    siteConfig.put(Property.TSERV_MAJC_DELAY.getKey(), "100ms");
-    cfg.setSiteConfig(siteConfig);
-  }
-
-  @Override
-  protected int defaultTimeoutSeconds() {
-    return 4 * 60;
-  }
-
-  private String majcDelay;
-
-  @Before
-  public void updateMajcDelay() throws Exception {
-    Connector c = getConnector();
-    majcDelay =
-        c.instanceOperations().getSystemConfiguration().get(Property.TSERV_MAJC_DELAY.getKey());
-    c.instanceOperations().setProperty(Property.TSERV_MAJC_DELAY.getKey(), "100ms");
-    if (getClusterType() == ClusterType.STANDALONE) {
-      Thread.sleep(AccumuloConfiguration.getTimeInMillis(majcDelay));
-    }
-  }
-
-  @After
-  public void resetMajcDelay() throws Exception {
-    Connector c = getConnector();
-    c.instanceOperations().setProperty(Property.TSERV_MAJC_DELAY.getKey(), majcDelay);
-  }
-
-  @Test
-  public void test() throws Exception {
-    final String[] tables = getUniqueNames(15);
-    String firstTable = tables[0];
-    Connector c = getConnector();
-    c.instanceOperations().setProperty(Property.TSERV_MAJC_MAXCONCURRENT.getKey(), "5");
-    TestIngest.Opts opts = new TestIngest.Opts();
-    opts.rows = 500 * 1000;
-    opts.createTable = true;
-    opts.setTableName(firstTable);
-    ClientConfiguration clientConf = cluster.getClientConfig();
-    if (clientConf.hasSasl()) {
-      opts.updateKerberosCredentials(clientConf);
-    } else {
-      opts.setPrincipal(getAdminPrincipal());
-    }
-    TestIngest.ingest(c, opts, new BatchWriterOpts());
-    c.tableOperations().flush(firstTable, null, null, true);
-    for (int i = 1; i < tables.length; i++)
-      c.tableOperations().clone(firstTable, tables[i], true, null, null);
-    sleepUninterruptibly(11, TimeUnit.SECONDS); // time between checks of the thread pool sizes
-    Credentials creds = new Credentials(getAdminPrincipal(), getAdminToken());
-    for (int i = 1; i < tables.length; i++)
-      c.tableOperations().compact(tables[i], null, null, true, false);
-    for (int i = 0; i < 30; i++) {
-      int count = 0;
-      MasterClientService.Iface client = null;
-      MasterMonitorInfo stats = null;
-      try {
-        client = MasterClient
-            .getConnectionWithRetry(new ClientContext(c.getInstance(), creds, clientConf));
-        stats = client.getMasterStats(Tracer.traceInfo(), creds.toThrift(c.getInstance()));
-      } finally {
-        if (client != null)
-          MasterClient.close(client);
-      }
-      for (TabletServerStatus server : stats.tServerInfo) {
-        for (TableInfo table : server.tableMap.values()) {
-          count += table.majors.running;
-        }
-      }
-      System.out.println("count " + count);
-      if (count > 3)
-        return;
-      sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
-    }
-    fail("Could not observe higher number of threads after changing the config");
-  }
-}
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
index 12d3559..e33524d 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java
@@ -106,7 +106,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase {
     try {
       ZooLock.deleteLock(zk, path);
     } catch (IllegalStateException e) {
-
+      log.error("Unable to delete ZooLock for mini accumulo-gc", e);
     }
 
     assertNull(getCluster().getProcesses().get(ServerType.GARBAGE_COLLECTOR));
@@ -150,7 +150,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase {
     log.info("Filling metadata table with bogus delete flags");
     Connector c = getConnector();
     addEntries(c, new BatchWriterOpts());
-    cluster.getConfig().setDefaultMemory(10, MemoryUnit.MEGABYTE);
+    cluster.getConfig().setDefaultMemory(16, MemoryUnit.MEGABYTE);
     Process gc = cluster.exec(SimpleGarbageCollector.class);
     sleepUninterruptibly(20, TimeUnit.SECONDS);
     String output = "";
@@ -160,6 +160,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase {
         int n = gc.getInputStream().read(buffer);
         output = new String(buffer, 0, n, UTF_8);
       } catch (IOException ex) {
+        log.error("IO error reading the IT's accumulo-gc STDOUT", ex);
         break;
       }
     }
diff --git a/test/src/main/java/org/apache/accumulo/test/proxy/SimpleProxyBase.java b/test/src/main/java/org/apache/accumulo/test/proxy/SimpleProxyBase.java
index bc2a461..581dd55 100644
--- a/test/src/main/java/org/apache/accumulo/test/proxy/SimpleProxyBase.java
+++ b/test/src/main/java/org/apache/accumulo/test/proxy/SimpleProxyBase.java
@@ -2711,8 +2711,8 @@ public abstract class SimpleProxyBase extends SharedMiniClusterBase {
     File jarDir = new File(System.getProperty("user.dir"), "target");
     assertTrue(jarDir.mkdirs() || jarDir.isDirectory());
     File jarFile = new File(jarDir, "TestCompactionStrat.jar");
-    FileUtils.copyInputStreamToFile(Class.class.getResourceAsStream("/TestCompactionStrat.jar"),
-        jarFile);
+    FileUtils.copyInputStreamToFile(
+        SimpleProxyBase.class.getResourceAsStream("/TestCompactionStrat.jar"), jarFile);
     client.setProperty(creds, Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey() + "context1",
         jarFile.toString());
     client.setTableProperty(creds, tableName, Property.TABLE_CLASSPATH.getKey(), "context1");


Mime
View raw message