This is an automated email from the ASF dual-hosted git repository.
domgarguilo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push:
new ff07df3a5a Fix ConstructorThrow SpotBugs warnings in core module
(#5785)
ff07df3a5a is described below
commit ff07df3a5aefb506fa76983cb49e1e8ba7fe5e84
Author: Dom G. <[email protected]>
AuthorDate: Tue Dec 30 13:46:55 2025 -0500
Fix ConstructorThrow SpotBugs warnings in core module (#5785)
* Fix ConstructorThrow SpotBugs warningins in core module
---------
Co-authored-by: Christopher Tubbs <[email protected]>
---
core/pom.xml | 3 ++
.../classloader/URLContextClassLoaderFactory.java | 9 ----
.../accumulo/core/client/IteratorSetting.java | 2 +-
.../accumulo/core/client/rfile/RFileScanner.java | 2 +-
.../security/tokens/CredentialProviderToken.java | 4 ++
.../core/client/security/tokens/KerberosToken.java | 4 ++
.../core/client/summary/CounterSummary.java | 2 +-
.../accumulo/core/clientImpl/ActiveScanImpl.java | 2 +-
.../core/clientImpl/DelegationTokenImpl.java | 2 +-
.../accumulo/core/clientImpl/OfflineIterator.java | 2 +-
.../core/clientImpl/TableOperationsImpl.java | 2 +-
.../TabletServerBatchReaderIterator.java | 2 +-
.../accumulo/core/clientImpl/ThriftScanner.java | 2 +-
.../core/clientImpl/ThriftTransportKey.java | 2 +-
.../core/clientImpl/bulk/LoadMappingIterator.java | 2 +-
.../compaction/ShellCompactCommandSelector.java | 8 ++--
.../accumulo/core/conf/SiteConfiguration.java | 2 +
.../core/crypto/streams/BlockedInputStream.java | 4 ++
.../core/crypto/streams/BlockedOutputStream.java | 4 ++
.../java/org/apache/accumulo/core/data/Key.java | 4 ++
.../org/apache/accumulo/core/data/LoadPlan.java | 2 +-
.../org/apache/accumulo/core/data/Mutation.java | 4 ++
.../java/org/apache/accumulo/core/data/Range.java | 4 ++
.../apache/accumulo/core/data/ResourceGroupId.java | 2 +-
.../org/apache/accumulo/core/data/RowRange.java | 4 ++
.../java/org/apache/accumulo/core/data/Value.java | 4 ++
.../apache/accumulo/core/dataImpl/KeyExtent.java | 2 +-
.../java/org/apache/accumulo/core/fate/Fate.java | 4 ++
.../org/apache/accumulo/core/fate/FateCleaner.java | 2 +-
.../org/apache/accumulo/core/fate/FateKey.java | 4 ++
.../org/apache/accumulo/core/fate/FateStore.java | 2 +-
.../accumulo/core/fate/zookeeper/FateLock.java | 4 +-
.../core/fate/zookeeper/MetaFateStore.java | 4 ++
.../accumulo/core/file/BloomFilterLayer.java | 2 +-
.../file/blockfile/cache/lru/LruBlockCache.java | 3 +-
.../file/blockfile/impl/ScanCacheProvider.java | 2 +-
.../org/apache/accumulo/core/file/rfile/RFile.java | 2 +-
.../accumulo/core/file/rfile/bcfile/BCFile.java | 8 ++--
.../core/file/rfile/bcfile/PrintBCInfo.java | 4 +-
.../file/streams/BoundedRangeFileInputStream.java | 2 +-
.../core/iterators/user/ColumnAgeOffFilter.java | 2 +-
.../core/iteratorsImpl/conf/ColumnSet.java | 2 +-
.../iteratorsImpl/conf/ColumnToClassMapping.java | 4 ++
.../core/iteratorsImpl/system/HeapIterator.java | 4 ++
.../system/LocalityGroupIterator.java | 2 +-
.../core/iteratorsImpl/system/MultiIterator.java | 2 +-
.../iteratorsImpl/system/SequenceFileIterator.java | 2 +-
.../org/apache/accumulo/core/lock/ServiceLock.java | 2 +
.../core/manager/state/TabletManagement.java | 4 ++
.../core/metadata/ReferencedTabletFile.java | 4 ++
.../accumulo/core/metadata/StoredTabletFile.java | 4 ++
.../accumulo/core/metadata/TServerInstance.java | 2 +-
.../core/metadata/schema/DataFileValue.java | 4 ++
.../accumulo/core/rpc/SaslConnectionParams.java | 4 ++
.../core/sample/impl/SamplerConfigurationImpl.java | 2 +-
.../accumulo/core/security/Authorizations.java | 4 ++
.../accumulo/core/security/ColumnVisibility.java | 4 ++
.../spi/balancer/HostRegexTableLoadBalancer.java | 2 +-
.../accumulo/core/spi/crypto/AESCryptoService.java | 4 +-
.../core/spi/fs/SpaceAwareVolumeChooser.java | 2 +-
.../org/apache/accumulo/core/util/ColumnFQ.java | 4 ++
.../accumulo/core/util/ThriftMessageUtil.java | 2 +-
.../util/compaction/CompactionServicesConfig.java | 4 ++
.../apache/accumulo/core/volume/VolumeImpl.java | 2 +-
.../org/apache/accumulo/core/zookeeper/ZcNode.java | 2 +-
.../apache/accumulo/core/zookeeper/ZooCache.java | 4 ++
.../org/apache/accumulo/core/data/OldMutation.java | 4 ++
.../accumulo/core/file/rfile/RollingStatsTest.java | 2 +-
hadoop-mapreduce/pom.xml | 3 ++
iterator-test-harness/pom.xml | 3 ++
minicluster/pom.xml | 3 ++
pom.xml | 1 -
server/base/pom.xml | 3 ++
server/compactor/pom.xml | 3 ++
server/gc/pom.xml | 3 ++
server/manager/pom.xml | 3 ++
server/monitor/pom.xml | 3 ++
server/native/pom.xml | 1 +
server/tserver/pom.xml | 3 ++
.../apache/accumulo/tserver/ScanServerTest.java | 49 +++++++++++-----------
.../tserver/TabletResourceManagerTest.java | 4 +-
shell/pom.xml | 3 ++
start/pom.xml | 3 ++
test/pom.xml | 1 +
84 files changed, 219 insertions(+), 83 deletions(-)
diff --git a/core/pom.xml b/core/pom.xml
index 24b2ffc371..481ace610f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-core</artifactId>
<name>Apache Accumulo Core</name>
<description>Apache Accumulo core libraries.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
diff --git
a/core/src/main/java/org/apache/accumulo/core/classloader/URLContextClassLoaderFactory.java
b/core/src/main/java/org/apache/accumulo/core/classloader/URLContextClassLoaderFactory.java
index c61b25106e..9e88945756 100644
---
a/core/src/main/java/org/apache/accumulo/core/classloader/URLContextClassLoaderFactory.java
+++
b/core/src/main/java/org/apache/accumulo/core/classloader/URLContextClassLoaderFactory.java
@@ -22,7 +22,6 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.accumulo.core.spi.common.ContextClassLoaderFactory;
import org.apache.accumulo.core.util.cache.Caches;
@@ -39,9 +38,7 @@ import com.github.benmanes.caffeine.cache.Cache;
*/
public class URLContextClassLoaderFactory implements ContextClassLoaderFactory
{
- private static final AtomicBoolean isInstantiated = new AtomicBoolean(false);
private static final Logger LOG =
LoggerFactory.getLogger(URLContextClassLoaderFactory.class);
- private static final String className =
URLContextClassLoaderFactory.class.getName();
// Cache the class loaders for re-use
// WeakReferences are used so that the class loaders can be cleaned up when
no longer needed
@@ -50,12 +47,6 @@ public class URLContextClassLoaderFactory implements
ContextClassLoaderFactory {
private final Cache<String,URLClassLoader> classloaders =
Caches.getInstance().createNewBuilder(CacheName.CLASSLOADERS,
true).weakValues().build();
- public URLContextClassLoaderFactory() {
- if (!isInstantiated.compareAndSet(false, true)) {
- throw new IllegalStateException("Can only instantiate " + className + "
once");
- }
- }
-
@Override
public ClassLoader getClassLoader(String context) {
if (context == null) {
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/IteratorSetting.java
b/core/src/main/java/org/apache/accumulo/core/client/IteratorSetting.java
index 29be3f84cd..41f9878d12 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/IteratorSetting.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/IteratorSetting.java
@@ -51,7 +51,7 @@ import org.apache.hadoop.io.WritableUtils;
* scanner.addScanIterator(cfg);
* </pre>
*/
-public class IteratorSetting implements Writable {
+public final class IteratorSetting implements Writable {
private int priority;
private String name;
private String iteratorClass;
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
index b3ba59e13c..38bcef285a 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
@@ -77,7 +77,7 @@ import org.apache.hadoop.io.Text;
import com.google.common.base.Preconditions;
-class RFileScanner extends ScannerOptions implements Scanner {
+final class RFileScanner extends ScannerOptions implements Scanner {
private static class RFileScannerEnvironmentImpl extends
ClientServiceEnvironmentImpl {
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
b/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
index ed42f18f8c..8504780895 100644
---
a/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
+++
b/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
@@ -30,9 +30,13 @@ import java.util.Set;
import org.apache.accumulo.core.conf.HadoopCredentialProvider;
import org.apache.hadoop.conf.Configuration;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* An {@link AuthenticationToken} backed by a Hadoop CredentialProvider.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class CredentialProviderToken extends PasswordToken {
public static final String NAME_PROPERTY = "name";
public static final String CREDENTIAL_PROVIDERS_PROPERTY =
"credentialProviders";
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/security/tokens/KerberosToken.java
b/core/src/main/java/org/apache/accumulo/core/client/security/tokens/KerberosToken.java
index b21d2cfa04..a9221032f5 100644
---
a/core/src/main/java/org/apache/accumulo/core/client/security/tokens/KerberosToken.java
+++
b/core/src/main/java/org/apache/accumulo/core/client/security/tokens/KerberosToken.java
@@ -34,11 +34,15 @@ import javax.security.auth.DestroyFailedException;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Authentication token for Kerberos authenticated clients
*
* @since 1.7.0
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class KerberosToken implements AuthenticationToken {
public static final String CLASS_NAME = KerberosToken.class.getName();
diff --git
a/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
b/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
index 3f1e195511..82669a2982 100644
---
a/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
+++
b/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
@@ -33,7 +33,7 @@ import com.google.common.annotations.VisibleForTesting;
*
* @since 2.0.0
*/
-public class CounterSummary {
+public final class CounterSummary {
private Map<String,Long> stats;
private static final Logger log =
LoggerFactory.getLogger(CounterSummary.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ActiveScanImpl.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ActiveScanImpl.java
index cbc0f3cabd..5ecb62cf9d 100644
--- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ActiveScanImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ActiveScanImpl.java
@@ -42,7 +42,7 @@ import org.apache.accumulo.core.security.Authorizations;
*
* @since 1.6.0
*/
-public class ActiveScanImpl extends ActiveScan {
+public final class ActiveScanImpl extends ActiveScan {
private final long scanId;
private final String client;
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/DelegationTokenImpl.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/DelegationTokenImpl.java
index ce1b22feef..e99dc33f44 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/DelegationTokenImpl.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/DelegationTokenImpl.java
@@ -32,7 +32,7 @@ import
org.apache.accumulo.core.securityImpl.thrift.TAuthenticationTokenIdentifi
import org.apache.hadoop.io.Text;
import org.apache.hadoop.security.token.Token;
-public class DelegationTokenImpl extends PasswordToken implements
DelegationToken {
+public final class DelegationTokenImpl extends PasswordToken implements
DelegationToken {
public static final String SERVICE_NAME = "AccumuloDelegationToken";
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/OfflineIterator.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/OfflineIterator.java
index 854bd4973b..87d4294cf3 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/OfflineIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/OfflineIterator.java
@@ -72,7 +72,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.io.Text;
-class OfflineIterator implements Iterator<Entry<Key,Value>> {
+final class OfflineIterator implements Iterator<Entry<Key,Value>> {
private SortedKeyValueIterator<Key,Value> iter;
private Range range;
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
index e59736a70c..cdfd1f67e4 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
@@ -1872,7 +1872,7 @@ public class TableOperationsImpl extends
TableOperationsHelper {
return sci.toSamplerConfiguration();
}
- private static class LocationsImpl implements Locations {
+ private static final class LocationsImpl implements Locations {
private Map<Range,List<TabletId>> groupedByRanges;
private Map<TabletId,List<Range>> groupedByTablets;
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java
index 932c0df4c6..33181c1ec4 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java
@@ -91,7 +91,7 @@ import org.slf4j.LoggerFactory;
import com.google.common.net.HostAndPort;
-public class TabletServerBatchReaderIterator implements
Iterator<Entry<Key,Value>> {
+public final class TabletServerBatchReaderIterator implements
Iterator<Entry<Key,Value>> {
private static final Logger log =
LoggerFactory.getLogger(TabletServerBatchReaderIterator.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
index 4d6c792c0d..c45b9322dd 100644
--- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
@@ -93,7 +93,7 @@ import com.google.common.net.HostAndPort;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Scope;
-public class ThriftScanner {
+public final class ThriftScanner {
private static final Logger log =
LoggerFactory.getLogger(ThriftScanner.class);
// This set is initially empty when the client starts. The first time this
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftTransportKey.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftTransportKey.java
index ee93871ecf..ab93f37f00 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftTransportKey.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftTransportKey.java
@@ -30,7 +30,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.net.HostAndPort;
@VisibleForTesting
-public class ThriftTransportKey {
+public final class ThriftTransportKey {
private final ThriftClientTypes<?> type;
private final HostAndPort server;
private final long timeout;
diff --git
a/core/src/main/java/org/apache/accumulo/core/clientImpl/bulk/LoadMappingIterator.java
b/core/src/main/java/org/apache/accumulo/core/clientImpl/bulk/LoadMappingIterator.java
index 15a58ec10e..223288591c 100644
---
a/core/src/main/java/org/apache/accumulo/core/clientImpl/bulk/LoadMappingIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/clientImpl/bulk/LoadMappingIterator.java
@@ -40,7 +40,7 @@ import com.google.gson.stream.JsonReader;
/**
* Iterator for reading the Bulk Load Mapping JSON.
*/
-public class LoadMappingIterator
+public final class LoadMappingIterator
implements Iterator<Map.Entry<KeyExtent,Bulk.Files>>, AutoCloseable {
private final TableId tableId;
private final JsonReader reader;
diff --git
a/core/src/main/java/org/apache/accumulo/core/compaction/ShellCompactCommandSelector.java
b/core/src/main/java/org/apache/accumulo/core/compaction/ShellCompactCommandSelector.java
index 90d5413637..2faefbb86b 100644
---
a/core/src/main/java/org/apache/accumulo/core/compaction/ShellCompactCommandSelector.java
+++
b/core/src/main/java/org/apache/accumulo/core/compaction/ShellCompactCommandSelector.java
@@ -132,8 +132,8 @@ public class ShellCompactCommandSelector implements
CompactionSelector {
private abstract static class FileSizeTest extends Test {
private final long esize;
- private FileSizeTest(String s) {
- this.esize = Long.parseLong(s);
+ private FileSizeTest(long esize) {
+ this.esize = esize;
}
@Override
@@ -186,7 +186,7 @@ public class ShellCompactCommandSelector implements
CompactionSelector {
tests.add(new NoSampleTest());
break;
case SF_LT_ESIZE_OPT:
- tests.add(new FileSizeTest(entry.getValue()) {
+ tests.add(new FileSizeTest(Long.parseLong(entry.getValue())) {
@Override
public boolean shouldCompact(long fsize, long esize) {
return fsize < esize;
@@ -194,7 +194,7 @@ public class ShellCompactCommandSelector implements
CompactionSelector {
});
break;
case SF_GT_ESIZE_OPT:
- tests.add(new FileSizeTest(entry.getValue()) {
+ tests.add(new FileSizeTest(Long.parseLong(entry.getValue())) {
@Override
public boolean shouldCompact(long fsize, long esize) {
return fsize > esize;
diff --git
a/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
b/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
index 4096316ea4..9ca8e24c2a 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
@@ -59,6 +59,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
* <p>
* <b>Note</b>: Client code should not use this class, and it may be
deprecated in the future.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class SiteConfiguration extends AccumuloConfiguration {
private static final Logger log =
LoggerFactory.getLogger(SiteConfiguration.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedInputStream.java
b/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedInputStream.java
index bd5095320e..b5206e9f91 100644
---
a/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedInputStream.java
+++
b/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedInputStream.java
@@ -23,10 +23,14 @@ import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Reader corresponding to BlockedOutputStream. Expects all data to be in the
form of size (int)
* data (size bytes) junk (however many bytes it takes to complete a block)
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class BlockedInputStream extends InputStream {
byte[] array;
// ReadPos is where to start reading
diff --git
a/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedOutputStream.java
b/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedOutputStream.java
index 9adb74d9a2..60df9ad016 100644
---
a/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedOutputStream.java
+++
b/core/src/main/java/org/apache/accumulo/core/crypto/streams/BlockedOutputStream.java
@@ -24,11 +24,15 @@ import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicBoolean;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Buffers all input in a growing buffer until flush() is called. Then entire
buffer is written,
* with size information, and padding to force the underlying crypto output
stream to also fully
* flush
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class BlockedOutputStream extends OutputStream {
int blockSize;
DataOutputStream out;
diff --git a/core/src/main/java/org/apache/accumulo/core/data/Key.java
b/core/src/main/java/org/apache/accumulo/core/data/Key.java
index ff6ac7baa3..3e69b9598b 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/Key.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/Key.java
@@ -36,12 +36,16 @@ import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;
import org.apache.hadoop.io.WritableUtils;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* This is the Key used to store and access individual values in Accumulo. A
Key is a tuple composed
* of a row, column family, column qualifier, column visibility, timestamp,
and delete marker.
* <p>
* Keys are comparable and therefore have a sorted order defined by {@link
#compareTo(Key)}.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Key implements WritableComparable<Key>, Cloneable {
protected byte[] row;
diff --git a/core/src/main/java/org/apache/accumulo/core/data/LoadPlan.java
b/core/src/main/java/org/apache/accumulo/core/data/LoadPlan.java
index 1f21a919f4..a2dabffd95 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/LoadPlan.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/LoadPlan.java
@@ -105,7 +105,7 @@ public class LoadPlan {
*
* @since 2.0.0
*/
- public static class Destination {
+ public static final class Destination {
private final String fileName;
private final byte[] startRow;
diff --git a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java
b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java
index 9be3143480..e64194e4f1 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java
@@ -41,6 +41,8 @@ import org.apache.hadoop.io.WritableUtils;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Mutation represents an action that manipulates a row in a table. A mutation
holds a list of
* column/value pairs that represent an atomic set of modifications to make to
a row.
@@ -69,6 +71,8 @@ import com.google.common.base.Preconditions;
* support different subset of fields and types. The functionality of all of
these {@code put}
* methods and more is provided by the new fluent {@link #at()} method added
in 2.0.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Mutation implements Writable {
/**
diff --git a/core/src/main/java/org/apache/accumulo/core/data/Range.java
b/core/src/main/java/org/apache/accumulo/core/data/Range.java
index f4f00e3cec..7cc0dd694e 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/Range.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/Range.java
@@ -32,11 +32,15 @@ import org.apache.accumulo.core.dataImpl.thrift.TRange;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* This class is used to specify a range of Accumulo keys.
*
* @see Key
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Range implements WritableComparable<Range> {
private Key start;
diff --git
a/core/src/main/java/org/apache/accumulo/core/data/ResourceGroupId.java
b/core/src/main/java/org/apache/accumulo/core/data/ResourceGroupId.java
index e2954514fa..6cb8e0ac1a 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/ResourceGroupId.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/ResourceGroupId.java
@@ -26,7 +26,7 @@ import org.apache.accumulo.core.util.cache.Caches.CacheName;
import com.github.benmanes.caffeine.cache.Cache;
-public class ResourceGroupId extends AbstractId<ResourceGroupId> {
+public final class ResourceGroupId extends AbstractId<ResourceGroupId> {
private static final Pattern GROUP_NAME_PATTERN =
Pattern.compile("^[a-zA-Z]+(_?[a-zA-Z0-9])*$");
diff --git a/core/src/main/java/org/apache/accumulo/core/data/RowRange.java
b/core/src/main/java/org/apache/accumulo/core/data/RowRange.java
index 5895f9f124..dbb381b4a3 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/RowRange.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/RowRange.java
@@ -29,11 +29,15 @@ import java.util.List;
import org.apache.hadoop.io.BinaryComparable;
import org.apache.hadoop.io.Text;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* This class is used to specify a range of rows.
*
* @since 4.0.0
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class RowRange implements Comparable<RowRange> {
private static final Comparator<Text> LOWER_BOUND_COMPARATOR =
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 6c62a3ed53..8c63967126 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
@@ -32,12 +32,16 @@ import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* A byte sequence that is usable as a key or value. Based on
* {@link org.apache.hadoop.io.BytesWritable} only this class is NOT resizable
and DOES NOT
* distinguish between the size of the sequence and the current capacity as
* {@link org.apache.hadoop.io.BytesWritable} does. Hence it is comparatively
'immutable'.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Value implements WritableComparable<Object> {
private static final byte[] EMPTY = new byte[0];
protected byte[] value;
diff --git
a/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java
b/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java
index f032cd3944..5a3ed07f90 100644
--- a/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java
+++ b/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java
@@ -64,7 +64,7 @@ import org.apache.hadoop.io.Text;
/**
* keeps track of information needed to identify a tablet
*/
-public class KeyExtent implements Comparable<KeyExtent> {
+public final class KeyExtent implements Comparable<KeyExtent> {
private static final String OBSCURING_HASH_ALGORITHM = "SHA-256";
diff --git a/core/src/main/java/org/apache/accumulo/core/fate/Fate.java
b/core/src/main/java/org/apache/accumulo/core/fate/Fate.java
index 651e1ca838..eebe114785 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/Fate.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/Fate.java
@@ -66,9 +66,13 @@ import org.slf4j.LoggerFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.gson.JsonParser;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Fault tolerant executor
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Fate<T> {
private static final Logger log = LoggerFactory.getLogger(Fate.class);
diff --git a/core/src/main/java/org/apache/accumulo/core/fate/FateCleaner.java
b/core/src/main/java/org/apache/accumulo/core/fate/FateCleaner.java
index 20e6ef691d..903d5d8e23 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/FateCleaner.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/FateCleaner.java
@@ -58,7 +58,7 @@ public class FateCleaner<T> {
private final Duration ageOffTime;
private final TimeSource timeSource;
- private static class AgeOffInfo {
+ private static final class AgeOffInfo {
final SteadyTime setTime;
final TStatus status;
diff --git a/core/src/main/java/org/apache/accumulo/core/fate/FateKey.java
b/core/src/main/java/org/apache/accumulo/core/fate/FateKey.java
index 7f0658eae9..650dca01af 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/FateKey.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/FateKey.java
@@ -32,6 +32,10 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.hadoop.io.DataInputBuffer;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class FateKey {
private final FateKeyType type;
diff --git a/core/src/main/java/org/apache/accumulo/core/fate/FateStore.java
b/core/src/main/java/org/apache/accumulo/core/fate/FateStore.java
index ed5ec62be1..e28e793642 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/FateStore.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/FateStore.java
@@ -160,7 +160,7 @@ public interface FateStore<T> extends ReadOnlyFateStore<T>,
AutoCloseable {
/**
* The value stored to indicate a FATE transaction ID ({@link FateId}) has
been reserved
*/
- class FateReservation {
+ final class FateReservation {
// The LockID (provided by the Manager running the FATE which uses this
store) which is used for
// identifying dead Managers, so their reservations can be deleted and
picked up again since
diff --git
a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/FateLock.java
b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/FateLock.java
index 3bd9358707..5e8c541818 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/FateLock.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/FateLock.java
@@ -72,7 +72,7 @@ public class FateLock implements QueueLock {
}
}
- public static class FateLockEntry {
+ public final static class FateLockEntry {
private static final String DELIMITER = "_";
@@ -163,7 +163,7 @@ public class FateLock implements QueueLock {
this.path = requireNonNull(path);
}
- public static class NodeName {
+ public final static class NodeName {
public final long sequence;
public final Supplier<FateLockEntry> fateLockEntry;
diff --git
a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/MetaFateStore.java
b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/MetaFateStore.java
index 72ce79e1cc..f6f67dfef2 100644
---
a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/MetaFateStore.java
+++
b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/MetaFateStore.java
@@ -72,8 +72,12 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Suppliers;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
//TODO use zoocache? - ACCUMULO-1297
//TODO handle zookeeper being down gracefully - ACCUMULO-1297
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class MetaFateStore<T> extends AbstractFateStore<T> {
private static final Logger log =
LoggerFactory.getLogger(MetaFateStore.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/BloomFilterLayer.java
b/core/src/main/java/org/apache/accumulo/core/file/BloomFilterLayer.java
index 06d9087181..682dc1d809 100644
--- a/core/src/main/java/org/apache/accumulo/core/file/BloomFilterLayer.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/BloomFilterLayer.java
@@ -88,7 +88,7 @@ public class BloomFilterLayer {
return loadThreadPool;
}
- public static class Writer implements FileSKVWriter {
+ public static final class Writer implements FileSKVWriter {
private DynamicBloomFilter bloomFilter;
private int numKeys;
private int vectorSize;
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
index eff9b834d2..1b2c1d84b9 100644
---
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
+++
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
@@ -82,7 +82,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
* bytes to free). It then uses the priority chunk sizes to evict fairly
according to the relative
* sizes and usage.
*/
-public class LruBlockCache extends SynchronousLoadingBlockCache implements
BlockCache, HeapSize {
+public final class LruBlockCache extends SynchronousLoadingBlockCache
+ implements BlockCache, HeapSize {
private static final Logger log =
LoggerFactory.getLogger(LruBlockCache.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/ScanCacheProvider.java
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/ScanCacheProvider.java
index 155b874326..45a375aae1 100644
---
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/ScanCacheProvider.java
+++
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/ScanCacheProvider.java
@@ -25,7 +25,7 @@ import org.apache.accumulo.core.spi.cache.BlockCache;
import org.apache.accumulo.core.spi.cache.CacheType;
import org.apache.accumulo.core.spi.scan.ScanDispatch;
-public class ScanCacheProvider implements CacheProvider {
+public final class ScanCacheProvider implements CacheProvider {
private final BlockCache indexCache;
private final BlockCache dataCache;
diff --git a/core/src/main/java/org/apache/accumulo/core/file/rfile/RFile.java
b/core/src/main/java/org/apache/accumulo/core/file/rfile/RFile.java
index 79fd398377..26b761d542 100644
--- a/core/src/main/java/org/apache/accumulo/core/file/rfile/RFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/rfile/RFile.java
@@ -1171,7 +1171,7 @@ public class RFile {
}
}
- public static class Reader extends HeapIterator implements RFileSKVIterator {
+ public static final class Reader extends HeapIterator implements
RFileSKVIterator {
private final CachableBlockFile.Reader reader;
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
b/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
index 29242ef594..693c956b85 100644
--- a/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
@@ -103,7 +103,7 @@ public final class BCFile {
/**
* BCFile writer, the entry point for creating a new BCFile.
*/
- public static class Writer implements Closeable {
+ public static final class Writer implements Closeable {
private final FSDataOutputStream out;
private final Configuration conf;
private FileEncrypter encrypter;
@@ -451,7 +451,7 @@ public final class BCFile {
/**
* BCFile Reader, interface to read the file's data and meta blocks.
*/
- public static class Reader implements Closeable {
+ public static final class Reader implements Closeable {
private final SeekableDataInputStream in;
private final Configuration conf;
final DataIndex dataIndex;
@@ -768,7 +768,7 @@ public final class BCFile {
/**
* Index for all Meta blocks.
*/
- static class MetaIndex {
+ static final class MetaIndex {
// use a tree map, for getting a meta block entry by name
final Map<String,MetaIndexEntry> index;
@@ -857,7 +857,7 @@ public final class BCFile {
/**
* Index of all compressed data blocks.
*/
- static class DataIndex {
+ static final class DataIndex {
static final String BLOCK_NAME = "BCFile.index";
private final CompressionAlgorithm defaultCompressionAlgorithm;
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/PrintBCInfo.java
b/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/PrintBCInfo.java
index 542aac37f2..c7dea2a3ab 100644
---
a/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/PrintBCInfo.java
+++
b/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/PrintBCInfo.java
@@ -36,8 +36,8 @@ import com.beust.jcommander.Parameter;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-@SuppressFBWarnings(value = "DM_EXIT",
- justification = "System.exit is fine here because it's a utility class
executed by a main()")
+@SuppressFBWarnings(value = {"DM_EXIT", "CT_CONSTRUCTOR_THROW"},
+ justification = "System.exit is acceptable here as it's a utility class,
and constructor validation ensures proper initialization")
public class PrintBCInfo {
Configuration conf;
FileSystem fs;
diff --git
a/core/src/main/java/org/apache/accumulo/core/file/streams/BoundedRangeFileInputStream.java
b/core/src/main/java/org/apache/accumulo/core/file/streams/BoundedRangeFileInputStream.java
index d9f41862ae..0602d70972 100644
---
a/core/src/main/java/org/apache/accumulo/core/file/streams/BoundedRangeFileInputStream.java
+++
b/core/src/main/java/org/apache/accumulo/core/file/streams/BoundedRangeFileInputStream.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.fs.Seekable;
* regular input stream. One can create multiple BoundedRangeFileInputStream
on top of the same
* FSDataInputStream and they would not interfere with each other.
*/
-public class BoundedRangeFileInputStream extends InputStream {
+public final class BoundedRangeFileInputStream extends InputStream {
private volatile boolean closed = false;
private final InputStream in;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
index b4a4319c24..ee1bbdc5aa 100644
---
a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
+++
b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
@@ -39,7 +39,7 @@ import org.apache.hadoop.io.Text;
* each column.
*/
public class ColumnAgeOffFilter extends Filter {
- public static class TTLSet extends ColumnToClassMapping<Long> {
+ private static final class TTLSet extends ColumnToClassMapping<Long> {
public TTLSet(Map<String,String> objectStrings) {
for (Entry<String,String> entry : objectStrings.entrySet()) {
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnSet.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnSet.java
index 37f9d1cd0d..ff8cc9d4e1 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnSet.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnSet.java
@@ -30,7 +30,7 @@ import
org.apache.accumulo.core.iteratorsImpl.conf.ColumnUtil.ColHashKey;
import org.apache.accumulo.core.util.Pair;
import org.apache.hadoop.io.Text;
-public class ColumnSet {
+public final class ColumnSet {
private final Set<ColFamHashKey> objectsCF;
private final Set<ColHashKey> objectsCol;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnToClassMapping.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnToClassMapping.java
index 4862055f41..8fea310b2d 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnToClassMapping.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/conf/ColumnToClassMapping.java
@@ -29,6 +29,10 @@ import
org.apache.accumulo.core.iteratorsImpl.conf.ColumnUtil.ColHashKey;
import org.apache.accumulo.core.util.Pair;
import org.apache.hadoop.io.Text;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ColumnToClassMapping<K> {
private final HashMap<ColFamHashKey,K> objectsCF;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/HeapIterator.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/HeapIterator.java
index 074e8bedbe..ba84e6d021 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/HeapIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/HeapIterator.java
@@ -25,10 +25,14 @@ import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Constructs a {@link PriorityQueue} of multiple SortedKeyValueIterators.
Provides a simple way to
* interact with multiple SortedKeyValueIterators in sorted order.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public abstract class HeapIterator implements
SortedKeyValueIterator<Key,Value> {
private PriorityQueue<SortedKeyValueIterator<Key,Value>> heap;
private SortedKeyValueIterator<Key,Value> topIdx = null;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/LocalityGroupIterator.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/LocalityGroupIterator.java
index 7ada6fa496..10d263b991 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/LocalityGroupIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/LocalityGroupIterator.java
@@ -70,7 +70,7 @@ public class LocalityGroupIterator extends HeapIterator
implements Interruptible
private InterruptibleIterator iterator;
}
- public static class LocalityGroupContext {
+ public static final class LocalityGroupContext {
final List<LocalityGroup> groups;
final LocalityGroup defaultGroup;
final Map<ByteSequence,LocalityGroup> groupByCf;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/MultiIterator.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/MultiIterator.java
index 34c3b88762..77cd69cf01 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/MultiIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/MultiIterator.java
@@ -35,7 +35,7 @@ import
org.apache.accumulo.core.iterators.SortedKeyValueIterator;
/**
* An iterator capable of iterating over other iterators in sorted order.
*/
-public class MultiIterator extends HeapIterator {
+public final class MultiIterator extends HeapIterator {
private List<SortedKeyValueIterator<Key,Value>> iters;
private Range fence;
diff --git
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SequenceFileIterator.java
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SequenceFileIterator.java
index 8881e0de23..ce7086afac 100644
---
a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SequenceFileIterator.java
+++
b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SequenceFileIterator.java
@@ -37,7 +37,7 @@ import
org.apache.accumulo.core.sample.impl.SamplerConfigurationImpl;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.Reader;
-public class SequenceFileIterator implements FileSKVIterator {
+public final class SequenceFileIterator implements FileSKVIterator {
private final Reader reader;
private Value top_value;
diff --git a/core/src/main/java/org/apache/accumulo/core/lock/ServiceLock.java
b/core/src/main/java/org/apache/accumulo/core/lock/ServiceLock.java
index 23e2b25ccf..ccd2224dbe 100644
--- a/core/src/main/java/org/apache/accumulo/core/lock/ServiceLock.java
+++ b/core/src/main/java/org/apache/accumulo/core/lock/ServiceLock.java
@@ -49,6 +49,8 @@ import org.slf4j.LoggerFactory;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ServiceLock implements Watcher {
private static final Logger LOG = LoggerFactory.getLogger(ServiceLock.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/manager/state/TabletManagement.java
b/core/src/main/java/org/apache/accumulo/core/manager/state/TabletManagement.java
index c804de9338..832e79b94a 100644
---
a/core/src/main/java/org/apache/accumulo/core/manager/state/TabletManagement.java
+++
b/core/src/main/java/org/apache/accumulo/core/manager/state/TabletManagement.java
@@ -35,12 +35,16 @@ import org.apache.hadoop.io.Text;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Object that represents a Tablets metadata and any actions that the Manager
might need to take on
* the object. This object is created by the TabletManagementIterator iterator
used by the
* TabletGroupWatcher threads in the Manager.
*
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class TabletManagement {
public static final EnumSet<ColumnType> CONFIGURED_COLUMNS =
EnumSet.allOf(ColumnType.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/metadata/ReferencedTabletFile.java
b/core/src/main/java/org/apache/accumulo/core/metadata/ReferencedTabletFile.java
index be99fb983d..2bcae4be9d 100644
---
a/core/src/main/java/org/apache/accumulo/core/metadata/ReferencedTabletFile.java
+++
b/core/src/main/java/org/apache/accumulo/core/metadata/ReferencedTabletFile.java
@@ -33,6 +33,8 @@ import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Object representing a tablet file that may exist in the metadata table.
This class is used for
* reading and opening tablet files. It is also used when inserting new tablet
files. When a new
@@ -43,6 +45,8 @@ import com.google.common.base.Preconditions;
* As of 2.1, Tablet file paths should now be only absolute URIs with the
removal of relative paths
* in Upgrader9to10.upgradeRelativePaths()
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ReferencedTabletFile extends
AbstractTabletFile<ReferencedTabletFile> {
public static class FileParts {
diff --git
a/core/src/main/java/org/apache/accumulo/core/metadata/StoredTabletFile.java
b/core/src/main/java/org/apache/accumulo/core/metadata/StoredTabletFile.java
index 52487b56e1..b1f80ccd75 100644
--- a/core/src/main/java/org/apache/accumulo/core/metadata/StoredTabletFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/metadata/StoredTabletFile.java
@@ -40,6 +40,8 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import com.google.common.annotations.VisibleForTesting;
import com.google.gson.Gson;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Object representing a tablet file entry stored in the metadata table. Keeps
a string of the exact
* entry of what is in the metadata table, which is important for updating and
deleting metadata
@@ -51,6 +53,8 @@ import com.google.gson.Gson;
* As of 2.1, Tablet file paths should now be only absolute URIs with the
removal of relative paths
* in Upgrader9to10.upgradeRelativePaths()
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class StoredTabletFile extends AbstractTabletFile<StoredTabletFile> {
private final String metadataEntry;
private final ReferencedTabletFile referencedTabletFile;
diff --git
a/core/src/main/java/org/apache/accumulo/core/metadata/TServerInstance.java
b/core/src/main/java/org/apache/accumulo/core/metadata/TServerInstance.java
index 9e26102525..2bc96773a7 100644
--- a/core/src/main/java/org/apache/accumulo/core/metadata/TServerInstance.java
+++ b/core/src/main/java/org/apache/accumulo/core/metadata/TServerInstance.java
@@ -32,7 +32,7 @@ import com.google.common.net.HostAndPort;
* Therefore tablet assignments can be considered out-of-date if the tablet
server instance
* information has been changed.
*/
-public class TServerInstance implements Comparable<TServerInstance> {
+public final class TServerInstance implements Comparable<TServerInstance> {
private final HostAndPort hostAndPort;
private final String hostPort;
diff --git
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/DataFileValue.java
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/DataFileValue.java
index 1402cb8311..78bbb8d8ef 100644
---
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/DataFileValue.java
+++
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/DataFileValue.java
@@ -24,6 +24,10 @@ import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.iteratorsImpl.system.InterruptibleIterator;
import org.apache.accumulo.core.iteratorsImpl.system.TimeSettingIterator;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class DataFileValue {
private final long size;
private final long numEntries;
diff --git
a/core/src/main/java/org/apache/accumulo/core/rpc/SaslConnectionParams.java
b/core/src/main/java/org/apache/accumulo/core/rpc/SaslConnectionParams.java
index 6d9487a2a9..c6295ed00e 100644
--- a/core/src/main/java/org/apache/accumulo/core/rpc/SaslConnectionParams.java
+++ b/core/src/main/java/org/apache/accumulo/core/rpc/SaslConnectionParams.java
@@ -44,9 +44,13 @@ import
org.apache.hadoop.security.authentication.util.KerberosUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Connection parameters for setting up a TSaslTransportFactory
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class SaslConnectionParams {
private static final Logger log =
LoggerFactory.getLogger(SaslConnectionParams.class);
diff --git
a/core/src/main/java/org/apache/accumulo/core/sample/impl/SamplerConfigurationImpl.java
b/core/src/main/java/org/apache/accumulo/core/sample/impl/SamplerConfigurationImpl.java
index f0eeb0d01d..20d8d3e2d8 100644
---
a/core/src/main/java/org/apache/accumulo/core/sample/impl/SamplerConfigurationImpl.java
+++
b/core/src/main/java/org/apache/accumulo/core/sample/impl/SamplerConfigurationImpl.java
@@ -36,7 +36,7 @@ import
org.apache.accumulo.core.tabletscan.thrift.TSamplerConfiguration;
import org.apache.accumulo.core.util.Pair;
import org.apache.hadoop.io.Writable;
-public class SamplerConfigurationImpl implements Writable {
+public final class SamplerConfigurationImpl implements Writable {
private String className;
private Map<String,String> options;
diff --git
a/core/src/main/java/org/apache/accumulo/core/security/Authorizations.java
b/core/src/main/java/org/apache/accumulo/core/security/Authorizations.java
index 5964b4fc7d..c9231ace39 100644
--- a/core/src/main/java/org/apache/accumulo/core/security/Authorizations.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/Authorizations.java
@@ -37,9 +37,13 @@ import org.apache.accumulo.core.data.ArrayByteSequence;
import org.apache.accumulo.core.data.ByteSequence;
import org.apache.accumulo.core.util.ByteBufferUtil;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* A collection of authorization strings.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class Authorizations implements Iterable<byte[]>, Serializable,
AuthorizationContainer {
private static final long serialVersionUID = 1L;
diff --git
a/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
b/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
index 71a38ff43c..33a377008c 100644
--- a/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
@@ -40,6 +40,8 @@ import org.apache.hadoop.io.WritableComparator;
import com.google.common.base.Suppliers;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Validate the column visibility is a valid expression and set the visibility
for a Mutation. See
* {@link ColumnVisibility#ColumnVisibility(byte[])} for the definition of an
expression.
@@ -79,6 +81,8 @@ import com.google.common.base.Suppliers;
* "A#C" & B
* </pre>
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ColumnVisibility {
// This functionality is deprecated so its setup as a supplier so it is only
computed if the
diff --git
a/core/src/main/java/org/apache/accumulo/core/spi/balancer/HostRegexTableLoadBalancer.java
b/core/src/main/java/org/apache/accumulo/core/spi/balancer/HostRegexTableLoadBalancer.java
index 3afd93886f..e391817452 100644
---
a/core/src/main/java/org/apache/accumulo/core/spi/balancer/HostRegexTableLoadBalancer.java
+++
b/core/src/main/java/org/apache/accumulo/core/spi/balancer/HostRegexTableLoadBalancer.java
@@ -148,7 +148,7 @@ public class HostRegexTableLoadBalancer extends
TableLoadBalancer {
/**
* Host Regex Table Load Balance Config
*/
- static class HrtlbConf {
+ static final class HrtlbConf {
protected long oobCheckMillis =
ConfigurationTypeHelper.getTimeInMillis(HOST_BALANCER_OOB_DEFAULT);
diff --git
a/core/src/main/java/org/apache/accumulo/core/spi/crypto/AESCryptoService.java
b/core/src/main/java/org/apache/accumulo/core/spi/crypto/AESCryptoService.java
index 14bc5fc38b..afbee828ac 100644
---
a/core/src/main/java/org/apache/accumulo/core/spi/crypto/AESCryptoService.java
+++
b/core/src/main/java/org/apache/accumulo/core/spi/crypto/AESCryptoService.java
@@ -343,7 +343,7 @@ public class AESCryptoService implements CryptoService {
return new AESGCMFileDecrypter(fek);
}
- public class AESGCMFileEncrypter implements FileEncrypter {
+ private final class AESGCMFileEncrypter implements FileEncrypter {
private final byte[] firstInitVector;
private final Key fek;
@@ -492,7 +492,7 @@ public class AESCryptoService implements CryptoService {
}
@SuppressFBWarnings(value = "CIPHER_INTEGRITY", justification = "CBC is
provided for WALs")
- public class AESCBCFileEncrypter implements FileEncrypter {
+ public final class AESCBCFileEncrypter implements FileEncrypter {
private final Cipher cipher;
private final Key fek;
private final byte[] initVector = new byte[IV_LENGTH_IN_BYTES];
diff --git
a/core/src/main/java/org/apache/accumulo/core/spi/fs/SpaceAwareVolumeChooser.java
b/core/src/main/java/org/apache/accumulo/core/spi/fs/SpaceAwareVolumeChooser.java
index d1d96e8f73..0fc6c6f8de 100644
---
a/core/src/main/java/org/apache/accumulo/core/spi/fs/SpaceAwareVolumeChooser.java
+++
b/core/src/main/java/org/apache/accumulo/core/spi/fs/SpaceAwareVolumeChooser.java
@@ -85,7 +85,7 @@ public class SpaceAwareVolumeChooser extends
PreferredVolumeChooser {
return choiceCache;
}
- private class WeightedRandomCollection {
+ private final class WeightedRandomCollection {
private final NavigableMap<Double,String> map = new TreeMap<>();
private double total = 0;
diff --git a/core/src/main/java/org/apache/accumulo/core/util/ColumnFQ.java
b/core/src/main/java/org/apache/accumulo/core/util/ColumnFQ.java
index 3636fd8981..6a938f4570 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/ColumnFQ.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/ColumnFQ.java
@@ -25,6 +25,10 @@ import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.core.data.Value;
import org.apache.hadoop.io.Text;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ColumnFQ implements Comparable<ColumnFQ> {
private Text colf;
private Text colq;
diff --git
a/core/src/main/java/org/apache/accumulo/core/util/ThriftMessageUtil.java
b/core/src/main/java/org/apache/accumulo/core/util/ThriftMessageUtil.java
index bd624a63e8..8dd55ce4e2 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/ThriftMessageUtil.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/ThriftMessageUtil.java
@@ -35,7 +35,7 @@ import org.apache.thrift.transport.TTransportException;
* Serializes and deserializes Thrift messages to and from byte arrays. This
class is not
* thread-safe, external synchronization is necessary if it is used
concurrently.
*/
-public class ThriftMessageUtil {
+public final class ThriftMessageUtil {
private final int initialCapacity;
diff --git
a/core/src/main/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfig.java
b/core/src/main/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfig.java
index d4c89c132e..f0263b9c62 100644
---
a/core/src/main/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfig.java
+++
b/core/src/main/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfig.java
@@ -28,10 +28,14 @@ import org.apache.accumulo.core.conf.Property;
import com.google.common.collect.Sets;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* This class serves to configure compaction services from an {@link
AccumuloConfiguration} object.
* Specifically, compaction service properties (those prefixed by
"compaction.service") are used.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class CompactionServicesConfig {
private final Map<String,String> planners = new HashMap<>();
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 70fc1cebd2..ba19e95139 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
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
* Basic Volume implementation that contains a FileSystem and a base path that
should be used within
* that filesystem.
*/
-public class VolumeImpl implements Volume {
+public final class VolumeImpl implements Volume {
private static final Logger log = LoggerFactory.getLogger(VolumeImpl.class);
diff --git a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZcNode.java
b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZcNode.java
index c555ccf99b..539608a346 100644
--- a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZcNode.java
+++ b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZcNode.java
@@ -29,7 +29,7 @@ import com.google.common.base.Preconditions;
* data can be obtained first and then children added later or visa veras.
*
*/
-class ZcNode {
+final class ZcNode {
/**
* This enum represents what ZooCache has discovered about a given node in
zookeeper so far.
diff --git
a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
index afb0b2cf90..bc7e12c854 100644
--- a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
+++ b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
@@ -52,9 +52,13 @@ import com.github.benmanes.caffeine.cache.Ticker;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* A cache for values stored in ZooKeeper. Values are kept up to date as they
change.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class ZooCache {
public interface ZooCacheWatcher extends Consumer<WatchedEvent> {}
diff --git a/core/src/test/java/org/apache/accumulo/core/data/OldMutation.java
b/core/src/test/java/org/apache/accumulo/core/data/OldMutation.java
index facb349514..862051a3e3 100644
--- a/core/src/test/java/org/apache/accumulo/core/data/OldMutation.java
+++ b/core/src/test/java/org/apache/accumulo/core/data/OldMutation.java
@@ -33,9 +33,13 @@ import org.apache.accumulo.core.util.TextUtil;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
/**
* Will read/write old mutations.
*/
+@SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW",
+ justification = "Constructor validation is required for proper
initialization")
public class OldMutation implements Writable {
static final int VALUE_SIZE_COPY_CUTOFF = 1 << 15;
diff --git
a/core/src/test/java/org/apache/accumulo/core/file/rfile/RollingStatsTest.java
b/core/src/test/java/org/apache/accumulo/core/file/rfile/RollingStatsTest.java
index 6f91e56016..62e2417a5e 100644
---
a/core/src/test/java/org/apache/accumulo/core/file/rfile/RollingStatsTest.java
+++
b/core/src/test/java/org/apache/accumulo/core/file/rfile/RollingStatsTest.java
@@ -59,7 +59,7 @@ public class RollingStatsTest {
assertTrue(rs.getStandardDeviation() >= 0);
}
- private static class StatTester {
+ private static final class StatTester {
private DescriptiveStatistics ds;
private RollingStats rs;
diff --git a/hadoop-mapreduce/pom.xml b/hadoop-mapreduce/pom.xml
index 90e8dccdc5..51898ea748 100644
--- a/hadoop-mapreduce/pom.xml
+++ b/hadoop-mapreduce/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-hadoop-mapreduce</artifactId>
<name>Apache Accumulo Hadoop MapReduce</name>
<description>Apache Accumulo MapReduce bindings.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
diff --git a/iterator-test-harness/pom.xml b/iterator-test-harness/pom.xml
index a2a9515d59..0265dfeb8c 100644
--- a/iterator-test-harness/pom.xml
+++ b/iterator-test-harness/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-iterator-test-harness</artifactId>
<name>Apache Accumulo Iterator Test Harness</name>
<description>A library for testing Apache Accumulo Iterators.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
diff --git a/minicluster/pom.xml b/minicluster/pom.xml
index 109796cc9b..d244a93123 100644
--- a/minicluster/pom.xml
+++ b/minicluster/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-minicluster</artifactId>
<name>Apache Accumulo MiniCluster</name>
<description>A library for launching and running a standalone instance of
Apache Accumulo for testing.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
diff --git a/pom.xml b/pom.xml
index 0f877f7d60..8e96ed45b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -747,7 +747,6 @@ under the License.
<includeTests>true</includeTests>
<maxHeap>1024</maxHeap>
<maxRank>16</maxRank>
-
<omitVisitors>ConstructorThrow,SharedVariableAtomicityDetector</omitVisitors>
<jvmArgs>-Dcom.overstock.findbugs.ignore=com.google.common.util.concurrent.RateLimiter,com.google.common.hash.Hasher,com.google.common.hash.HashCode,com.google.common.hash.HashFunction,com.google.common.hash.Hashing,com.google.common.cache.Cache,com.google.common.io.CountingOutputStream,com.google.common.io.ByteStreams,com.google.common.cache.LoadingCache,com.google.common.base.Stopwatch,com.google.common.cache.RemovalNotification,com.google.common.util.concurrent.Uninterrupt
[...]
<plugins combine.children="append">
<plugin>
diff --git a/server/base/pom.xml b/server/base/pom.xml
index e308e44a3b..9b3d391e07 100644
--- a/server/base/pom.xml
+++ b/server/base/pom.xml
@@ -30,6 +30,9 @@
<artifactId>accumulo-server-base</artifactId>
<name>Apache Accumulo Server Base</name>
<description>A common base library for Apache Accumulo servers.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
diff --git a/server/compactor/pom.xml b/server/compactor/pom.xml
index 7779271cef..dea08a053e 100644
--- a/server/compactor/pom.xml
+++ b/server/compactor/pom.xml
@@ -29,6 +29,9 @@
</parent>
<artifactId>accumulo-compactor</artifactId>
<name>Apache Accumulo Compactor</name>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.google.auto.service</groupId>
diff --git a/server/gc/pom.xml b/server/gc/pom.xml
index 9cff9668c9..d8eeae5e58 100644
--- a/server/gc/pom.xml
+++ b/server/gc/pom.xml
@@ -30,6 +30,9 @@
<artifactId>accumulo-gc</artifactId>
<name>Apache Accumulo GC Server</name>
<description>The garbage collecting server for Apache Accumulo to clean up
unused files.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.google.auto.service</groupId>
diff --git a/server/manager/pom.xml b/server/manager/pom.xml
index 0c7e154321..ff4ae267ba 100644
--- a/server/manager/pom.xml
+++ b/server/manager/pom.xml
@@ -30,6 +30,9 @@
<artifactId>accumulo-manager</artifactId>
<name>Apache Accumulo Manager Server</name>
<description>The manager server for Apache Accumulo for load balancing and
other system-wide operations.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
diff --git a/server/monitor/pom.xml b/server/monitor/pom.xml
index 1f6e23b7a7..72a2c764cf 100644
--- a/server/monitor/pom.xml
+++ b/server/monitor/pom.xml
@@ -30,6 +30,9 @@
<artifactId>accumulo-monitor</artifactId>
<name>Apache Accumulo Monitor Server</name>
<description>A web server for monitoring Apache Accumulo.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
diff --git a/server/native/pom.xml b/server/native/pom.xml
index 2e2a7304e8..3674c3a223 100644
--- a/server/native/pom.xml
+++ b/server/native/pom.xml
@@ -33,6 +33,7 @@
<description>C++ native libraries for improved performance in Apache
Accumulo.</description>
<properties>
<CXX>g++</CXX>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
</properties>
<dependencies>
<dependency>
diff --git a/server/tserver/pom.xml b/server/tserver/pom.xml
index ec347bad46..8a847e4df5 100644
--- a/server/tserver/pom.xml
+++ b/server/tserver/pom.xml
@@ -30,6 +30,9 @@
<artifactId>accumulo-tserver</artifactId>
<name>Apache Accumulo Tablet Server</name>
<description>The tablet server for Apache Accumulo to host tablets of data
tables.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
diff --git
a/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java
b/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java
index f50e6da3d6..7c39cf8b66 100644
---
a/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java
+++
b/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java
@@ -36,6 +36,7 @@ import java.util.Set;
import org.apache.accumulo.core.cli.ConfigOpts;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.clientImpl.thrift.TInfo;
+import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.dataImpl.KeyExtent;
import org.apache.accumulo.core.dataImpl.thrift.InitialMultiScan;
import org.apache.accumulo.core.dataImpl.thrift.InitialScan;
@@ -45,6 +46,7 @@ import org.apache.accumulo.core.dataImpl.thrift.ScanResult;
import org.apache.accumulo.core.dataImpl.thrift.TColumn;
import org.apache.accumulo.core.dataImpl.thrift.TKeyExtent;
import org.apache.accumulo.core.dataImpl.thrift.TRange;
+import org.apache.accumulo.core.metadata.SystemTables;
import org.apache.accumulo.core.securityImpl.thrift.TCredentials;
import org.apache.accumulo.core.tabletscan.thrift.TSamplerConfiguration;
import org.apache.accumulo.core.tabletserver.thrift.NoSuchScanIDException;
@@ -54,6 +56,7 @@ import
org.apache.accumulo.tserver.session.ScanSession.TabletResolver;
import org.apache.accumulo.tserver.tablet.SnapshotTablet;
import org.apache.accumulo.tserver.tablet.Tablet;
import org.apache.accumulo.tserver.tablet.TabletBase;
+import org.apache.hadoop.io.Text;
import org.apache.thrift.TException;
import org.junit.jupiter.api.Test;
@@ -126,13 +129,17 @@ public class ScanServerTest {
private ThriftScanClientHandler handler;
+ private static KeyExtent newExtent(TableId tableId) {
+ return new KeyExtent(tableId, new Text("m"), new Text("a"));
+ }
+
@Test
public void testScan() throws Exception {
handler = createMock(ThriftScanClientHandler.class);
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
- KeyExtent sextent = createMock(KeyExtent.class);
+ KeyExtent sextent = newExtent(TableId.of("1"));
ScanReservation reservation = createMock(ScanReservation.class);
SnapshotTablet tablet = createMock(SnapshotTablet.class);
TRange trange = createMock(TRange.class);
@@ -179,8 +186,8 @@ public class ScanServerTest {
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
- KeyExtent extent = createMock(KeyExtent.class);
- TKeyExtent textent = createMock(TKeyExtent.class);
+ KeyExtent extent = newExtent(TableId.of("1"));
+ TKeyExtent textent = extent.toThrift();
TRange trange = createMock(TRange.class);
List<TRange> ranges = new ArrayList<>();
List<TColumn> tcols = new ArrayList<>();
@@ -192,12 +199,10 @@ public class ScanServerTest {
Map<String,String> execHints = new HashMap<>();
ScanReservation reservation = createMock(ScanReservation.class);
- expect(extent.isSystemTable()).andReturn(false).anyTimes();
- expect(extent.toThrift()).andReturn(textent).anyTimes();
expect(reservation.getFailures()).andReturn(Map.of(textent, ranges));
reservation.close();
- replay(extent, reservation);
+ replay(reservation);
TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock();
ss.extent = extent;
@@ -210,7 +215,7 @@ public class ScanServerTest {
tsc, 30L, classLoaderContext, execHints, 0L);
});
- verify(extent, reservation);
+ verify(reservation);
}
@Test
@@ -220,7 +225,7 @@ public class ScanServerTest {
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
List<TRange> ranges = new ArrayList<>();
- KeyExtent extent = createMock(KeyExtent.class);
+ KeyExtent extent = newExtent(TableId.of("1"));
ScanReservation reservation = createMock(ScanReservation.class);
SnapshotTablet tablet = createMock(SnapshotTablet.class);
Map<KeyExtent,List<TRange>> batch = new HashMap<>();
@@ -244,7 +249,6 @@ public class ScanServerTest {
};
TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock();
- expect(extent.isSystemTable()).andReturn(false).anyTimes();
expect(reservation.newTablet(ss, extent)).andReturn(tablet);
expect(reservation.getTabletMetadataExtents()).andReturn(Set.of(extent));
expect(reservation.getFailures()).andReturn(Map.of());
@@ -255,7 +259,7 @@ public class ScanServerTest {
expect(handler.continueMultiScan(tinfo, 15, 0L)).andReturn(new
MultiScanResult());
handler.closeMultiScan(tinfo, 15);
- replay(extent, reservation, handler);
+ replay(reservation, handler);
ss.delegate = handler;
ss.extent = extent;
@@ -271,7 +275,7 @@ public class ScanServerTest {
ss.continueMultiScan(tinfo, is.getScanID(), 0L);
assertEquals(15, is.getScanID());
ss.closeMultiScan(tinfo, is.getScanID());
- verify(extent, reservation, handler);
+ verify(reservation, handler);
}
@Test
@@ -281,8 +285,8 @@ public class ScanServerTest {
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
List<TRange> ranges = new ArrayList<>();
- KeyExtent extent = createMock(KeyExtent.class);
- TKeyExtent textent = createMock(TKeyExtent.class);
+ KeyExtent extent = newExtent(TableId.of("1"));
+ TKeyExtent textent = extent.toThrift();
ScanReservation reservation = createMock(ScanReservation.class);
SnapshotTablet tablet = createMock(SnapshotTablet.class);
Map<KeyExtent,List<TRange>> batch = new HashMap<>();
@@ -306,7 +310,6 @@ public class ScanServerTest {
};
TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock();
- expect(extent.isSystemTable()).andReturn(false).anyTimes();
expect(reservation.newTablet(ss, extent)).andReturn(tablet).anyTimes();
expect(reservation.getTabletMetadataExtents()).andReturn(Set.of());
expect(reservation.getFailures()).andReturn(Map.of(textent,
ranges)).anyTimes();
@@ -316,7 +319,7 @@ public class ScanServerTest {
expect(handler.startMultiScan(tinfo, tcreds, tcols, titer, batch, ssio,
auths, false, tsc, 30L,
classLoaderContext, execHints, resolver, 0L)).andReturn(ims);
- replay(extent, reservation, handler);
+ replay(reservation, handler);
ss.delegate = handler;
ss.extent = extent;
@@ -331,7 +334,7 @@ public class ScanServerTest {
assertEquals(15, is.getScanID());
assertEquals(0, is.getResult().getFailuresSize());
- verify(extent, reservation, handler);
+ verify(reservation, handler);
}
@@ -380,7 +383,7 @@ public class ScanServerTest {
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
- KeyExtent sextent = createMock(KeyExtent.class);
+ KeyExtent sextent = newExtent(SystemTables.METADATA.tableId());
ScanReservation reservation = createMock(ScanReservation.class);
SnapshotTablet tablet = createMock(SnapshotTablet.class);
TRange trange = createMock(TRange.class);
@@ -394,7 +397,6 @@ public class ScanServerTest {
TabletResolver resolver = createMock(TabletResolver.class);
TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock();
- expect(sextent.isSystemTable()).andReturn(true).anyTimes();
expect(reservation.newTablet(ss, sextent)).andReturn(tablet);
expect(reservation.getFailures()).andReturn(Map.of()).anyTimes();
reservation.close();
@@ -405,7 +407,7 @@ public class ScanServerTest {
expect(handler.continueScan(tinfo, 15, 0L)).andReturn(new ScanResult());
handler.closeScan(tinfo, 15);
- replay(sextent, reservation, handler);
+ replay(reservation, handler);
ss.delegate = handler;
ss.extent = sextent;
@@ -419,7 +421,7 @@ public class ScanServerTest {
assertEquals(15, is.getScanID());
ss.continueScan(tinfo, is.getScanID(), 0L);
ss.closeScan(tinfo, is.getScanID());
- verify(sextent, reservation, handler);
+ verify(reservation, handler);
}
@@ -429,7 +431,7 @@ public class ScanServerTest {
TInfo tinfo = createMock(TInfo.class);
TCredentials tcreds = createMock(TCredentials.class);
- KeyExtent sextent = createMock(KeyExtent.class);
+ KeyExtent sextent = newExtent(SystemTables.METADATA.tableId());
ScanReservation reservation = createMock(ScanReservation.class);
TRange trange = createMock(TRange.class);
List<TColumn> tcols = new ArrayList<>();
@@ -442,10 +444,9 @@ public class ScanServerTest {
TabletResolver resolver = createMock(TabletResolver.class);
TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock();
- expect(sextent.isSystemTable()).andReturn(true).anyTimes();
expect(reservation.getFailures()).andReturn(Map.of()).anyTimes();
- replay(sextent, reservation, handler);
+ replay(reservation, handler);
ss.delegate = handler;
ss.extent = sextent;
@@ -458,7 +459,7 @@ public class ScanServerTest {
ss.startScan(tinfo, tcreds, textent, trange, tcols, 10, titer, ssio,
auths, false, false, 10,
tsc, 30L, classLoaderContext, execHints, 0L);
});
- verify(sextent, reservation, handler);
+ verify(reservation, handler);
}
diff --git
a/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletResourceManagerTest.java
b/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletResourceManagerTest.java
index a9f3633a82..84ca071e49 100644
---
a/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletResourceManagerTest.java
+++
b/server/tserver/src/test/java/org/apache/accumulo/tserver/TabletResourceManagerTest.java
@@ -21,9 +21,11 @@ package org.apache.accumulo.tserver;
import static org.easymock.EasyMock.createMock;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.dataImpl.KeyExtent;
import org.apache.accumulo.server.conf.TableConfiguration;
import
org.apache.accumulo.tserver.TabletServerResourceManager.TabletResourceManager;
+import org.apache.hadoop.io.Text;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -36,7 +38,7 @@ public class TabletResourceManagerTest {
@BeforeEach
public void setUp() {
tsrm = createMock(TabletServerResourceManager.class);
- extent = createMock(KeyExtent.class);
+ extent = new KeyExtent(TableId.of("1"), new Text("m"), new Text("a"));
conf = createMock(TableConfiguration.class);
trm = tsrm.new TabletResourceManager(extent, conf);
}
diff --git a/shell/pom.xml b/shell/pom.xml
index d49ec12ea7..656d9bfb39 100644
--- a/shell/pom.xml
+++ b/shell/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-shell</artifactId>
<name>Apache Accumulo Shell</name>
<description>An interactive shell for accessing Apache Accumulo via a
command line interface.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
diff --git a/start/pom.xml b/start/pom.xml
index 4a23df4c6c..0766d612a9 100644
--- a/start/pom.xml
+++ b/start/pom.xml
@@ -29,6 +29,9 @@
<artifactId>accumulo-start</artifactId>
<name>Apache Accumulo Start</name>
<description>A library for launching Apache Accumulo services.</description>
+ <properties>
+
<spotbugs.omitVisitors>SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
+ </properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
diff --git a/test/pom.xml b/test/pom.xml
index eef43c05b6..f986690c22 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -30,6 +30,7 @@
<name>Apache Accumulo Testing</name>
<description>Tests for Apache Accumulo.</description>
<properties>
+
<spotbugs.omitVisitors>FindDeadLocalStores,SharedVariableAtomicityDetector,ConstructorThrow</spotbugs.omitVisitors>
<timeout.factor>1</timeout.factor>
</properties>
<dependencies>