From 2e35ba2a43819e2a7313c4caf74682e02f203131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Wed, 16 Feb 2022 08:57:15 +0100 Subject: [PATCH 01/10] [build] make build pass on jdk17 --- .../bookkeeper/bookie/BookieException.java | 4 + .../apache/bookkeeper/proto/BookieServer.java | 5 +- .../verifier/BookkeeperVerifier.java | 29 +++---- build.gradle | 1 - gradle.properties | 4 +- .../bookkeeper/proto/ProtocolBenchmark.java | 9 +-- .../integration/utils/MavenClassLoader.java | 75 ++++++++----------- 7 files changed, 52 insertions(+), 75 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java index 2f86052f00d..2b85961cf4b 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java @@ -167,6 +167,10 @@ public static class BookieUnauthorizedAccessException extends BookieException { public BookieUnauthorizedAccessException() { super(Code.UnauthorizedAccessException); } + + public BookieUnauthorizedAccessException(String reason) { + super(Code.UnauthorizedAccessException, reason); + } } /** diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java index 2c1eb3a7d42..1054c172450 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java @@ -27,7 +27,6 @@ import java.io.IOException; import java.lang.Thread.UncaughtExceptionHandler; import java.net.UnknownHostException; -import java.security.AccessControlException; import java.util.Arrays; import java.util.concurrent.TimeUnit; import org.apache.bookkeeper.bookie.Bookie; @@ -201,7 +200,7 @@ public synchronized void shutdown() { /** * Ensure the current user can start-up the process if it's restricted. */ - private void validateUser(ServerConfiguration conf) throws AccessControlException { + private void validateUser(ServerConfiguration conf) throws BookieException { if (conf.containsKey(PERMITTED_STARTUP_USERS)) { String currentUser = System.getProperty("user.name"); String[] propertyValue = conf.getPermittedStartupUsers(); @@ -215,7 +214,7 @@ private void validateUser(ServerConfiguration conf) throws AccessControlExceptio + " Current user: " + currentUser + " permittedStartupUsers: " + Arrays.toString(propertyValue); LOG.error(errorMsg); - throw new AccessControlException(errorMsg); + throw new BookieException.BookieUnauthorizedAccessException(errorMsg); } } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java index 821d260c7be..df624b58e8e 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java @@ -27,9 +27,9 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; -import java.util.Random; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -182,15 +182,12 @@ private long getNextLedgerID() { */ class EntryInfo { private final long entryID; - private final long seed; - EntryInfo(long entryID, long seed) { + EntryInfo(long entryID) { this.entryID = entryID; - this.seed = seed; } byte[] getBuffer() { - Random rand = new Random(seed); byte[] ret = new byte[targetEntrySize]; - rand.nextBytes(ret); + ThreadLocalRandom.current().nextBytes(ret); return ret; } long getEntryID() { @@ -220,7 +217,6 @@ long getEntryID() { */ class LedgerInfo { private final long ledgerID; - private final long seed; private long lastEntryIDCompleted = -1; private long confirmedLAC = -1; private boolean closed = false; @@ -233,9 +229,8 @@ class LedgerInfo { EntryIterator iter; - LedgerInfo(long ledgerID, long seed) { + LedgerInfo(long ledgerID) { this.ledgerID = ledgerID; - this.seed = seed; iter = new EntryIterator(); } @@ -256,9 +251,7 @@ ArrayList getNextEntries(int num) { } class EntryIterator implements Iterator { - Random rand; long currentID; - long currentSeed; EntryIterator() { seek(-1); @@ -266,20 +259,17 @@ class EntryIterator implements Iterator { void seek(long entryID) { currentID = -1; - currentSeed = seed; - rand = new Random(seed); while (currentID < entryID) { advance(); } } void advance() { - currentSeed = rand.nextLong(); currentID++; } EntryInfo get() { - return new EntryInfo(currentID, currentSeed); + return new EntryInfo(currentID); } @Override @@ -413,10 +403,9 @@ public void setClosed() { private final Set openingLedgers = new HashSet<>(); private final Set openLedgers = new HashSet<>(); private final Set liveLedgers = new HashSet<>(); - private final Random opRand = new Random(); private LedgerInfo getRandomLedger(Collection ledgerCollection) { - int elem = opRand.nextInt(ledgerCollection.size()); + int elem = ThreadLocalRandom.current().nextInt(ledgerCollection.size()); Iterator iter = ledgerCollection.iterator(); for (int i = 0; i < elem; ++i) { iter.next(); @@ -431,7 +420,7 @@ private synchronized boolean startRead() { return false; } LedgerInfo ledger; - if (!openLedgers.isEmpty() && (opRand.nextDouble() > coldToHotRatio)) { + if (!openLedgers.isEmpty() && (ThreadLocalRandom.current().nextDouble() > coldToHotRatio)) { ledger = getRandomLedger(openLedgers); System.out.format("Reading from open ledger %d%n", ledger.ledgerID); } else if (!liveLedgers.isEmpty()) { @@ -449,7 +438,7 @@ private synchronized boolean startRead() { /* Either startWrite can make progress or there are already a bunch in progress */ return false; } - long start = Math.abs(opRand.nextLong() % lastEntryCompleted); + long start = Math.abs(ThreadLocalRandom.current().nextLong() % lastEntryCompleted); long end = start + targetReadGroup > lastEntryCompleted ? lastEntryCompleted : start + targetReadGroup; System.out.format("Reading %d -> %d from ledger %d%n", start, end, ledger.ledgerID); LedgerInfo finalLedger = ledger; @@ -551,7 +540,7 @@ private synchronized boolean startWrite() { /* Not enough open ledgers, open a new one -- counts as a write */ long newID = getNextLedgerID(); System.out.format("Creating new ledger %d%n", newID); - LedgerInfo ledger = new LedgerInfo(newID, opRand.nextLong()); + LedgerInfo ledger = new LedgerInfo(newID); openingLedgers.add(ledger); driver.createLedger(newID, ensembleSize, writeQuorum, ackQuorum, (rc) -> { synchronized (BookkeeperVerifier.this) { diff --git a/build.gradle b/build.gradle index 86f1f39a245..6b18301f4e8 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/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/src/main/java/org/apache/bookkeeper/proto/ProtocolBenchmark.java b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/ProtocolBenchmark.java index 4cea6345ad8..ab2440207f2 100644 --- a/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/ProtocolBenchmark.java +++ b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/ProtocolBenchmark.java @@ -25,7 +25,7 @@ import io.netty.buffer.Unpooled; import io.netty.util.ReferenceCountUtil; -import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import org.apache.bookkeeper.proto.BookieProtoEncoding.EnDecoder; @@ -69,12 +69,11 @@ public class ProtocolBenchmark { @Setup public void prepare() { this.masterKey = "test-benchmark-key".getBytes(UTF_8); - Random r = new Random(System.currentTimeMillis()); byte[] data = new byte[this.size]; - r.nextBytes(data); + ThreadLocalRandom.current().nextBytes(data); this.entry = Unpooled.wrappedBuffer(data); - this.ledgerId = r.nextLong(); - this.entryId = r.nextLong(); + this.ledgerId = ThreadLocalRandom.current().nextLong(); + this.entryId = ThreadLocalRandom.current().nextLong(); this.flags = 1; // prepare the encoder 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 9c24186f920..2f14c8d4540 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); } From 08f8b842b8fd3c837b0b77a6294db235af6e91fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Wed, 16 Feb 2022 09:04:16 +0100 Subject: [PATCH 02/10] fix test --- .../bookkeeper/bookie/BookieInitializationTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java index d919bc8d8b6..a3f20a85e25 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java @@ -55,7 +55,6 @@ import java.net.InetAddress; import java.net.URL; import java.net.URLConnection; -import java.security.AccessControlException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -579,7 +578,7 @@ conf, new TestBookieImpl(conf), new MockUncleanShutdownDetection()); fail("Bookkeeper should not have started since current user isn't in permittedStartupUsers"); - } catch (AccessControlException buae) { + } catch (BookieException.BookieUnauthorizedAccessException buae) { sawException = true; } finally { if (bs1 != null && bs1.isRunning()) { @@ -615,7 +614,7 @@ conf, new TestBookieImpl(conf), NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT, new MockUncleanShutdownDetection()); bs1.start(); - } catch (AccessControlException buae) { + } catch (BookieException.BookieUnauthorizedAccessException buae) { fail("Bookkeeper should have started since current user is in permittedStartupUsers"); } finally { if (bs1 != null && bs1.isRunning()) { @@ -632,7 +631,7 @@ conf, new TestBookieImpl(conf), NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT, new MockUncleanShutdownDetection()); bs1.start(); - } catch (AccessControlException buae) { + } catch (BookieException.BookieUnauthorizedAccessException buae) { fail("Bookkeeper should have started since current user is in permittedStartupUsers"); } finally { if (bs1 != null && bs1.isRunning()) { @@ -664,7 +663,7 @@ conf, new TestBookieImpl(conf), NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT, new MockUncleanShutdownDetection()); bs1.start(); - } catch (AccessControlException buae) { + } catch (BookieException.BookieUnauthorizedAccessException buae) { fail("Bookkeeper should have started since permittedStartupUser is not specified"); } finally { if (bs1 != null && bs1.isRunning()) { From 1a0107db153e1a37137b9748e3eb7d173a633461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Mon, 28 Mar 2022 16:27:18 +0200 Subject: [PATCH 03/10] maven upgrades --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 44710dd1bd4..23881c4ed3c 100644 --- a/pom.xml +++ b/pom.xml @@ -145,7 +145,7 @@ 3.2.7 4.12 0.14.2 - 1.18.20 + 1.18.22 2.17.1 1.3.0 3.12.4 @@ -164,7 +164,7 @@ 3.0.1 1.7.32 1.30 - 3.1.8 + 4.6.0 1.3.2 1.15.1 3.9.8 @@ -197,7 +197,7 @@ 1.4.1.Final 0.6.1 6.19 - 3.1.8 + 4.6.0.0 1 4.0.0 3.0.1 From 82519c1fc0d18109ff0b47e73338c68f98bb6740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 21 Apr 2022 00:06:11 +0200 Subject: [PATCH 04/10] revert BookKeeperVerifier --- .../verifier/BookkeeperVerifier.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java index dddddb5d658..63c24578d98 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java @@ -27,9 +27,9 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; +import java.util.Random; import java.util.Set; import java.util.TreeSet; -import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -182,12 +182,15 @@ private long getNextLedgerID() { */ class EntryInfo { private final long entryID; - EntryInfo(long entryID) { + private final long seed; + EntryInfo(long entryID, long seed) { this.entryID = entryID; + this.seed = seed; } byte[] getBuffer() { + Random rand = new Random(seed); byte[] ret = new byte[targetEntrySize]; - ThreadLocalRandom.current().nextBytes(ret); + rand.nextBytes(ret); return ret; } long getEntryID() { @@ -217,6 +220,7 @@ long getEntryID() { */ class LedgerInfo { private final long ledgerID; + private final long seed; private long lastEntryIDCompleted = -1; private long confirmedLAC = -1; private boolean closed = false; @@ -229,8 +233,9 @@ class LedgerInfo { EntryIterator iter; - LedgerInfo(long ledgerID) { + LedgerInfo(long ledgerID, long seed) { this.ledgerID = ledgerID; + this.seed = seed; iter = new EntryIterator(); } @@ -251,7 +256,9 @@ ArrayList getNextEntries(int num) { } class EntryIterator implements Iterator { + Random rand; long currentID; + long currentSeed; EntryIterator() { seek(-1); @@ -259,17 +266,20 @@ class EntryIterator implements Iterator { void seek(long entryID) { currentID = -1; + currentSeed = seed; + rand = new Random(seed); while (currentID < entryID) { advance(); } } void advance() { + currentSeed = rand.nextLong(); currentID++; } EntryInfo get() { - return new EntryInfo(currentID); + return new EntryInfo(currentID, currentSeed); } @Override @@ -403,9 +413,10 @@ public void setClosed() { private final Set openingLedgers = new HashSet<>(); private final Set openLedgers = new HashSet<>(); private final Set liveLedgers = new HashSet<>(); + private final Random opRand = new Random(); private LedgerInfo getRandomLedger(Collection ledgerCollection) { - int elem = ThreadLocalRandom.current().nextInt(ledgerCollection.size()); + int elem = opRand.nextInt(ledgerCollection.size()); Iterator iter = ledgerCollection.iterator(); for (int i = 0; i < elem; ++i) { iter.next(); @@ -420,7 +431,7 @@ private synchronized boolean startRead() { return false; } LedgerInfo ledger; - if (!openLedgers.isEmpty() && (ThreadLocalRandom.current().nextDouble() > coldToHotRatio)) { + if (!openLedgers.isEmpty() && (opRand.nextDouble() > coldToHotRatio)) { ledger = getRandomLedger(openLedgers); System.out.format("Reading from open ledger %d%n", ledger.ledgerID); } else if (!liveLedgers.isEmpty()) { @@ -438,7 +449,7 @@ private synchronized boolean startRead() { /* Either startWrite can make progress or there are already a bunch in progress */ return false; } - long start = Math.abs(ThreadLocalRandom.current().nextLong() % lastEntryCompleted); + long start = Math.abs(opRand.nextLong() % lastEntryCompleted); long end = start + targetReadGroup > lastEntryCompleted ? lastEntryCompleted : start + targetReadGroup; System.out.format("Reading %d -> %d from ledger %d%n", start, end, ledger.ledgerID); LedgerInfo finalLedger = ledger; @@ -540,7 +551,7 @@ private synchronized boolean startWrite() { /* Not enough open ledgers, open a new one -- counts as a write */ long newID = getNextLedgerID(); System.out.format("Creating new ledger %d%n", newID); - LedgerInfo ledger = new LedgerInfo(newID); + LedgerInfo ledger = new LedgerInfo(newID, opRand.nextLong()); openingLedgers.add(ledger); driver.createLedger(newID, ensembleSize, writeQuorum, ackQuorum, (rc) -> { synchronized (BookkeeperVerifier.this) { From f8fdced98220d706dab01c9bf07ba25faae1b171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 21 Apr 2022 00:32:02 +0200 Subject: [PATCH 05/10] spotbugs --- .../java/org/apache/bookkeeper/stats/CachingStatsLogger.java | 3 +++ .../main/java/org/apache/bookkeeper/stats/NullStatsLogger.java | 3 +++ .../java/org/apache/bookkeeper/stats/NullStatsProvider.java | 2 ++ .../src/main/java/org/apache/bookkeeper/stats/Stats.java | 2 ++ 4 files changed, 10 insertions(+) diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java index d86e19a176f..b197b1ec270 100644 --- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java +++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java @@ -16,6 +16,8 @@ */ package org.apache.bookkeeper.stats; +import org.graalvm.compiler.core.common.SuppressFBWarnings; + import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -29,6 +31,7 @@ public class CachingStatsLogger implements StatsLogger { protected final ConcurrentMap opStatsLoggers; protected final ConcurrentMap scopeStatsLoggers; + @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") public CachingStatsLogger(StatsLogger statsLogger) { this.underlying = statsLogger; this.counters = new ConcurrentHashMap(); 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..1f2feb87b3a 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 org.graalvm.compiler.core.common.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(value = "EI_EXPOSE_REP2", justification = "") 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..36584c7de63 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 @@ -17,10 +17,12 @@ package org.apache.bookkeeper.stats; import org.apache.commons.configuration.Configuration; +import org.graalvm.compiler.core.common.SuppressFBWarnings; /** * A no-op stats provider implementation. */ +@SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") 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..86724e14e81 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 @@ -23,6 +23,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.apache.commons.configuration.Configuration; +import org.graalvm.compiler.core.common.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,6 +64,7 @@ public static void loadStatsProvider(String className) { } } + @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") public static StatsProvider get() { return prov; } From aca3575975b2ee3ee99ffdd3ee5d081224b64656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 21 Apr 2022 09:10:01 +0200 Subject: [PATCH 06/10] fix build --- bookkeeper-stats/build.gradle | 1 + bookkeeper-stats/pom.xml | 9 +++++++++ .../org/apache/bookkeeper/stats/CachingStatsLogger.java | 4 ++-- .../org/apache/bookkeeper/stats/NullStatsLogger.java | 4 ++-- .../org/apache/bookkeeper/stats/NullStatsProvider.java | 4 ++-- .../src/main/java/org/apache/bookkeeper/stats/Stats.java | 5 +++-- 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/bookkeeper-stats/build.gradle b/bookkeeper-stats/build.gradle index 98784c9718b..dcdd59a76a1 100644 --- a/bookkeeper-stats/build.gradle +++ b/bookkeeper-stats/build.gradle @@ -23,6 +23,7 @@ plugins { dependencies { implementation depLibs.commonsConfiguration implementation depLibs.slf4j + compileOnly depLibs.spotbugsAnnotations } jar { diff --git a/bookkeeper-stats/pom.xml b/bookkeeper-stats/pom.xml index 41736c43527..f58c141d982 100644 --- a/bookkeeper-stats/pom.xml +++ b/bookkeeper-stats/pom.xml @@ -26,6 +26,9 @@ bookkeeper-stats-api Apache BookKeeper :: Stats API http://maven.apache.org + + 4.6.0 + @@ -59,5 +62,11 @@ commons-configuration commons-configuration + + com.github.spotbugs + spotbugs-annotations + ${spotbugs-annotations.version} + provided + diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java index b197b1ec270..15725eb1574 100644 --- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java +++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java @@ -16,7 +16,7 @@ */ package org.apache.bookkeeper.stats; -import org.graalvm.compiler.core.common.SuppressFBWarnings; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -31,7 +31,7 @@ public class CachingStatsLogger implements StatsLogger { protected final ConcurrentMap opStatsLoggers; protected final ConcurrentMap scopeStatsLoggers; - @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") + @SuppressFBWarnings("EI_EXPOSE_REP2") public CachingStatsLogger(StatsLogger statsLogger) { this.underlying = statsLogger; this.counters = new ConcurrentHashMap(); 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 1f2feb87b3a..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,7 +16,7 @@ */ package org.apache.bookkeeper.stats; -import org.graalvm.compiler.core.common.SuppressFBWarnings; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.TimeUnit; @@ -26,7 +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(value = "EI_EXPOSE_REP2", justification = "") +@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 36584c7de63..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,13 +16,13 @@ */ package org.apache.bookkeeper.stats; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.configuration.Configuration; -import org.graalvm.compiler.core.common.SuppressFBWarnings; /** * A no-op stats provider implementation. */ -@SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") +@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 86724e14e81..759924913eb 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 @@ -22,8 +22,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.configuration.Configuration; -import org.graalvm.compiler.core.common.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +65,7 @@ public static void loadStatsProvider(String className) { } } - @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "") + @SuppressFBWarnings("EI_EXPOSE_REP2") public static StatsProvider get() { return prov; } From b4881368864ba2b3cdab540699f30ca759621c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 21 Apr 2022 14:54:35 +0200 Subject: [PATCH 07/10] checkstyle rules --- .../src/main/resources/bookkeeper/findbugsExclude.xml | 10 ++++++++++ .../main/resources/distributedlog/findbugsExclude.xml | 10 ++++++++++ 2 files changed, 20 insertions(+) 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. //--> + + + + + + + + + + From e2f955e15e4126b16739c858586c2fc64c6a4d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 21 Apr 2022 15:57:30 +0200 Subject: [PATCH 08/10] fix spotbugs --- .../verifier/BookkeeperVerifier.java | 4 ++++ microbenchmarks/build.gradle | 1 + .../stats/codahale/TimerBenchmark.java | 2 ++ stream/distributedlog/core/build.gradle | 1 + .../metadata/ZKLogStreamMetadataStore.java | 3 ++- stream/distributedlog/pom.xml | 19 +++++++++++++++++++ 6 files changed, 29 insertions(+), 1 deletion(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java index 63c24578d98..11603ea7477 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java @@ -30,9 +30,12 @@ import java.util.Random; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiConsumer; import java.util.function.Consumer; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import lombok.SneakyThrows; import org.apache.bookkeeper.client.BKException; /** @@ -180,6 +183,7 @@ private long getNextLedgerID() { /** * State required to regenerate an entry. */ + @SuppressFBWarnings("DMI_RANDOM_USED_ONLY_ONCE") class EntryInfo { private final long entryID; private final long seed; 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..70c73b05f49 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 @@ -19,6 +19,7 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.bookkeeper.stats.OpStatsLogger; import org.apache.bookkeeper.stats.StatsLogger; import org.openjdk.jmh.annotations.Benchmark; @@ -71,6 +72,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/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 + + From 820eea1bf649f24644c8cf20471673b8ab00c270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Fri, 22 Apr 2022 14:49:07 +0200 Subject: [PATCH 09/10] chesktyle --- .../org/apache/bookkeeper/verifier/BookkeeperVerifier.java | 6 +----- .../src/main/java/org/apache/bookkeeper/stats/Stats.java | 3 +-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java index 11603ea7477..5715bbf4043 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java @@ -18,7 +18,7 @@ package org.apache.bookkeeper.verifier; import static com.google.common.base.Preconditions.checkState; - +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -30,12 +30,8 @@ import java.util.Random; import java.util.Set; import java.util.TreeSet; -import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiConsumer; import java.util.function.Consumer; - -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import lombok.SneakyThrows; import org.apache.bookkeeper.client.BKException; /** 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 759924913eb..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,10 +20,9 @@ */ package org.apache.bookkeeper.stats; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; - -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.configuration.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From d1592da73896c945f30f31e2c7ad58a2a5dde1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Fri, 22 Apr 2022 16:55:40 +0200 Subject: [PATCH 10/10] checkstyle --- .../org/apache/bookkeeper/stats/codahale/TimerBenchmark.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 70c73b05f49..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,10 +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 edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.bookkeeper.stats.OpStatsLogger; import org.apache.bookkeeper.stats.StatsLogger; import org.openjdk.jmh.annotations.Benchmark;