();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
index 3e10b20c204..f527df0b2ad 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
@@ -16,6 +16,8 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import java.util.concurrent.TimeUnit;
/**
@@ -24,6 +26,7 @@
* Metrics are not recorded, making this receiver useful in unit tests and as defaults in
* situations where metrics are not strictly required.
*/
+@SuppressFBWarnings("EI_EXPOSE_REP2")
public class NullStatsLogger implements StatsLogger {
public static final NullStatsLogger INSTANCE = new NullStatsLogger();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
index 21703f725f2..e9c40ca1f06 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
@@ -16,11 +16,13 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.commons.configuration.Configuration;
/**
* A no-op stats provider implementation.
*/
+@SuppressFBWarnings("EI_EXPOSE_REP2")
public class NullStatsProvider implements StatsProvider {
final StatsLogger nullStatsLogger = new NullStatsLogger();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
index a3799b08e5f..3f9b98d43e9 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
@@ -20,6 +20,7 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.configuration.Configuration;
@@ -63,6 +64,7 @@ public static void loadStatsProvider(String className) {
}
}
+ @SuppressFBWarnings("EI_EXPOSE_REP2")
public static StatsProvider get() {
return prov;
}
diff --git a/build.gradle b/build.gradle
index e30c984281e..9ef807ad978 100644
--- a/build.gradle
+++ b/build.gradle
@@ -143,7 +143,6 @@ allprojects {
}
spotbugs {
- toolVersion = '3.1.8'
excludeFilter = file("$rootDir/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml")
reportLevel = 'high'
spotbugsTest.enabled = false
diff --git a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
index da6867c132d..09daf196569 100644
--- a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
+++ b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
@@ -16,6 +16,16 @@
limitations under the License.
//-->
+
+
+
+
+
+
+
+
+
+
diff --git a/buildtools/src/main/resources/distributedlog/findbugsExclude.xml b/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
index f85686fcb75..c4ba2cd1273 100644
--- a/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
+++ b/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
@@ -16,6 +16,16 @@
limitations under the License.
//-->
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
index 58ef9bbd17f..c230c3fcc95 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -21,10 +21,10 @@
protobufPluginVersion=0.8.18
apcheRatPluginVersion=0.7.0
-shadowPluginVersion=6.1.0
+shadowPluginVersion=7.1.2
licenseGradlePluginVersion=0.15.0
checkStyleVersion=6.19
-spotbugsPlugin=4.7.0
+spotbugsPlugin=5.0.5
testLogger=3.1.0
testRetry=1.0.0
owaspPlugin=6.5.3
diff --git a/microbenchmarks/build.gradle b/microbenchmarks/build.gradle
index a58eea03b75..6acc6ef0700 100644
--- a/microbenchmarks/build.gradle
+++ b/microbenchmarks/build.gradle
@@ -34,6 +34,7 @@ dependencies {
compileOnly depLibs.jmhCore
compileOnly depLibs.guava
compileOnly depLibs.slf4j
+ compileOnly depLibs.spotbugsAnnotations
annotationProcessor depLibs.jmhGeneratorAnnprocess
}
diff --git a/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java b/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
index 886cd6937f4..c6d568fbdc3 100644
--- a/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
+++ b/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
@@ -16,9 +16,9 @@
*/
package org.apache.bookkeeper.stats.codahale;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
-
import org.apache.bookkeeper.stats.OpStatsLogger;
import org.apache.bookkeeper.stats.StatsLogger;
import org.openjdk.jmh.annotations.Benchmark;
@@ -71,6 +71,7 @@ public static class MyState {
private int timeIdx = 0;
@Setup(Level.Trial)
+ @SuppressFBWarnings("SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA")
public void doSetup() throws Exception {
StatsLogger logger = null;
switch (timerType) {
diff --git a/pom.xml b/pom.xml
index 3ea99a9bc3c..07df38bb971 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,7 +171,7 @@
3.0.1
1.7.32
1.30
- 3.1.8
+ 4.6.0
1.3.2
1.15.1
3.9.8
@@ -205,7 +205,7 @@
1.4.1.Final
0.6.1
6.19
- 3.1.8
+ 4.6.0.0
1
4.0.0
3.0.1
diff --git a/stream/distributedlog/core/build.gradle b/stream/distributedlog/core/build.gradle
index 2af471ac7aa..f8812f9a0a1 100644
--- a/stream/distributedlog/core/build.gradle
+++ b/stream/distributedlog/core/build.gradle
@@ -36,6 +36,7 @@ dependencies {
implementation depLibs.guava
compileOnly depLibs.jsr305
compileOnly depLibs.lombok
+ compileOnly depLibs.spotbugsAnnotations
implementation depLibs.nettyBuffer
implementation depLibs.nettyTransportNativeEpoll
implementation depLibs.slf4j
diff --git a/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java b/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
index 17f8113b982..b1ed272c413 100644
--- a/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
+++ b/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
@@ -32,10 +32,10 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.net.URI;
import java.util.Collections;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -533,6 +533,7 @@ public void processResult(int rc, String path, Object ctx, List result
}, null);
}
+ @SuppressFBWarnings("DCN_NULLPOINTER_EXCEPTION")
static LogMetadataForWriter processLogMetadatas(URI uri,
String logName,
String logIdentifier,
diff --git a/stream/distributedlog/pom.xml b/stream/distributedlog/pom.xml
index 25bcd66dd5c..8e86bb9cf16 100644
--- a/stream/distributedlog/pom.xml
+++ b/stream/distributedlog/pom.xml
@@ -37,6 +37,9 @@
core
io
+
+ 4.6.0
+
@@ -87,5 +90,21 @@
+
+
+
+ com.github.spotbugs
+ spotbugs-annotations
+ ${spotbugs-annotations.version}
+
+
+
+
+
+ com.github.spotbugs
+ spotbugs-annotations
+ provided
+
+
diff --git a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
index 05724feae7e..7c4137a6ffa 100644
--- a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
+++ b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
@@ -37,8 +37,6 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -101,49 +99,38 @@ private static MavenClassLoader createClassLoader(ConfigurableMavenResolverSyste
private static MavenClassLoader createClassLoader(File[] jars) {
final ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
- URLClassLoader cl = AccessController.doPrivileged(
- new PrivilegedAction() {
- @Override
- public URLClassLoader run() {
- /**
- * Child-first URLClassLoader.
- * This is needed because Gradle uses a different version of
- * Netty and it is placed in the System Class loader.
- */
- return new URLClassLoader(Arrays.stream(jars)
- .map((f) -> {
- try {
- return f.toURI().toURL();
- } catch (Throwable t) {
- throw new RuntimeException(t);
- }
- })
- .toArray(URL[]::new),
- systemClassLoader) {
-
- @Override
- protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundException {
- Class> loadedClass = findLoadedClass(name);
- if (loadedClass == null) {
- try {
- loadedClass = findClass(name);
- } catch (ClassNotFoundException ignored) {
- }
- if (loadedClass == null) {
- try {
- loadedClass = systemClassLoader.loadClass(name);
- } catch (ClassNotFoundException e) {
- }
- }
- }
- if (resolve && loadedClass != null) {
- resolveClass(loadedClass);
- }
- return loadedClass;
- }
- };
+ URLClassLoader cl = new URLClassLoader(Arrays.stream(jars)
+ .map((f) -> {
+ try {
+ return f.toURI().toURL();
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ })
+ .toArray(URL[]::new),
+ systemClassLoader) {
+
+ @Override
+ protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ Class> loadedClass = findLoadedClass(name);
+ if (loadedClass == null) {
+ try {
+ loadedClass = findClass(name);
+ } catch (ClassNotFoundException ignored) {
+ }
+ if (loadedClass == null) {
+ try {
+ loadedClass = systemClassLoader.loadClass(name);
+ } catch (ClassNotFoundException e) {
+ }
}
- });
+ }
+ if (resolve && loadedClass != null) {
+ resolveClass(loadedClass);
+ }
+ return loadedClass;
+ }
+ };
return new MavenClassLoader(cl);
}