accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ctubb...@apache.org
Subject accumulo git commit: ACCUMULO-3643 Catch findbugs up through rank 14
Date Tue, 10 Mar 2015 02:19:28 GMT
Repository: accumulo
Updated Branches:
  refs/heads/master 9cd896277 -> 9f108c039


ACCUMULO-3643 Catch findbugs up through rank 14

Triaged all findbugs issues at the "troubling" ranks.

These included:
possible null pointer dereferences,
possible concurrency correctness issues,
subclass simple name shadowing, and
missing hashCode implementations for equals.

Added minor fixes or explicitly documented exclusions on things which looked
okay. Added exclusion file to each module to simplify pom configuration for
findbugs-maven-plugin and to make it easier for future issues to be added after
triage.


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

Branch: refs/heads/master
Commit: 9f108c039b3d21c167cb1d99b398491b820ba3c9
Parents: 9cd8962
Author: Christopher Tubbs <ctubbsii@apache.org>
Authored: Mon Mar 9 21:56:12 2015 -0400
Committer: Christopher Tubbs <ctubbsii@apache.org>
Committed: Mon Mar 9 21:56:12 2015 -0400

----------------------------------------------------------------------
 core/pom.xml                                    |  7 --
 core/src/main/findbugs/exclude-filter.xml       | 70 +++++++++++++------
 .../client/admin/CompactionStrategyConfig.java  |  5 ++
 .../core/client/impl/TabletLocatorImpl.java     | 41 +++++++----
 .../client/impl/TabletServerBatchWriter.java    | 45 ++++++++----
 .../core/client/mock/MockNamespace.java         |  2 +-
 .../org/apache/accumulo/core/data/Value.java    |  1 +
 .../apache/accumulo/core/volume/VolumeImpl.java |  6 ++
 .../accumulo/core/cli/TestClientOpts.java       |  2 +-
 .../core/file/rfile/RFileMetricsTest.java       | 73 +++++++++-----------
 .../iterators/user/ColumnSliceFilterTest.java   |  2 +-
 .../simple/src/main/findbugs/exclude-filter.xml | 18 +++++
 .../examples/simple/mapreduce/RowHash.java      |  2 +-
 fate/src/main/findbugs/exclude-filter.xml       | 18 +++++
 .../zookeeper/DistributedReadWriteLockTest.java | 17 +++--
 .../src/main/findbugs/exclude-filter.xml        | 18 +++++
 .../src/main/findbugs/exclude-filter.xml        | 30 ++++++++
 pom.xml                                         |  3 +-
 proxy/pom.xml                                   | 13 ----
 proxy/src/main/findbugs/exclude-filter.xml      |  7 +-
 .../base/src/main/findbugs/exclude-filter.xml   | 26 +++++++
 .../server/master/balancer/GroupBalancer.java   |  6 ++
 .../server/metrics/MetricsConfiguration.java    |  7 +-
 .../accumulo/server/ServerConstantsTest.java    | 12 +++-
 .../AuthenticationTokenKeyManagerTest.java      | 34 +++++----
 server/gc/src/main/findbugs/exclude-filter.xml  | 18 +++++
 .../gc/GarbageCollectWriteAheadLogsTest.java    |  3 +-
 .../master/src/main/findbugs/exclude-filter.xml | 23 ++++++
 .../RemoveCompleteReplicationRecords.java       |  3 +
 .../src/main/findbugs/exclude-filter.xml        | 18 +++++
 server/tracer/pom.xml                           | 13 ----
 .../tracer/src/main/findbugs/exclude-filter.xml |  7 +-
 .../src/main/findbugs/exclude-filter.xml        | 24 +++++++
 .../accumulo/server/logger/LogFileKey.java      | 25 -------
 .../accumulo/server/logger/LogFileValue.java    | 25 -------
 .../accumulo/tserver/log/LocalWALRecovery.java  |  4 +-
 .../replication/AccumuloReplicaSystem.java      | 19 ++++-
 .../apache/accumulo/tserver/tablet/Tablet.java  |  6 +-
 .../tserver/tablet/TabletCommitter.java         |  3 +
 shell/src/main/findbugs/exclude-filter.xml      | 18 +++++
 start/src/main/findbugs/exclude-filter.xml      | 18 +++++
 .../start/classloader/vfs/MiniDFSUtil.java      |  4 ++
 test/pom.xml                                    |  7 --
 test/src/main/findbugs/exclude-filter.xml       | 17 +++--
 .../test/functional/ConfigurableMacIT.java      |  4 +-
 .../accumulo/test/functional/MonitorSslIT.java  | 40 ++++++-----
 trace/src/main/findbugs/exclude-filter.xml      | 26 +++++++
 47 files changed, 543 insertions(+), 247 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index a736a3d..bd41cca 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -166,13 +166,6 @@
             </excludes>
           </configuration>
         </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>findbugs-maven-plugin</artifactId>
-          <configuration>
-            <excludeFilterFile>src/main/findbugs/exclude-filter.xml</excludeFilterFile>
-          </configuration>
-        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/core/src/main/findbugs/exclude-filter.xml b/core/src/main/findbugs/exclude-filter.xml
index 138260c..d7c7348 100644
--- a/core/src/main/findbugs/exclude-filter.xml
+++ b/core/src/main/findbugs/exclude-filter.xml
@@ -15,25 +15,53 @@
   limitations under the License.
 -->
 <FindBugsFilter>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.client\.impl\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.data\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.gc\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.master\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.security\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.tabletserver\.thrift\..*" />
-    </Match>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.core\.replication\.thrift\..*" />
-    </Match>
+  <Match>
+    <!-- ignore thrift-generated files -->
+    <Or>
+      <Class name="~org\.apache\.accumulo\.core\.client\.impl\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.data\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.gc\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.master\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.security\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.tabletserver\.thrift\..*" />
+      <Class name="~org\.apache\.accumulo\.core\.replication\.thrift\..*" />
+    </Or>
+  </Match>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.core.client.impl.TabletLocatorImpl" />
+    <Method name="processInvalidated" params="org.apache.accumulo.core.client.impl.ClientContext,org.apache.accumulo.core.client.impl.TabletLocatorImpl$LockCheckerSession" returns="void" />
+    <Bug code="UL" pattern="UL_UNRELEASED_LOCK" />
+  </Match>
+  <Match>
+    <!-- ignore intentional name shadowing -->
+    <Or>
+      <Package name="org.apache.accumulo.core.iterators.user" />
+      <Package name="org.apache.accumulo.core.iterators" />
+      <Class name="org.apache.accumulo.core.client.mapred.RangeInputSplit" />
+      <Class name="org.apache.accumulo.core.trace.CountSampler" />
+      <Class name="org.apache.accumulo.core.util.AddressUtil" />
+      <Class name="org.apache.accumulo.core.zookeeper.ZooUtil" />
+    </Or>
+    <Bug code="NM" pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
+  </Match>
+  <Match>
+    <!-- bad practice to start a thread in constructor; we should be careful using this class -->
+    <Class name="org.apache.accumulo.core.file.blockfile.cache.LruBlockCache" />
+    <Bug code="SC" pattern="SC_START_IN_CTOR" />
+  </Match>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.core.file.blockfile.cache.LruBlockCache$EvictionThread" />
+    <Or>
+      <Bug code="NN" pattern="NN_NAKED_NOTIFY" />
+      <Bug code="UW" pattern="UW_UNCOND_WAIT" />
+    </Or>
+  </Match>
+  <Match>
+    <!-- allowed only for backwards compatibility, but this is generally a pretty bad practice -->
+    <Class name="org.apache.accumulo.core.data.Value" />
+    <Method name="equals" params="java.lang.Object" returns="boolean" />
+    <Bug code="EQ" pattern="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS" />
+  </Match>
 </FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/client/admin/CompactionStrategyConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/admin/CompactionStrategyConfig.java b/core/src/main/java/org/apache/accumulo/core/client/admin/CompactionStrategyConfig.java
index 0992ba9..75aa107 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/admin/CompactionStrategyConfig.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/admin/CompactionStrategyConfig.java
@@ -73,6 +73,11 @@ public class CompactionStrategyConfig {
   }
 
   @Override
+  public int hashCode() {
+    return className.hashCode() + options.hashCode();
+  }
+
+  @Override
   public boolean equals(Object o) {
     if (o instanceof CompactionStrategyConfig) {
       CompactionStrategyConfig ocsc = (CompactionStrategyConfig) o;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
index 659d877..99cd8aa 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
@@ -601,33 +601,46 @@ public class TabletLocatorImpl extends TabletLocator {
 
     TabletLocation tl;
 
-    if (lock)
+    if (lock) {
       rLock.lock();
-    try {
-      processInvalidated(context, lcSession);
-      tl = lcSession.checkLock(locateTabletInCache(row));
-    } finally {
-      if (lock)
+      try {
+        tl = processInvalidatedAndCheckLock(context, lcSession, row);
+      } finally {
         rLock.unlock();
+      }
+    } else {
+      tl = processInvalidatedAndCheckLock(context, lcSession, row);
     }
 
     if (tl == null) {
-      if (lock)
+      // not in cache, so obtain info
+      if (lock) {
         wLock.lock();
-      try {
-        // not in cache, so obtain info
-        lookupTabletLocation(context, row, retry, lcSession);
-
-        tl = lcSession.checkLock(locateTabletInCache(row));
-      } finally {
-        if (lock)
+        try {
+          tl = lookupTabletLocationAndCheckLock(context, row, retry, lcSession);
+        } finally {
           wLock.unlock();
+        }
+      } else {
+        tl = lookupTabletLocationAndCheckLock(context, row, retry, lcSession);
       }
     }
 
     return tl;
   }
 
+  private TabletLocation lookupTabletLocationAndCheckLock(ClientContext context, Text row, boolean retry, LockCheckerSession lcSession)
+      throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+    lookupTabletLocation(context, row, retry, lcSession);
+    return lcSession.checkLock(locateTabletInCache(row));
+  }
+
+  private TabletLocation processInvalidatedAndCheckLock(ClientContext context, LockCheckerSession lcSession, Text row) throws AccumuloSecurityException,
+      AccumuloException, TableNotFoundException {
+    processInvalidated(context, lcSession);
+    return lcSession.checkLock(locateTabletInCache(row));
+  }
+
   private void processInvalidated(ClientContext context, LockCheckerSession lcSession) throws AccumuloSecurityException, AccumuloException,
       TableNotFoundException {
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
index 7abc826..59cb9fc 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
@@ -238,9 +238,12 @@ public class TabletServerBatchWriter {
 
     checkForFailures();
 
-    while ((totalMemUsed > maxMem || flushing) && !somethingFailed) {
-      waitRTE();
-    }
+    waitRTE(new WaitCondition() {
+      @Override
+      public boolean shouldWait() {
+        return (totalMemUsed > maxMem || flushing) && !somethingFailed;
+      }
+    });
 
     // do checks again since things could have changed while waiting and not holding lock
     if (closed)
@@ -298,8 +301,12 @@ public class TabletServerBatchWriter {
 
       if (flushing) {
         // some other thread is currently flushing, so wait
-        while (flushing && !somethingFailed)
-          waitRTE();
+        waitRTE(new WaitCondition() {
+          @Override
+          public boolean shouldWait() {
+            return flushing && !somethingFailed;
+          }
+        });
 
         checkForFailures();
 
@@ -311,9 +318,12 @@ public class TabletServerBatchWriter {
       startProcessing();
       checkForFailures();
 
-      while (totalMemUsed > 0 && !somethingFailed) {
-        waitRTE();
-      }
+      waitRTE(new WaitCondition() {
+        @Override
+        public boolean shouldWait() {
+          return totalMemUsed > 0 && !somethingFailed;
+        }
+      });
 
       flushing = false;
       this.notifyAll();
@@ -336,9 +346,12 @@ public class TabletServerBatchWriter {
 
       startProcessing();
 
-      while (totalMemUsed > 0 && !somethingFailed) {
-        waitRTE();
-      }
+      waitRTE(new WaitCondition() {
+        @Override
+        public boolean shouldWait() {
+          return totalMemUsed > 0 && !somethingFailed;
+        }
+      });
 
       logStats();
 
@@ -433,9 +446,15 @@ public class TabletServerBatchWriter {
     numBatches++;
   }
 
-  private void waitRTE() {
+  private interface WaitCondition {
+    boolean shouldWait();
+  }
+
+  private void waitRTE(WaitCondition condition) {
     try {
-      wait();
+      while (condition.shouldWait()) {
+        wait();
+      }
     } catch (InterruptedException e) {
       throw new RuntimeException(e);
     }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/client/mock/MockNamespace.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/mock/MockNamespace.java b/core/src/main/java/org/apache/accumulo/core/client/mock/MockNamespace.java
index 2ab9b09..955564f 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockNamespace.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockNamespace.java
@@ -29,7 +29,7 @@ import org.apache.accumulo.core.security.NamespacePermission;
 
 public class MockNamespace {
 
-  final Map<String,String> settings;
+  final HashMap<String,String> settings;
   Map<String,EnumSet<NamespacePermission>> userPermissions = new HashMap<String,EnumSet<NamespacePermission>>();
 
   public MockNamespace() {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/data/Value.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/data/Value.java b/core/src/main/java/org/apache/accumulo/core/data/Value.java
index e77e8a7..271391c 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/Value.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/Value.java
@@ -217,6 +217,7 @@ public class Value implements WritableComparable<Object> {
 
   @Override
   public boolean equals(Object right_obj) {
+    // compare with byte[] for backwards compatibility, but this is generally a pretty bad practice
     if (right_obj instanceof byte[]) {
       return compareTo((byte[]) right_obj) == 0;
     }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java b/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
index f466463..7bab079 100644
--- a/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java
@@ -19,6 +19,7 @@ package org.apache.accumulo.core.volume;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.accumulo.core.util.CachedConfiguration;
 import org.apache.hadoop.conf.Configuration;
@@ -106,6 +107,11 @@ public class VolumeImpl implements Volume {
   }
 
   @Override
+  public int hashCode() {
+    return Objects.hashCode(getFileSystem()) + Objects.hashCode(getBasePath());
+  }
+
+  @Override
   public boolean equals(Object o) {
     if (o instanceof VolumeImpl) {
       VolumeImpl other = (VolumeImpl) o;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java b/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
index dc0d53a..ef6836f 100644
--- a/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
+++ b/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
@@ -256,7 +256,7 @@ public class TestClientOpts {
 
     @Override
     public AuthenticationToken clone() {
-      return null;
+      return new EmptyToken();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/test/java/org/apache/accumulo/core/file/rfile/RFileMetricsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/file/rfile/RFileMetricsTest.java b/core/src/test/java/org/apache/accumulo/core/file/rfile/RFileMetricsTest.java
index e66210b..7f8c087 100644
--- a/core/src/test/java/org/apache/accumulo/core/file/rfile/RFileMetricsTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/file/rfile/RFileMetricsTest.java
@@ -23,16 +23,17 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
-import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.data.ArrayByteSequence;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -52,10 +53,39 @@ public class RFileMetricsTest {
     Logger.getLogger(org.apache.hadoop.util.NativeCodeLoader.class).setLevel(Level.OFF);
   }
 
+  private TestRFile trf = null;
+
+  @Before
+  public void makeTestRFile() {
+    trf = new TestRFile();
+  }
+
+  @After
+  public void cleanUpTestRFile() {
+    // do our best to clean up first
+    if (trf != null) {
+      if (trf.writer != null) {
+        try {
+          trf.closeWriter();
+        } catch (IOException e) {
+          // ignore
+        }
+      }
+      if (trf.reader != null) {
+        try {
+          trf.closeReader();
+        } catch (IOException e) {
+          // ignore
+        }
+      }
+    }
+    trf = null;
+  }
+
   public static class TestRFile extends RFileTest.TestRFile {
 
-    public TestRFile(AccumuloConfiguration accumuloConfiguration) {
-      super(accumuloConfiguration);
+    public TestRFile() {
+      super(null);
     }
 
     public VisMetricsGatherer gatherMetrics() throws IOException {
@@ -74,15 +104,10 @@ public class RFileMetricsTest {
     }
   }
 
-  public AccumuloConfiguration conf = null;
-
   @Test
   public void emptyFile() throws IOException {
-
     // test an empty file
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter();
     trf.closeWriter();
 
@@ -101,11 +126,8 @@ public class RFileMetricsTest {
 
   @Test
   public void oneEntryDefaultLocGroup() throws IOException {
-
     // test an rfile with one entry in the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter();
     trf.writer.append(RFileTest.nk("r1", "cf1", "cq1", "L1", 55), RFileTest.nv("foo"));
     trf.closeWriter();
@@ -128,11 +150,8 @@ public class RFileMetricsTest {
 
   @Test
   public void twoEntriesDefaultLocGroup() throws IOException {
-
     // test an rfile with two entries in the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter();
     trf.writer.append(RFileTest.nk("r1", "cf1", "cq1", "L1", 55), RFileTest.nv("foo"));
     trf.writer.append(RFileTest.nk("r1", "cf1", "cq1", "L2", 55), RFileTest.nv("foo"));
@@ -159,11 +178,8 @@ public class RFileMetricsTest {
 
   @Test
   public void oneEntryNonDefaultLocGroup() throws IOException {
-
     // test an rfile with two entries in a non-default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false);
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -191,11 +207,8 @@ public class RFileMetricsTest {
 
   @Test
   public void twoEntryNonDefaultLocGroup() throws IOException {
-
     // test an rfile with two entries in a non-default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false);
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -226,11 +239,8 @@ public class RFileMetricsTest {
 
   @Test
   public void twoNonDefaultLocGroups() throws IOException {
-
     // test an rfile with two entries in 2 non-default locality groups
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false);
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -280,11 +290,8 @@ public class RFileMetricsTest {
 
   @Test
   public void nonDefaultAndDefaultLocGroup() throws IOException {
-
     // test an rfile with 3 entries in a non-default locality group and the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false);
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -332,11 +339,8 @@ public class RFileMetricsTest {
 
   @Test
   public void multiCFNonDefaultAndDefaultLocGroup() throws IOException {
-
     // test an rfile with multiple column families in a non-default locality group and the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false);
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -388,11 +392,8 @@ public class RFileMetricsTest {
 
   @Test
   public void multiBlockDefaultLocGroup() throws IOException {
-
     // test an rfile with four blocks in the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(20);// Each entry is a block
     trf.writer.append(RFileTest.nk("r1", "cf1", "cq1", "L1", 55), RFileTest.nv("foo"));
     trf.writer.append(RFileTest.nk("r1", "cf1", "cq2", "L1", 55), RFileTest.nv("foo"));
@@ -421,11 +422,8 @@ public class RFileMetricsTest {
 
   @Test
   public void multiBlockNonDefaultLocGroup() throws IOException {
-
     // test an rfile with four blocks in a non-default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false, 20);// Each entry is a block
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));
@@ -459,11 +457,8 @@ public class RFileMetricsTest {
 
   @Test
   public void multiBlockMultiCFNonDefaultAndDefaultLocGroup() throws IOException {
-
     // test an rfile with multiple column families and multiple blocks in a non-default locality group and the default locality group
 
-    TestRFile trf = new TestRFile(conf);
-
     trf.openWriter(false, 20);// Each entry is a block
     Set<ByteSequence> lg1 = new HashSet<>();
     lg1.add(new ArrayByteSequence("cf1"));

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java
index f15bad4..11ad192 100644
--- a/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java
@@ -50,7 +50,7 @@ public class ColumnSliceFilterTest {
   private static final Key KEY_5 = nkv(TEST_DATA, "boo2", "yup", "20080206", "tiger");
   private static final Key KEY_6 = nkv(TEST_DATA, "boo2", "yip", "20080203", "tiger");
 
-  private static IteratorEnvironment iteratorEnvironment;
+  private IteratorEnvironment iteratorEnvironment;
 
   private ColumnSliceFilter columnSliceFilter = new ColumnSliceFilter();
   private IteratorSetting is;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/examples/simple/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/examples/simple/src/main/findbugs/exclude-filter.xml b/examples/simple/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/examples/simple/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/examples/simple/src/main/java/org/apache/accumulo/examples/simple/mapreduce/RowHash.java
----------------------------------------------------------------------
diff --git a/examples/simple/src/main/java/org/apache/accumulo/examples/simple/mapreduce/RowHash.java b/examples/simple/src/main/java/org/apache/accumulo/examples/simple/mapreduce/RowHash.java
index 0bc2c2f..9af2563 100644
--- a/examples/simple/src/main/java/org/apache/accumulo/examples/simple/mapreduce/RowHash.java
+++ b/examples/simple/src/main/java/org/apache/accumulo/examples/simple/mapreduce/RowHash.java
@@ -57,7 +57,7 @@ public class RowHash extends Configured implements Tool {
 
   private static class Opts extends MapReduceClientOnRequiredTable {
     @Parameter(names = "--column", required = true)
-    String column = null;
+    String column;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/fate/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/fate/src/main/findbugs/exclude-filter.xml b/fate/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/fate/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java
----------------------------------------------------------------------
diff --git a/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java b/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java
index 9e540e4..0b04bd1 100644
--- a/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java
+++ b/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java
@@ -20,6 +20,8 @@ import static org.junit.Assert.assertEquals;
 
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicIntegerArray;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 
@@ -62,18 +64,18 @@ public class DistributedReadWriteLockTest {
 
   // some data that is probably not going to update atomically
   static class SomeData {
-    volatile int[] data = new int[100];
-    volatile int counter;
+    private AtomicIntegerArray data = new AtomicIntegerArray(100);
+    private AtomicInteger counter = new AtomicInteger();
 
     void read() {
-      for (int i = 0; i < data.length; i++)
-        assertEquals(counter, data[i]);
+      for (int i = 0; i < data.length(); i++)
+        assertEquals(counter.get(), data.get(i));
     }
 
     void write() {
-      ++counter;
-      for (int i = data.length - 1; i >= 0; i--)
-        data[i] = counter;
+      int nextCount = counter.incrementAndGet();
+      for (int i = data.length() - 1; i >= 0; i--)
+        data.set(i, nextCount);
     }
   }
 
@@ -99,6 +101,7 @@ public class DistributedReadWriteLockTest {
     for (int i = 0; i < threads.length; i++) {
       final int which = i;
       threads[i] = new Thread() {
+        @Override
         public void run() {
           if (which % 2 == 0) {
             final Lock wl = locker.writeLock();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/maven-plugin/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/maven-plugin/src/main/findbugs/exclude-filter.xml b/maven-plugin/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/maven-plugin/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/minicluster/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/minicluster/src/main/findbugs/exclude-filter.xml b/minicluster/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..bf850ec
--- /dev/null
+++ b/minicluster/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,30 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl" />
+    <Method name="start" params="" returns="void" />
+    <Bug code="SWL" pattern="SWL_SLEEP_WITH_LOCK_HELD" />
+  </Match>
+  <Match>
+    <!-- this is just bad practice, but is probably okay, if we're careful -->
+    <Class name="org.apache.accumulo.minicluster.impl.ProcessReference" />
+    <Method name="equals" params="java.lang.Object" returns="boolean" />
+    <Bug code="EQ" pattern="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS" />
+  </Match>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 776aff5..c892b18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -528,7 +528,8 @@
             <effort>Max</effort>
             <failOnError>true</failOnError>
             <includeTests>true</includeTests>
-            <maxRank>10</maxRank>
+            <maxRank>14</maxRank>
+            <excludeFilterFile>src/main/findbugs/exclude-filter.xml</excludeFilterFile>
           </configuration>
         </plugin>
         <plugin>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/proxy/pom.xml
----------------------------------------------------------------------
diff --git a/proxy/pom.xml b/proxy/pom.xml
index 7da1326..eed79b1 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -87,19 +87,6 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>findbugs-maven-plugin</artifactId>
-          <configuration>
-            <excludeFilterFile>src/main/findbugs/exclude-filter.xml</excludeFilterFile>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
   <profiles>
     <profile>
       <id>thrift</id>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/proxy/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/proxy/src/main/findbugs/exclude-filter.xml b/proxy/src/main/findbugs/exclude-filter.xml
index 97cf1ef..ba0aa63 100644
--- a/proxy/src/main/findbugs/exclude-filter.xml
+++ b/proxy/src/main/findbugs/exclude-filter.xml
@@ -15,7 +15,8 @@
   limitations under the License.
 -->
 <FindBugsFilter>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.proxy\.thrift\..*" />
-    </Match>
+  <Match>
+    <!-- ignore thrift-generated classes -->
+    <Class name="~org\.apache\.accumulo\.proxy\.thrift\..*" />
+  </Match>
 </FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/base/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/base/src/main/findbugs/exclude-filter.xml b/server/base/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..6d1ea2a
--- /dev/null
+++ b/server/base/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,26 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+  <Match>
+    <!-- ignore intentional name shadowing -->
+    <Or>
+      <Package name="org.apache.accumulo.server.zookeeper" />
+      <Package name="org.apache.accumulo.server.cli" />
+    </Or>
+    <Bug code="NM" pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
+  </Match>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/base/src/main/java/org/apache/accumulo/server/master/balancer/GroupBalancer.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/GroupBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/GroupBalancer.java
index 3ccf5ed..ac74f15 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/GroupBalancer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/GroupBalancer.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
 import java.util.SortedMap;
 
@@ -289,6 +290,11 @@ public abstract class GroupBalancer extends TabletBalancer {
     }
 
     @Override
+    public int hashCode() {
+      return Objects.hashCode(tserverInstance);
+    }
+
+    @Override
     public boolean equals(Object o) {
       if (o instanceof Location) {
         Location ol = ((Location) o);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
----------------------------------------------------------------------
diff --git a/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
index b0ffd64..0106915 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
@@ -53,7 +53,7 @@ public class MetricsConfiguration {
 
   private final Object lock = new Object();
 
-  private boolean needsReloading = false;
+  private volatile boolean needsReloading = false;
 
   private long lastCheckTime = 0;
 
@@ -76,6 +76,7 @@ public class MetricsConfiguration {
   private class MetricsConfigWatcher extends Daemon {
     public MetricsConfigWatcher() {}
 
+    @Override
     public void run() {
       while (this.isAlive()) {
         try {
@@ -92,6 +93,7 @@ public class MetricsConfiguration {
    * ConfigurationListener that sets a flag to reload the XML config file
    */
   private class MetricsConfigListener implements ConfigurationListener {
+    @Override
     public void configurationChanged(ConfigurationEvent event) {
       if (event.getType() == AbstractFileConfiguration.EVENT_RELOAD)
         needsReloading = true;
@@ -134,7 +136,7 @@ public class MetricsConfiguration {
         notFoundCount++;
       }
     }
-    if (null == config || needsReloading)
+    if (null == config || needsReloading) {
       synchronized (lock) {
         if (needsReloading) {
           loadConfiguration();
@@ -143,6 +145,7 @@ public class MetricsConfiguration {
         }
         needsReloading = false;
       }
+    }
     return config;
   }
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/base/src/test/java/org/apache/accumulo/server/ServerConstantsTest.java
----------------------------------------------------------------------
diff --git a/server/base/src/test/java/org/apache/accumulo/server/ServerConstantsTest.java b/server/base/src/test/java/org/apache/accumulo/server/ServerConstantsTest.java
index 40d5eb8..05f0a47 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/ServerConstantsTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/ServerConstantsTest.java
@@ -68,19 +68,25 @@ public class ServerConstantsTest {
     try {
       ServerConstants.checkBaseUris(paths.toArray(new String[paths.size()]), false);
       Assert.fail();
-    } catch (Exception e) {}
+    } catch (Exception e) {
+      // ignored
+    }
   }
 
   private void verifyError(ArrayList<String> paths) {
     try {
       ServerConstants.checkBaseUris(paths.toArray(new String[paths.size()]), true);
       Assert.fail();
-    } catch (Exception e) {}
+    } catch (Exception e) {
+      // ignored
+    }
 
     try {
       ServerConstants.checkBaseUris(paths.toArray(new String[paths.size()]), false);
       Assert.fail();
-    } catch (Exception e) {}
+    } catch (Exception e) {
+      // ignored
+    }
   }
 
   private ArrayList<String> init(File newFile, List<String> uuids, List<Integer> dataVersions) throws IllegalArgumentException, IOException {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/base/src/test/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenKeyManagerTest.java
----------------------------------------------------------------------
diff --git a/server/base/src/test/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenKeyManagerTest.java b/server/base/src/test/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenKeyManagerTest.java
index bc2968a..086f03d 100644
--- a/server/base/src/test/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenKeyManagerTest.java
+++ b/server/base/src/test/java/org/apache/accumulo/server/security/delegation/AuthenticationTokenKeyManagerTest.java
@@ -114,11 +114,28 @@ public class AuthenticationTokenKeyManagerTest {
     assertEquals(authKey.getKeyId(), keyManager.getIdSeq());
   }
 
+  private static class MockManager extends AuthenticationTokenKeyManager {
+
+    CountDownLatch latch;
+
+    public MockManager() {
+      super(null, null, 0, 0);
+    }
+
+    @Override
+    public void run() {
+      log.info("Thread running");
+      latch.countDown();
+      super.run();
+    }
+
+  }
+
   @Test(timeout = 30 * 1000)
   public void testStopLoop() throws InterruptedException {
-    final AuthenticationTokenKeyManager keyManager = EasyMock.createMockBuilder(AuthenticationTokenKeyManager.class).addMockedMethod("_run")
-        .addMockedMethod("updateStateFromCurrentKeys").createMock();
-    final CountDownLatch latch = new CountDownLatch(1);
+    final MockManager keyManager = EasyMock.createMockBuilder(MockManager.class).addMockedMethod("_run").addMockedMethod("updateStateFromCurrentKeys")
+        .createMock();
+    keyManager.latch = new CountDownLatch(1);
 
     // Mock out the _run and updateStateFromCurrentKeys method so we just get the logic from "run()"
     keyManager._run(EasyMock.anyLong());
@@ -132,20 +149,13 @@ public class AuthenticationTokenKeyManagerTest {
 
     // Wrap another Runnable around our KeyManager so we know when the thread is actually run as it's "async" when the method will actually be run after we call
     // thread.start()
-    Thread t = new Thread(new Runnable() {
-      @Override
-      public void run() {
-        log.info("Thread running");
-        latch.countDown();
-        keyManager.run();
-      }
-    });
+    Thread t = new Thread(keyManager);
 
     log.info("Starting thread");
     t.start();
 
     // Wait for the thread to start
-    latch.await();
+    keyManager.latch.await();
     log.info("Latch fired");
 
     // Wait a little bit to let the first call to _run() happen (avoid exiting the loop before any calls to _run())

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/gc/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/gc/src/main/findbugs/exclude-filter.xml b/server/gc/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/server/gc/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java
----------------------------------------------------------------------
diff --git a/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java b/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java
index 5224f28..4c8ed70 100644
--- a/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java
+++ b/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java
@@ -88,7 +88,6 @@ public class GarbageCollectWriteAheadLogsTest {
   private AccumuloConfiguration systemConfig;
   private VolumeManager volMgr;
   private GarbageCollectWriteAheadLogs gcwal;
-  private AccumuloServerContext context;
   private long modTime;
 
   @Rule
@@ -396,7 +395,7 @@ public class GarbageCollectWriteAheadLogsTest {
     LinkedList<Entry<Key,Value>> replData = new LinkedList<>();
     replData.add(Maps.immutableEntry(new Key("/wals/" + file1, StatusSection.NAME.toString(), "1"), StatusUtil.fileCreatedValue(System.currentTimeMillis())));
 
-    ReplicationGCWAL replGC = new ReplicationGCWAL(context, volMgr, false, replData);
+    ReplicationGCWAL replGC = new ReplicationGCWAL(null, volMgr, false, replData);
 
     replay(conn);
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/master/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/master/src/main/findbugs/exclude-filter.xml b/server/master/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..5f34cf3
--- /dev/null
+++ b/server/master/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,23 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.master.Master" />
+    <Bug code="UW" pattern="UW_UNCOND_WAIT" />
+  </Match>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/master/src/main/java/org/apache/accumulo/master/replication/RemoveCompleteReplicationRecords.java
----------------------------------------------------------------------
diff --git a/server/master/src/main/java/org/apache/accumulo/master/replication/RemoveCompleteReplicationRecords.java b/server/master/src/main/java/org/apache/accumulo/master/replication/RemoveCompleteReplicationRecords.java
index 7aaa465..0f7306c 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/replication/RemoveCompleteReplicationRecords.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/replication/RemoveCompleteReplicationRecords.java
@@ -69,6 +69,9 @@ public class RemoveCompleteReplicationRecords implements Runnable {
     try {
       bs = ReplicationTable.getBatchScanner(conn, 4);
       bw = ReplicationTable.getBatchWriter(conn);
+
+      if (bs == null || bw == null)
+        throw new AssertionError("Inconceivable; an exception should have been thrown, but 'bs' or 'bw' was null instead");
     } catch (ReplicationTableOfflineException e) {
       log.debug("Not attempting to remove complete replication records as the table ({}) isn't yet online", ReplicationTable.NAME);
       return;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/monitor/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/findbugs/exclude-filter.xml b/server/monitor/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/server/monitor/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tracer/pom.xml
----------------------------------------------------------------------
diff --git a/server/tracer/pom.xml b/server/tracer/pom.xml
index 57e1df1..c44f498 100644
--- a/server/tracer/pom.xml
+++ b/server/tracer/pom.xml
@@ -88,19 +88,6 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>findbugs-maven-plugin</artifactId>
-          <configuration>
-            <excludeFilterFile>src/main/findbugs/exclude-filter.xml</excludeFilterFile>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
   <profiles>
     <profile>
       <id>thrift</id>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tracer/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/tracer/src/main/findbugs/exclude-filter.xml b/server/tracer/src/main/findbugs/exclude-filter.xml
index 593390e..281610d 100644
--- a/server/tracer/src/main/findbugs/exclude-filter.xml
+++ b/server/tracer/src/main/findbugs/exclude-filter.xml
@@ -15,7 +15,8 @@
   limitations under the License.
 -->
 <FindBugsFilter>
-    <Match>
-        <Class name="~org\.apache\.accumulo\.tracer\.thrift\..*" />
-    </Match>
+  <Match>
+    <!-- ignore thrift-generated classes -->
+    <Class name="~org\.apache\.accumulo\.tracer\.thrift\..*" />
+  </Match>
 </FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/findbugs/exclude-filter.xml b/server/tserver/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..aec413a
--- /dev/null
+++ b/server/tserver/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,24 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.tserver.tablet.Tablet" />
+    <Method name="beginUpdatingLogsUsed" params="org.apache.accumulo.tserver.InMemoryMap,java.util.Collection,boolean" returns="boolean" />
+    <Bug code="UL" pattern="UL_UNRELEASED_LOCK" />
+  </Match>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileKey.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileKey.java b/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileKey.java
deleted file mode 100644
index 80e303f..0000000
--- a/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileKey.java
+++ /dev/null
@@ -1,25 +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.server.logger;
-
-/**
- * @deprecated Only used for recovering local WAL files. Use {@link org.apache.accumulo.tserver.logger.LogFileKey} instead.
- */
-@Deprecated
-public class LogFileKey extends org.apache.accumulo.tserver.logger.LogFileKey {
-
-}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileValue.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileValue.java b/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileValue.java
deleted file mode 100644
index 06e70b9..0000000
--- a/server/tserver/src/main/java/org/apache/accumulo/server/logger/LogFileValue.java
+++ /dev/null
@@ -1,25 +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.server.logger;
-
-/**
- * @deprecated Only used for recovering local WAL files. Use {@link org.apache.accumulo.tserver.logger.LogFileValue} instead.
- */
-@Deprecated
-public class LogFileValue extends org.apache.accumulo.tserver.logger.LogFileValue {
-
-}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LocalWALRecovery.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LocalWALRecovery.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LocalWALRecovery.java
index 2658c1f..ed4c3e7 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LocalWALRecovery.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LocalWALRecovery.java
@@ -52,8 +52,8 @@ public class LocalWALRecovery implements Runnable {
   private static final Logger log = Logger.getLogger(LocalWALRecovery.class);
 
   static {
-    WritableName.addName(LogFileKey.class, org.apache.accumulo.server.logger.LogFileKey.class.getName());
-    WritableName.addName(LogFileValue.class, org.apache.accumulo.server.logger.LogFileValue.class.getName());
+    WritableName.addName(LogFileKey.class, "org.apache.accumulo.server.logger.LogFileKey");
+    WritableName.addName(LogFileValue.class, "org.apache.accumulo.server.logger.LogFileValue");
   }
 
   public static void main(String[] args) throws IOException {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/tserver/replication/AccumuloReplicaSystem.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/replication/AccumuloReplicaSystem.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/replication/AccumuloReplicaSystem.java
index a07f354..45e59cc 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/replication/AccumuloReplicaSystem.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/replication/AccumuloReplicaSystem.java
@@ -25,6 +25,7 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import org.apache.accumulo.core.client.AccumuloException;
@@ -667,10 +668,17 @@ public class AccumuloReplicaSystem implements ReplicaSystem {
     }
 
     @Override
+    public int hashCode() {
+      return Objects.hashCode(sizeInBytes + sizeInRecords + entriesConsumed);
+    }
+
+    @Override
     public boolean equals(Object o) {
-      if (ReplicationStats.class.isAssignableFrom(o.getClass())) {
-        ReplicationStats other = (ReplicationStats) o;
-        return sizeInBytes == other.sizeInBytes && sizeInRecords == other.sizeInRecords && entriesConsumed == other.entriesConsumed;
+      if (o != null) {
+        if (ReplicationStats.class.isAssignableFrom(o.getClass())) {
+          ReplicationStats other = (ReplicationStats) o;
+          return sizeInBytes == other.sizeInBytes && sizeInRecords == other.sizeInRecords && entriesConsumed == other.entriesConsumed;
+        }
       }
       return false;
     }
@@ -709,6 +717,11 @@ public class AccumuloReplicaSystem implements ReplicaSystem {
     }
 
     @Override
+    public int hashCode() {
+      return super.hashCode() + Objects.hashCode(walEdits) + Objects.hashCode(numUpdates);
+    }
+
+    @Override
     public boolean equals(Object o) {
       if (o instanceof WalReplication) {
         WalReplication other = (WalReplication) o;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
index edcf2ff..95fe24a 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
@@ -2441,6 +2441,7 @@ public class Tablet implements TabletCommitter {
     return currentLogs.size();
   }
 
+  /* don't release the lock if this method returns true for success; instead, the caller should clean up by calling finishUpdatingLogsUsed() */
   @Override
   public boolean beginUpdatingLogsUsed(InMemoryMap memTable, Collection<DfsLogger> more, boolean mincFinish) {
 
@@ -2474,7 +2475,7 @@ public class Tablet implements TabletCommitter {
           // when writing a minc finish event, there is no need to add the log to metadata
           // if nothing has been logged for the tablet since the minor compaction started
           if (currentLogs.size() == 0)
-            return false;
+            return !releaseLock;
         }
 
         int numAdded = 0;
@@ -2507,10 +2508,9 @@ public class Tablet implements TabletCommitter {
 
         if (numAdded > 0 && numContained == 0) {
           releaseLock = false;
-          return true;
         }
 
-        return false;
+        return !releaseLock;
       }
     } finally {
       if (releaseLock)

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletCommitter.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletCommitter.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletCommitter.java
index b56d0af..4bc05a6 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletCommitter.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletCommitter.java
@@ -35,6 +35,9 @@ public interface TabletCommitter {
 
   void commit(CommitSession commitSession, List<Mutation> mutations);
 
+  /**
+   * If this method returns true, the caller must call {@link #finishUpdatingLogsUsed()} to clean up
+   */
   boolean beginUpdatingLogsUsed(InMemoryMap memTable, Collection<DfsLogger> copy, boolean mincFinish);
 
   void finishUpdatingLogsUsed();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/shell/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/shell/src/main/findbugs/exclude-filter.xml b/shell/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/shell/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/start/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/start/src/main/findbugs/exclude-filter.xml b/start/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..c801230
--- /dev/null
+++ b/start/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+</FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/start/src/main/java/org/apache/accumulo/start/classloader/vfs/MiniDFSUtil.java
----------------------------------------------------------------------
diff --git a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/MiniDFSUtil.java b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/MiniDFSUtil.java
index a8e4d60..fe20d8f 100644
--- a/start/src/main/java/org/apache/accumulo/start/classloader/vfs/MiniDFSUtil.java
+++ b/start/src/main/java/org/apache/accumulo/start/classloader/vfs/MiniDFSUtil.java
@@ -17,6 +17,7 @@
 package org.apache.accumulo.start.classloader.vfs;
 
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStreamReader;
 
 public class MiniDFSUtil {
@@ -33,6 +34,9 @@ public class MiniDFSUtil {
         String line = bri.readLine();
         p.waitFor();
 
+        if (line == null) {
+          throw new IOException("umask input stream closed prematurely");
+        }
         Short umask = Short.parseShort(line.trim(), 8);
         // Need to set permission to 777 xor umask
         // leading zero makes java interpret as base 8

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/test/pom.xml
----------------------------------------------------------------------
diff --git a/test/pom.xml b/test/pom.xml
index a7ce39d..5862688 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -230,13 +230,6 @@
             </systemPropertyVariables>
           </configuration>
         </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>findbugs-maven-plugin</artifactId>
-          <configuration>
-            <excludeFilterFile>src/main/findbugs/exclude-filter.xml</excludeFilterFile>
-          </configuration>
-        </plugin>
       </plugins>
     </pluginManagement>
   </build>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/test/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/test/src/main/findbugs/exclude-filter.xml b/test/src/main/findbugs/exclude-filter.xml
index ea6b83e..6d7584d 100644
--- a/test/src/main/findbugs/exclude-filter.xml
+++ b/test/src/main/findbugs/exclude-filter.xml
@@ -15,9 +15,16 @@
   limitations under the License.
 -->
 <FindBugsFilter>
-    <Match>
-        <Class name="org.apache.accumulo.test.stress.random.Write" />
-        <Method name="main" params="java.lang.String[]" returns="void" />
-        <Bug code="IL" pattern="IL_INFINITE_LOOP" />
-    </Match>
+  <Match>
+    <!-- ignore intentional infinite loop in stress test main method -->
+    <Class name="org.apache.accumulo.test.stress.random.Write" />
+    <Method name="main" params="java.lang.String[]" returns="void" />
+    <Bug code="IL" pattern="IL_INFINITE_LOOP" />
+  </Match>
+  <Match>
+    <!-- locking is confusing, but probably correct -->
+    <Class name="org.apache.accumulo.harness.TestingKdc" />
+    <Method name="start" params="" returns="void" />
+    <Bug code="SWL" pattern="SWL_SLEEP_WITH_LOCK_HELD" />
+  </Match>
 </FindBugsFilter>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java b/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java
index a921538..f2b9489 100644
--- a/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java
@@ -144,7 +144,9 @@ public class ConfigurableMacIT extends AccumuloIT {
     if (cluster != null)
       try {
         cluster.stop();
-      } catch (Exception e) {}
+      } catch (Exception e) {
+        // ignored
+      }
   }
 
   protected MiniAccumuloClusterImpl getCluster() {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/test/src/test/java/org/apache/accumulo/test/functional/MonitorSslIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/functional/MonitorSslIT.java b/test/src/test/java/org/apache/accumulo/test/functional/MonitorSslIT.java
index c112139..9f2d9ea 100644
--- a/test/src/test/java/org/apache/accumulo/test/functional/MonitorSslIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/MonitorSslIT.java
@@ -16,21 +16,8 @@
  */
 package org.apache.accumulo.test.functional;
 
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.util.MonitorUtil;
-import org.apache.accumulo.minicluster.ServerType;
-import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.junit.Assert.assertTrue;
 
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
 import java.net.URL;
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
@@ -39,7 +26,21 @@ import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.Map;
 
-import static org.junit.Assert.assertTrue;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.util.MonitorUtil;
+import org.apache.accumulo.minicluster.ServerType;
+import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
+import org.apache.hadoop.conf.Configuration;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 /**
  * Check SSL for the Monitor
@@ -49,9 +50,7 @@ public class MonitorSslIT extends ConfigurableMacIT {
   @BeforeClass
   public static void initHttps() throws NoSuchAlgorithmException, KeyManagementException {
     SSLContext ctx = SSLContext.getInstance("SSL");
-    TrustManager[] tm = new TrustManager[]{
-        new TestTrustManager()
-    };
+    TrustManager[] tm = new TrustManager[] {new TestTrustManager()};
     ctx.init(new KeyManager[0], tm, new SecureRandom());
     SSLContext.setDefault(ctx);
     HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
@@ -72,6 +71,7 @@ public class MonitorSslIT extends ConfigurableMacIT {
   }
 
   private static class TestHostnameVerifier implements HostnameVerifier {
+    @Override
     public boolean verify(String hostname, SSLSession session) {
       return true;
     }
@@ -112,7 +112,9 @@ public class MonitorSslIT extends ConfigurableMacIT {
     while (null == monitorLocation) {
       try {
         monitorLocation = MonitorUtil.getLocation(getConnector().getInstance());
-      } catch (Exception e) {}
+      } catch (Exception e) {
+        // ignored
+      }
       if (null == monitorLocation) {
         log.debug("Could not fetch monitor HTTP address from zookeeper");
         Thread.sleep(2000);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/9f108c03/trace/src/main/findbugs/exclude-filter.xml
----------------------------------------------------------------------
diff --git a/trace/src/main/findbugs/exclude-filter.xml b/trace/src/main/findbugs/exclude-filter.xml
new file mode 100644
index 0000000..56767ef
--- /dev/null
+++ b/trace/src/main/findbugs/exclude-filter.xml
@@ -0,0 +1,26 @@
+<!--
+  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.
+-->
+<FindBugsFilter>
+  <Match>
+    <!-- ignore intentional name shadowing -->
+    <Or>
+      <Package name="org.apache.accumulo.trace.instrument" />
+      <Package name="org.apache.accumulo.trace.thrift" />
+    </Or>
+    <Bug code="NM" pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
+  </Match>
+</FindBugsFilter>


Mime
View raw message