This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 0ab3ea0 ISSUE #230: Enable checkstyle on util package
0ab3ea0 is described below
commit 0ab3ea0bab5c3d3fe0c84c8a3843467f0bea31cd
Author: Aaron Coburn <[email protected]>
AuthorDate: Tue Dec 5 16:49:57 2017 -0800
ISSUE #230: Enable checkstyle on util package
Part of #230, this adds checkstyle verification to the util package in
bookkeeper-server.
A few notable changes:
- in `util.HardLink`, the field `osType` becomes `OS_TYPE`.
- in `util.LocalBookkeeper`, a few package-protected fields are marked
private and changed to camelCase.
Author: Aaron Coburn <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, Sijie Guo
<[email protected]>
This closes #815 from acoburn/checkstyle_util, closes #230
---
.../bookkeeper/util/BookKeeperConstants.java | 6 +-
.../bookkeeper/util/DaemonThreadFactory.java | 5 +-
.../apache/bookkeeper/util/DirectMemoryUtils.java | 11 +-
.../org/apache/bookkeeper/util/DiskChecker.java | 47 ++-
.../org/apache/bookkeeper/util/DoubleByteBuf.java | 38 +--
.../org/apache/bookkeeper/util/EntryFormatter.java | 10 +-
.../java/org/apache/bookkeeper/util/HardLink.java | 333 +++++++++++----------
.../bookkeeper/util/HexDumpEntryFormatter.java | 3 +
.../java/org/apache/bookkeeper/util/JsonUtil.java | 3 +
.../apache/bookkeeper/util/LocalBookKeeper.java | 41 +--
.../java/org/apache/bookkeeper/util/NativeIO.java | 16 +-
.../bookkeeper/util/OrderedSafeExecutor.java | 43 +--
.../apache/bookkeeper/util/ReflectionUtils.java | 16 +-
.../org/apache/bookkeeper/util/SafeRunnable.java | 15 +-
.../java/org/apache/bookkeeper/util/Shell.java | 45 ++-
.../org/apache/bookkeeper/util/SnapshotMap.java | 8 +-
.../bookkeeper/util/StringEntryFormatter.java | 7 +-
.../org/apache/bookkeeper/util/StringUtils.java | 26 +-
.../org/apache/bookkeeper/util/SubTreeCache.java | 44 +--
.../main/java/org/apache/bookkeeper/util/Tool.java | 6 +-
.../org/apache/bookkeeper/util/ZeroBuffer.java | 11 +-
.../java/org/apache/bookkeeper/util/ZkUtils.java | 20 +-
.../util/collections/ConcurrentLongHashMap.java | 21 +-
.../util/collections/ConcurrentLongHashSet.java | 29 +-
.../collections/ConcurrentLongLongHashMap.java | 45 +--
.../collections/ConcurrentLongLongPairHashMap.java | 52 ++--
.../util/collections/ConcurrentOpenHashMap.java | 22 +-
.../util/collections/ConcurrentOpenHashSet.java | 20 +-
.../collections/GrowableArrayBlockingQueue.java | 4 +-
.../util/collections/RecyclableArrayList.java | 3 +
.../package-info.java} | 30 +-
...StringEntryFormatter.java => package-info.java} | 28 +-
.../resources/bookkeeper/server-suppressions.xml | 1 -
33 files changed, 531 insertions(+), 478 deletions(-)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/BookKeeperConstants.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/BookKeeperConstants.java
index 3bbda1c..f799314 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/BookKeeperConstants.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/BookKeeperConstants.java
@@ -18,7 +18,7 @@
package org.apache.bookkeeper.util;
/**
- * This class contains constants used in BookKeeper
+ * This class contains constants used in BookKeeper.
*/
public class BookKeeperConstants {
@@ -29,10 +29,10 @@ public class BookKeeperConstants {
public static final String COLON = ":";
public static final String VERSION_FILENAME = "VERSION";
public static final String BOOKIE_STATUS_FILENAME = "BOOKIE_STATUS";
- public final static String PASSWD = "passwd";
+ public static final String PASSWD = "passwd";
public static final String CURRENT_DIR = "current";
public static final String READONLY = "readonly";
-
+
// //////////////////////////
// ///// Znodes//////////////
// //////////////////////////
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DaemonThreadFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DaemonThreadFactory.java
index ad805cf..cb8caae 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DaemonThreadFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DaemonThreadFactory.java
@@ -18,9 +18,12 @@
package org.apache.bookkeeper.util;
-import java.util.concurrent.ThreadFactory;
import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+/**
+ * Daemon thread factory.
+ */
public class DaemonThreadFactory implements ThreadFactory {
private ThreadFactory defaultThreadFactory =
Executors.defaultThreadFactory();
private int priority = Thread.NORM_PRIORITY;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DirectMemoryUtils.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DirectMemoryUtils.java
index 9f82bb2..8a5362a 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DirectMemoryUtils.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DirectMemoryUtils.java
@@ -28,18 +28,21 @@ import java.lang.reflect.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * DirectMemory Utility.
+ */
public class DirectMemoryUtils {
/**
* Returns the max configured size of direct memory for the JVM process.
*
- * Direct memory can be specified with the flag
<code>-XX:MaxDirectMemorySize=8G</code> on the command line. If not
- * specified, the default value will be set to the max size of the JVM
heap.
+ * <p>Direct memory can be specified with the flag
<code>-XX:MaxDirectMemorySize=8G</code> on the command line.
+ * If not specified, the default value will be set to the max size of the
JVM heap.
*/
public static long maxDirectMemory() {
try {
- Class<?> VM = Class.forName("sun.misc.VM");
- Method maxDirectMemory = VM.getDeclaredMethod("maxDirectMemory");
+ Class<?> vm = Class.forName("sun.misc.VM");
+ Method maxDirectMemory = vm.getDeclaredMethod("maxDirectMemory");
Object result = maxDirectMemory.invoke(null, (Object[]) null);
checkNotNull(result);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DiskChecker.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DiskChecker.java
index 26610fd..01f4767 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DiskChecker.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DiskChecker.java
@@ -18,6 +18,8 @@
package org.apache.bookkeeper.util;
+import com.google.common.annotations.VisibleForTesting;
+
import java.io.File;
import java.io.IOException;
import java.nio.file.FileStore;
@@ -26,12 +28,11 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import com.google.common.annotations.VisibleForTesting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Class that provides utility functions for checking disk problems
+ * Class that provides utility functions for checking disk problems.
*/
public class DiskChecker {
@@ -40,12 +41,18 @@ public class DiskChecker {
private float diskUsageThreshold;
private float diskUsageWarnThreshold;
+ /**
+ * A general marker for disk-related exceptions.
+ */
public abstract static class DiskException extends IOException {
public DiskException(String msg) {
super(msg);
}
}
+ /**
+ * A disk error exception.
+ */
public static class DiskErrorException extends DiskException {
private static final long serialVersionUID = 9091606022449761729L;
@@ -54,6 +61,9 @@ public class DiskChecker {
}
}
+ /**
+ * An out-of-space disk exception.
+ */
public static class DiskOutOfSpaceException extends DiskException {
private static final long serialVersionUID = 160898797915906860L;
@@ -69,6 +79,9 @@ public class DiskChecker {
}
}
+ /**
+ * A disk warn threshold exception.
+ */
public static class DiskWarnThresholdException extends DiskException {
private static final long serialVersionUID = -1629284987500841657L;
@@ -150,7 +163,7 @@ public class DiskChecker {
LOG.warn("Space left on device {} : {}, Used space fraction:
{} < WarnThreshold {}.",
new Object[] { dir, usableSpace, used,
diskUsageThreshold });
throw new DiskWarnThresholdException("Space left on device:"
- + usableSpace + " Used space fraction:" + used +" <
WarnThreshold:" + diskUsageWarnThreshold,
+ + usableSpace + " Used space fraction:" + used + " <
WarnThreshold:" + diskUsageWarnThreshold,
used);
}
return used;
@@ -165,7 +178,7 @@ public class DiskChecker {
* in all of the ledger directories put together.
*
* @return totalDiskSpace in bytes
- * @throws IOException
+ * @throws IOException
*/
public long getTotalFreeSpace(List<File> dirs) throws IOException {
long totalFreeSpace = 0;
@@ -184,7 +197,7 @@ public class DiskChecker {
* in all of the ledger directories put together.
*
* @return freeDiskSpace in bytes
- * @throws IOException
+ * @throws IOException
*/
public long getTotalDiskSpace(List<File> dirs) throws IOException {
long totalDiskSpace = 0;
@@ -197,14 +210,14 @@ public class DiskChecker {
}
return totalDiskSpace;
}
-
+
/**
- * calculates and returns the disk usage factor in the provided list of
dirs
- *
+ * calculates and returns the disk usage factor in the provided list of
dirs.
+ *
* @param dirs
* list of directories
* @return disk usage factor in the provided list of dirs
- * @throws IOException
+ * @throws IOException
*/
public float getTotalDiskUsage(List<File> dirs) throws IOException {
if (dirs == null || dirs.isEmpty()) {
@@ -217,7 +230,7 @@ public class DiskChecker {
}
/**
- * Create the directory if it doesn't exist and
+ * Create the directory if it doesn't exist.
*
* @param dir
* Directory to check for the disk error/full.
@@ -231,25 +244,29 @@ public class DiskChecker {
public float checkDir(File dir) throws DiskErrorException,
DiskOutOfSpaceException, DiskWarnThresholdException {
float usage = checkDiskFull(dir);
- if (!mkdirsWithExistsCheck(dir))
+ if (!mkdirsWithExistsCheck(dir)) {
throw new DiskErrorException("can not create directory: "
+ dir.toString());
+ }
- if (!dir.isDirectory())
+ if (!dir.isDirectory()) {
throw new DiskErrorException("not a directory: " + dir.toString());
+ }
- if (!dir.canRead())
+ if (!dir.canRead()) {
throw new DiskErrorException("directory is not readable: "
+ dir.toString());
+ }
- if (!dir.canWrite())
+ if (!dir.canWrite()) {
throw new DiskErrorException("directory is not writable: "
+ dir.toString());
+ }
return usage;
}
/**
- * Set the disk space threshold
+ * Set the disk space threshold.
*
* @param diskSpaceThreshold
*/
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DoubleByteBuf.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DoubleByteBuf.java
index 15eb263..d3ae746 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DoubleByteBuf.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/DoubleByteBuf.java
@@ -17,6 +17,17 @@
*/
package org.apache.bookkeeper.util;
+import io.netty.buffer.AbstractReferenceCountedByteBuf;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.PooledByteBufAllocator;
+import io.netty.buffer.Unpooled;
+import io.netty.util.Recycler;
+import io.netty.util.Recycler.Handle;
+import io.netty.util.ResourceLeakDetector;
+import io.netty.util.ResourceLeakDetectorFactory;
+import io.netty.util.ResourceLeakTracker;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -30,17 +41,6 @@ import java.nio.channels.ScatteringByteChannel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import io.netty.buffer.AbstractReferenceCountedByteBuf;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.PooledByteBufAllocator;
-import io.netty.buffer.Unpooled;
-import io.netty.util.Recycler;
-import io.netty.util.Recycler.Handle;
-import io.netty.util.ResourceLeakDetector;
-import io.netty.util.ResourceLeakDetectorFactory;
-import io.netty.util.ResourceLeakTracker;
-
/**
* ByteBuf that holds 2 buffers. Similar to {@see CompositeByteBuf} but
doesn't allocate list to hold them.
*/
@@ -418,23 +418,23 @@ public final class DoubleByteBuf extends
AbstractReferenceCountedByteBuf {
private static final Constructor<ByteBuf>
advancedLeakAwareByteBufConstructor;
static {
- Constructor<ByteBuf> _simpleLeakAwareByteBufConstructor = null;
- Constructor<ByteBuf> _advancedLeakAwareByteBufConstructor = null;
+ Constructor<ByteBuf> tmpSimpleLeakAwareByteBufConstructor = null;
+ Constructor<ByteBuf> tmpAdvancedLeakAwareByteBufConstructor = null;
try {
Class<?> simpleLeakAwareByteBufClass =
Class.forName("io.netty.buffer.SimpleLeakAwareByteBuf");
- _simpleLeakAwareByteBufConstructor = (Constructor<ByteBuf>)
simpleLeakAwareByteBufClass
+ tmpSimpleLeakAwareByteBufConstructor = (Constructor<ByteBuf>)
simpleLeakAwareByteBufClass
.getDeclaredConstructor(ByteBuf.class,
ResourceLeakTracker.class);
- _simpleLeakAwareByteBufConstructor.setAccessible(true);
+ tmpSimpleLeakAwareByteBufConstructor.setAccessible(true);
Class<?> advancedLeakAwareByteBufClass =
Class.forName("io.netty.buffer.AdvancedLeakAwareByteBuf");
- _advancedLeakAwareByteBufConstructor = (Constructor<ByteBuf>)
advancedLeakAwareByteBufClass
+ tmpAdvancedLeakAwareByteBufConstructor = (Constructor<ByteBuf>)
advancedLeakAwareByteBufClass
.getDeclaredConstructor(ByteBuf.class,
ResourceLeakTracker.class);
- _advancedLeakAwareByteBufConstructor.setAccessible(true);
+ tmpAdvancedLeakAwareByteBufConstructor.setAccessible(true);
} catch (Throwable t) {
log.error("Failed to use reflection to enable leak detection", t);
} finally {
- simpleLeakAwareByteBufConstructor =
_simpleLeakAwareByteBufConstructor;
- advancedLeakAwareByteBufConstructor =
_advancedLeakAwareByteBufConstructor;
+ simpleLeakAwareByteBufConstructor =
tmpSimpleLeakAwareByteBufConstructor;
+ advancedLeakAwareByteBufConstructor =
tmpAdvancedLeakAwareByteBufConstructor;
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/EntryFormatter.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/EntryFormatter.java
index 8ad0e12..eae5f58 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/EntryFormatter.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/EntryFormatter.java
@@ -27,11 +27,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Formatter to format an entry
+ * Formatter to format an entry.
*/
public abstract class EntryFormatter {
- private final static Logger LOG =
LoggerFactory.getLogger(EntryFormatter.class);
+ private static final Logger LOG =
LoggerFactory.getLogger(EntryFormatter.class);
protected Configuration conf;
@@ -40,7 +40,7 @@ public abstract class EntryFormatter {
}
/**
- * Format an entry into a readable format
+ * Format an entry into a readable format.
*
* @param data
* Data Payload
@@ -48,14 +48,14 @@ public abstract class EntryFormatter {
public abstract void formatEntry(byte[] data);
/**
- * Format an entry from a string into a readable format
+ * Format an entry from a string into a readable format.
*
* @param input
* Input Stream
*/
public abstract void formatEntry(java.io.InputStream input);
- public final static EntryFormatter STRING_FORMATTER = new
StringEntryFormatter();
+ public static final EntryFormatter STRING_FORMATTER = new
StringEntryFormatter();
public static EntryFormatter newEntryFormatter(Configuration conf, String
clsProperty) {
String cls = conf.getString(clsProperty,
StringEntryFormatter.class.getName());
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HardLink.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HardLink.java
index e770bb0..89359c8 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HardLink.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HardLink.java
@@ -20,6 +20,8 @@ package org.apache.hadoop.fs;
*/
package org.apache.bookkeeper.util;
+import static com.google.common.base.Charsets.UTF_8;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
@@ -27,39 +29,40 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
-import static com.google.common.base.Charsets.UTF_8;
-
/**
* Class for creating hardlinks.
* Supports Unix/Linux, WinXP/2003/Vista via Cygwin, and Mac OS X.
- *
- * The HardLink class was formerly a static inner class of FSUtil,
+ *
+ * <p>The HardLink class was formerly a static inner class of FSUtil,
* and the methods provided were blatantly non-thread-safe.
- * To enable volume-parallel Update snapshots, we now provide static
+ * To enable volume-parallel Update snapshots, we now provide static
* threadsafe methods that allocate new buffer string arrays
* upon each call. We also provide an API to hardlink all files in a
- * directory with a single command, which is up to 128 times more
+ * directory with a single command, which is up to 128 times more
* efficient - and minimizes the impact of the extra buffer creations.
*/
-public class HardLink {
+public class HardLink {
+ /**
+ * OS Types.
+ */
public enum OSType {
OS_TYPE_UNIX,
OS_TYPE_WINXP,
OS_TYPE_SOLARIS,
OS_TYPE_MAC
}
-
- public static final OSType osType;
+
+ public static final OSType OS_TYPE;
private static HardLinkCommandGetter getHardLinkCommand;
-
+
public final LinkStats linkStats; //not static
-
- //initialize the command "getters" statically, so can use their
+
+ //initialize the command "getters" statically, so can use their
//methods without instantiating the HardLink object
- static {
- osType = getOSType();
- if (osType == OSType.OS_TYPE_WINXP) {
+ static {
+ OS_TYPE = getOSType();
+ if (OS_TYPE == OSType.OS_TYPE_WINXP) {
// Windows
getHardLinkCommand = new HardLinkCGWin();
} else {
@@ -67,12 +70,12 @@ public class HardLink {
getHardLinkCommand = new HardLinkCGUnix();
//override getLinkCountCommand for the particular Unix variant
//Linux is already set as the default - {"stat","-c%h", null}
- if (osType == OSType.OS_TYPE_MAC) {
- String[] linkCountCmdTemplate = {"stat","-f%l", null};
+ if (OS_TYPE == OSType.OS_TYPE_MAC) {
+ String[] linkCountCmdTemplate = {"stat", "-f%l", null};
+ HardLinkCGUnix.setLinkCountCmdTemplate(linkCountCmdTemplate);
+ } else if (OS_TYPE == OSType.OS_TYPE_SOLARIS) {
+ String[] linkCountCmdTemplate = {"ls", "-l", null};
HardLinkCGUnix.setLinkCountCmdTemplate(linkCountCmdTemplate);
- } else if (osType == OSType.OS_TYPE_SOLARIS) {
- String[] linkCountCmdTemplate = {"ls","-l", null};
- HardLinkCGUnix.setLinkCountCmdTemplate(linkCountCmdTemplate);
}
}
}
@@ -80,70 +83,66 @@ public class HardLink {
public HardLink() {
linkStats = new LinkStats();
}
-
- static private OSType getOSType() {
+
+ private static OSType getOSType() {
String osName = System.getProperty("os.name");
- if (osName.contains("Windows") &&
- (osName.contains("XP")
- || osName.contains("2003")
+ if (osName.contains("Windows") && (osName.contains("XP")
+ || osName.contains("2003")
|| osName.contains("Vista")
|| osName.contains("Windows_7")
- || osName.contains("Windows 7")
+ || osName.contains("Windows 7")
|| osName.contains("Windows7"))) {
return OSType.OS_TYPE_WINXP;
- }
- else if (osName.contains("SunOS")
+ } else if (osName.contains("SunOS")
|| osName.contains("Solaris")) {
return OSType.OS_TYPE_SOLARIS;
- }
- else if (osName.contains("Mac")) {
+ } else if (osName.contains("Mac")) {
return OSType.OS_TYPE_MAC;
- }
- else {
+ } else {
return OSType.OS_TYPE_UNIX;
}
}
-
+
/**
- * This abstract class bridges the OS-dependent implementations of the
+ * This abstract class bridges the OS-dependent implementations of the
* needed functionality for creating hardlinks and querying link counts.
- * The particular implementation class is chosen during
+ * The particular implementation class is chosen during
* static initialization phase of the HardLink class.
* The "getter" methods construct shell command strings for various purposes.
*/
- private static abstract class HardLinkCommandGetter {
+ private abstract static class HardLinkCommandGetter {
/**
* Get the command string needed to hardlink a bunch of files from
* a single source directory into a target directory. The source directory
* is not specified here, but the command will be executed using the source
* directory as the "current working directory" of the shell invocation.
- *
+ *
* @param fileBaseNames - array of path-less file names, relative
* to the source directory
* @param linkDir - target directory where the hardlinks will be put
* @return - an array of Strings suitable for use as a single shell command
- * with {@link Runtime.exec()}
+ * with {@code Runtime.exec()}
* @throws IOException - if any of the file or path names misbehave
*/
- abstract String[] linkMult(String[] fileBaseNames, File linkDir)
+ abstract String[] linkMult(String[] fileBaseNames, File linkDir)
throws IOException;
-
+
/**
- * Get the command string needed to hardlink a single file
+ * Get the command string needed to hardlink a single file.
*/
abstract String[] linkOne(File file, File linkName) throws IOException;
-
+
/**
- * Get the command string to query the hardlink count of a file
+ * Get the command string to query the hardlink count of a file.
*/
abstract String[] linkCount(File file) throws IOException;
-
+
/**
* Calculate the total string length of the shell command
* resulting from execution of linkMult, plus the length of the
- * source directory name (which will also be provided to the shell)
- *
+ * source directory name (which will also be provided to the shell).
+ *
* @param fileDir - source directory, parent of fileBaseNames
* @param fileBaseNames - array of path-less file names, relative
* to the source directory
@@ -152,61 +151,61 @@ public class HardLink {
* @throws IOException
*/
abstract int getLinkMultArgLength(
- File fileDir, String[] fileBaseNames, File linkDir)
+ File fileDir, String[] fileBaseNames, File linkDir)
throws IOException;
-
+
/**
* Get the maximum allowed string length of a shell command on this OS,
* which is just the documented minimum guaranteed supported command
* length - aprx. 32KB for Unix, and 8KB for Windows.
*/
- abstract int getMaxAllowedCmdArgLength();
+ abstract int getMaxAllowedCmdArgLength();
}
-
+
/**
- * Implementation of HardLinkCommandGetter class for Unix
+ * Implementation of HardLinkCommandGetter class for Unix.
*/
static class HardLinkCGUnix extends HardLinkCommandGetter {
private static String[] hardLinkCommand = {"ln", null, null};
private static String[] hardLinkMultPrefix = {"ln"};
private static String[] hardLinkMultSuffix = {null};
- private static String[] getLinkCountCommand = {"stat","-c%h", null};
+ private static String[] getLinkCountCommand = {"stat", "-c%h", null};
//Unix guarantees at least 32K bytes cmd length.
//Subtract another 64b to allow for Java 'exec' overhead
- private static final int maxAllowedCmdArgLength = 32*1024 - 65;
-
- private static synchronized
+ private static final int maxAllowedCmdArgLength = 32 * 1024 - 65;
+
+ private static synchronized
void setLinkCountCmdTemplate(String[] template) {
- //May update this for specific unix variants,
+ //May update this for specific unix variants,
//after static initialization phase
getLinkCountCommand = template;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkOne(java.io.File,
java.io.File)
*/
@Override
- String[] linkOne(File file, File linkName)
+ String[] linkOne(File file, File linkName)
throws IOException {
String[] buf = new String[hardLinkCommand.length];
System.arraycopy(hardLinkCommand, 0, buf, 0, hardLinkCommand.length);
//unix wants argument order: "ln <existing> <new>"
- buf[1] = makeShellPath(file);
+ buf[1] = makeShellPath(file);
buf[2] = makeShellPath(linkName);
return buf;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkMult(java.lang.String[],
java.io.File)
*/
@Override
- String[] linkMult(String[] fileBaseNames, File linkDir)
+ String[] linkMult(String[] fileBaseNames, File linkDir)
throws IOException {
- String[] buf = new String[fileBaseNames.length
- + hardLinkMultPrefix.length
+ String[] buf = new String[fileBaseNames.length
+ + hardLinkMultPrefix.length
+ hardLinkMultSuffix.length];
- int mark=0;
- System.arraycopy(hardLinkMultPrefix, 0, buf, mark,
+ int mark = 0;
+ System.arraycopy(hardLinkMultPrefix, 0, buf, mark,
hardLinkMultPrefix.length);
mark += hardLinkMultPrefix.length;
System.arraycopy(fileBaseNames, 0, buf, mark, fileBaseNames.length);
@@ -214,25 +213,25 @@ public class HardLink {
buf[mark] = makeShellPath(linkDir);
return buf;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkCount(java.io.File)
*/
@Override
- String[] linkCount(File file)
+ String[] linkCount(File file)
throws IOException {
String[] buf = new String[getLinkCountCommand.length];
- System.arraycopy(getLinkCountCommand, 0, buf, 0,
+ System.arraycopy(getLinkCountCommand, 0, buf, 0,
getLinkCountCommand.length);
buf[getLinkCountCommand.length - 1] = makeShellPath(file);
return buf;
}
-
+
/*
- * @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getLinkMultArgLength(java.io.File,
java.lang.String[], java.io.File)
+ * @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getLinkMultArgLength(File,
String[], File)
*/
@Override
- int getLinkMultArgLength(File fileDir, String[] fileBaseNames, File
linkDir)
+ int getLinkMultArgLength(File fileDir, String[] fileBaseNames, File
linkDir)
throws IOException{
int sum = 0;
for (String x : fileBaseNames) {
@@ -245,7 +244,7 @@ public class HardLink {
sum += 3; //length("ln") + 1
return sum;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getMaxAllowedCmdArgLength()
*/
@@ -254,79 +253,78 @@ public class HardLink {
return maxAllowedCmdArgLength;
}
}
-
-
+
/**
- * Implementation of HardLinkCommandGetter class for Windows
- *
- * Note that the linkCount shell command for Windows is actually
+ * Implementation of HardLinkCommandGetter class for Windows.
+ *
+ * <p>Note that the linkCount shell command for Windows is actually
* a Cygwin shell command, and depends on ${cygwin}/bin
* being in the Windows PATH environment variable, so
* stat.exe can be found.
*/
static class HardLinkCGWin extends HardLinkCommandGetter {
//The Windows command getter impl class and its member fields are
- //package-private ("default") access instead of "private" to assist
+ //package-private ("default") access instead of "private" to assist
//unit testing (sort of) on non-Win servers
static String[] hardLinkCommand = {
- "fsutil","hardlink","create", null, null};
+ "fsutil", "hardlink", "create", null, null};
static String[] hardLinkMultPrefix = {
- "cmd","/q","/c","for", "%f", "in", "("};
+ "cmd", "/q", "/c", "for", "%f", "in", "("};
static String hardLinkMultDir = "\\%f";
static String[] hardLinkMultSuffix = {
- ")", "do", "fsutil", "hardlink", "create", null,
+ ")", "do", "fsutil", "hardlink", "create", null,
"%f", "1>NUL"};
- static String[] getLinkCountCommand = {"stat","-c%h", null};
+ static String[] getLinkCountCommand = {"stat", "-c%h", null};
//Windows guarantees only 8K - 1 bytes cmd length.
//Subtract another 64b to allow for Java 'exec' overhead
- static final int maxAllowedCmdArgLength = 8*1024 - 65;
+ private static final int maxAllowedCmdArgLength = 8 * 1024 - 65;
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkOne(java.io.File,
java.io.File)
*/
@Override
- String[] linkOne(File file, File linkName)
+ String[] linkOne(File file, File linkName)
throws IOException {
String[] buf = new String[hardLinkCommand.length];
System.arraycopy(hardLinkCommand, 0, buf, 0, hardLinkCommand.length);
//windows wants argument order: "create <new> <existing>"
- buf[4] = file.getCanonicalPath();
+ buf[4] = file.getCanonicalPath();
buf[3] = linkName.getCanonicalPath();
return buf;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkMult(java.lang.String[],
java.io.File)
*/
@Override
- String[] linkMult(String[] fileBaseNames, File linkDir)
+ String[] linkMult(String[] fileBaseNames, File linkDir)
throws IOException {
- String[] buf = new String[fileBaseNames.length
- + hardLinkMultPrefix.length
+ String[] buf = new String[fileBaseNames.length
+ + hardLinkMultPrefix.length
+ hardLinkMultSuffix.length];
String td = linkDir.getCanonicalPath() + hardLinkMultDir;
- int mark=0;
- System.arraycopy(hardLinkMultPrefix, 0, buf, mark,
+ int mark = 0;
+ System.arraycopy(hardLinkMultPrefix, 0, buf, mark,
hardLinkMultPrefix.length);
mark += hardLinkMultPrefix.length;
System.arraycopy(fileBaseNames, 0, buf, mark, fileBaseNames.length);
mark += fileBaseNames.length;
- System.arraycopy(hardLinkMultSuffix, 0, buf, mark,
+ System.arraycopy(hardLinkMultSuffix, 0, buf, mark,
hardLinkMultSuffix.length);
mark += hardLinkMultSuffix.length;
buf[mark - 3] = td;
return buf;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#linkCount(java.io.File)
*/
@Override
- String[] linkCount(File file)
+ String[] linkCount(File file)
throws IOException {
String[] buf = new String[getLinkCountCommand.length];
- System.arraycopy(getLinkCountCommand, 0, buf, 0,
+ System.arraycopy(getLinkCountCommand, 0, buf, 0,
getLinkCountCommand.length);
//The linkCount command is actually a Cygwin shell command,
//not a Windows shell command, so we should use "makeShellPath()"
@@ -337,27 +335,26 @@ public class HardLink {
buf[getLinkCountCommand.length - 1] = file.getCanonicalPath();
return buf;
}
-
+
/*
- * @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getLinkMultArgLength(java.io.File,
java.lang.String[], java.io.File)
+ * @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getLinkMultArgLength(File,
String[], File)
*/
@Override
- int getLinkMultArgLength(File fileDir, String[] fileBaseNames, File
linkDir)
+ int getLinkMultArgLength(File fileDir, String[] fileBaseNames, File
linkDir)
throws IOException {
int sum = 0;
for (String x : fileBaseNames) {
// add 1 to account for terminal null or delimiter space
sum += 1 + ((x == null) ? 0 : x.length());
}
- sum += 2 + fileDir.getCanonicalPath().length() +
- linkDir.getCanonicalPath().length();
- //add the fixed overhead of the hardLinkMult command
+ sum += 2 + fileDir.getCanonicalPath().length() +
linkDir.getCanonicalPath().length();
+ //add the fixed overhead of the hardLinkMult command
//(prefix, suffix, and Dir suffix)
sum += ("cmd.exe /q /c for %f in ( ) do "
+ "fsutil hardlink create \\%f %f 1>NUL ").length();
return sum;
}
-
+
/*
* @see
org.apache.hadoop.fs.HardLink.HardLinkCommandGetter#getMaxAllowedCmdArgLength()
*/
@@ -366,16 +363,15 @@ public class HardLink {
return maxAllowedCmdArgLength;
}
}
-
-
+
/**
- * Calculate the nominal length of all contributors to the total
- * commandstring length, including fixed overhead of the OS-dependent
+ * Calculate the nominal length of all contributors to the total
+ * commandstring length, including fixed overhead of the OS-dependent
* command. It's protected rather than private, to assist unit testing,
- * but real clients are not expected to need it -- see the way
+ * but real clients are not expected to need it -- see the way
* createHardLinkMult() uses it internally so the user doesn't need to worry
* about it.
- *
+ *
* @param fileDir - source directory, parent of fileBaseNames
* @param fileBaseNames - array of path-less file names, relative
* to the source directory
@@ -384,12 +380,12 @@ public class HardLink {
* @throws IOException
*/
protected static int getLinkMultArgLength(
- File fileDir, String[] fileBaseNames, File linkDir)
+ File fileDir, String[] fileBaseNames, File linkDir)
throws IOException {
- return getHardLinkCommand.getLinkMultArgLength(fileDir,
+ return getHardLinkCommand.getLinkMultArgLength(fileDir,
fileBaseNames, linkDir);
}
-
+
/**
* Return this private value for use by unit tests.
* Shell commands are not allowed to have a total string length
@@ -398,7 +394,7 @@ public class HardLink {
protected static int getMaxAllowedCmdArgLength() {
return getHardLinkCommand.getMaxAllowedCmdArgLength();
}
-
+
/*
* ****************************************************
* Complexity is above. User-visible functionality is below
@@ -406,11 +402,11 @@ public class HardLink {
*/
/**
- * Creates a hardlink
+ * Creates a hardlink.
* @param file - existing source file
* @param linkName - desired target link file
*/
- public static void createHardLink(File file, File linkName)
+ public static void createHardLink(File file, File linkName)
throws IOException {
if (file == null) {
throw new IOException(
@@ -420,17 +416,21 @@ public class HardLink {
throw new IOException(
"invalid arguments to createHardLink: link name is null");
}
- // construct and execute shell command
+ // construct and execute shell command
String[] hardLinkCommand = getHardLinkCommand.linkOne(file, linkName);
Process process = Runtime.getRuntime().exec(hardLinkCommand);
try {
if (process.waitFor() != 0) {
String errMsg = new BufferedReader(new InputStreamReader(
process.getInputStream(),
UTF_8)).readLine();
- if (errMsg == null) errMsg = "";
+ if (errMsg == null) {
+ errMsg = "";
+ }
String inpMsg = new BufferedReader(new InputStreamReader(
process.getErrorStream(),
UTF_8)).readLine();
- if (inpMsg == null) inpMsg = "";
+ if (inpMsg == null) {
+ inpMsg = "";
+ }
throw new IOException(errMsg + inpMsg);
}
} catch (InterruptedException e) {
@@ -444,19 +444,19 @@ public class HardLink {
* Creates hardlinks from multiple existing files within one parent
* directory, into one target directory.
* @param parentDir - directory containing source files
- * @param fileBaseNames - list of path-less file names, as returned by
+ * @param fileBaseNames - list of path-less file names, as returned by
* parentDir.list()
* @param linkDir - where the hardlinks should be put. It must already
exist.
- *
+ *
* If the list of files is too long (overflows maxAllowedCmdArgLength),
* we will automatically split it into multiple invocations of the
* underlying method.
*/
- public static void createHardLinkMult(File parentDir, String[]
fileBaseNames,
+ public static void createHardLinkMult(File parentDir, String[] fileBaseNames,
File linkDir) throws IOException {
//This is the public method all non-test clients are expected to use.
//Normal case - allow up to maxAllowedCmdArgLength characters in the cmd
- createHardLinkMult(parentDir, fileBaseNames, linkDir,
+ createHardLinkMult(parentDir, fileBaseNames, linkDir,
getHardLinkCommand.getMaxAllowedCmdArgLength());
}
@@ -467,8 +467,8 @@ public class HardLink {
* the file list had to be split into.
* Non-test clients are expected to call the public method instead.
*/
- protected static int createHardLinkMult(File parentDir,
- String[] fileBaseNames, File linkDir, int maxLength)
+ protected static int createHardLinkMult(File parentDir,
+ String[] fileBaseNames, File linkDir, int maxLength)
throws IOException {
if (parentDir == null) {
throw new IOException(
@@ -484,9 +484,9 @@ public class HardLink {
+ "filename list can be empty but not null");
}
if (fileBaseNames.length == 0) {
- //the OS cmds can't handle empty list of filenames,
+ //the OS cmds can't handle empty list of filenames,
//but it's legal, so just return.
- return 0;
+ return 0;
}
if (!linkDir.exists()) {
throw new FileNotFoundException(linkDir + " not found.");
@@ -496,29 +496,33 @@ public class HardLink {
int callCount = 0;
if (getLinkMultArgLength(parentDir, fileBaseNames, linkDir) > maxLength
&& fileBaseNames.length > 1) {
- String[] list1 = Arrays.copyOf(fileBaseNames, fileBaseNames.length/2);
+ String[] list1 = Arrays.copyOf(fileBaseNames, fileBaseNames.length / 2);
callCount += createHardLinkMult(parentDir, list1, linkDir, maxLength);
- String[] list2 = Arrays.copyOfRange(fileBaseNames,
fileBaseNames.length/2,
+ String[] list2 = Arrays.copyOfRange(fileBaseNames, fileBaseNames.length
/ 2,
fileBaseNames.length);
- callCount += createHardLinkMult(parentDir, list2, linkDir, maxLength);
+ callCount += createHardLinkMult(parentDir, list2, linkDir, maxLength);
return callCount;
} else {
callCount = 1;
}
-
+
// construct and execute shell command
- String[] hardLinkCommand = getHardLinkCommand.linkMult(fileBaseNames,
+ String[] hardLinkCommand = getHardLinkCommand.linkMult(fileBaseNames,
linkDir);
- Process process = Runtime.getRuntime().exec(hardLinkCommand, null,
+ Process process = Runtime.getRuntime().exec(hardLinkCommand, null,
parentDir);
try {
if (process.waitFor() != 0) {
String errMsg = new BufferedReader(new InputStreamReader(
process.getInputStream(),
UTF_8)).readLine();
- if (errMsg == null) errMsg = "";
+ if (errMsg == null) {
+ errMsg = "";
+ }
String inpMsg = new BufferedReader(new InputStreamReader(
process.getErrorStream(),
UTF_8)).readLine();
- if (inpMsg == null) inpMsg = "";
+ if (inpMsg == null) {
+ inpMsg = "";
+ }
throw new IOException(errMsg + inpMsg);
}
} catch (InterruptedException e) {
@@ -561,7 +565,7 @@ public class HardLink {
if (inpMsg == null || exitValue != 0) {
throw createIOException(fileName, inpMsg, errMsg, exitValue, null);
}
- if (osType == OSType.OS_TYPE_SOLARIS) {
+ if (OS_TYPE == OSType.OS_TYPE_SOLARIS) {
String[] result = inpMsg.split("\\s+");
return Integer.parseInt(result[1]);
} else {
@@ -573,68 +577,71 @@ public class HardLink {
throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
} finally {
process.destroy();
- if (in != null) in.close();
- if (err != null) err.close();
+ if (in != null) {
+ in.close();
+ }
+ if (err != null) {
+ err.close();
+ }
}
}
-
+
/* Create an IOException for failing to get link count. */
private static IOException createIOException(File f, String message,
String error, int exitvalue, Exception cause) {
-
+
final String winErrMsg = "; Windows errors in getLinkCount are often due "
+ "to Cygwin misconfiguration";
final String s = "Failed to get link count on file " + f
+ ": message=" + message
+ "; error=" + error
- + ((osType == OSType.OS_TYPE_WINXP) ? winErrMsg : "")
+ + ((OS_TYPE == OSType.OS_TYPE_WINXP) ? winErrMsg : "")
+ "; exit value=" + exitvalue;
return (cause == null) ? new IOException(s) : new IOException(s, cause);
}
-
-
+
/**
* HardLink statistics counters and methods.
* Not multi-thread safe, obviously.
* Init is called during HardLink instantiation, above.
- *
- * These are intended for use by knowledgeable clients, not internally,
+ *
+ * <p>These are intended for use by knowledgeable clients, not internally,
* because many of the internal methods are static and can't update these
* per-instance counters.
*/
public static class LinkStats {
- public int countDirs = 0;
- public int countSingleLinks = 0;
- public int countMultLinks = 0;
- public int countFilesMultLinks = 0;
- public int countEmptyDirs = 0;
+ public int countDirs = 0;
+ public int countSingleLinks = 0;
+ public int countMultLinks = 0;
+ public int countFilesMultLinks = 0;
+ public int countEmptyDirs = 0;
public int countPhysicalFileCopies = 0;
-
+
public void clear() {
- countDirs = 0;
- countSingleLinks = 0;
- countMultLinks = 0;
- countFilesMultLinks = 0;
- countEmptyDirs = 0;
+ countDirs = 0;
+ countSingleLinks = 0;
+ countMultLinks = 0;
+ countFilesMultLinks = 0;
+ countEmptyDirs = 0;
countPhysicalFileCopies = 0;
}
-
+
public String report() {
- return "HardLinkStats: " + countDirs + " Directories, including "
- + countEmptyDirs + " Empty Directories, "
- + countSingleLinks
- + " single Link operations, " + countMultLinks
- + " multi-Link operations, linking " + countFilesMultLinks
- + " files, total " + (countSingleLinks + countFilesMultLinks)
- + " linkable files. Also physically copied "
+ return "HardLinkStats: " + countDirs + " Directories, including "
+ + countEmptyDirs + " Empty Directories, "
+ + countSingleLinks
+ + " single Link operations, " + countMultLinks
+ + " multi-Link operations, linking " + countFilesMultLinks
+ + " files, total " + (countSingleLinks + countFilesMultLinks)
+ + " linkable files. Also physically copied "
+ countPhysicalFileCopies + " other files.";
}
}
/**
* Convert a os-native filename to a path that works for the shell.
- * @param filename The filename to convert
+ * @param file The file to convert
* @return The unix pathname
* @throws IOException on windows, there can be problems with the subprocess
*/
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HexDumpEntryFormatter.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HexDumpEntryFormatter.java
index d900e60..7b831a2 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HexDumpEntryFormatter.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/HexDumpEntryFormatter.java
@@ -25,6 +25,9 @@ import java.io.IOException;
import org.apache.commons.io.HexDump;
+/**
+ * A hex dump entry formatter.
+ */
public class HexDumpEntryFormatter extends EntryFormatter {
@Override
public void formatEntry(byte[] data) {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/JsonUtil.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/JsonUtil.java
index 24fc107..e5e7142 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/JsonUtil.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/JsonUtil.java
@@ -45,6 +45,9 @@ public class JsonUtil {
}
}
+ /**
+ * A JSON parsing exception.
+ */
public static class ParseJsonException extends Exception {
public ParseJsonException(String message) {
super(message);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/LocalBookKeeper.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/LocalBookKeeper.java
index 02f779e..67ac8c7 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/LocalBookKeeper.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/LocalBookKeeper.java
@@ -17,6 +17,8 @@
*/
package org.apache.bookkeeper.util;
+import static com.google.common.base.Charsets.UTF_8;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -27,27 +29,26 @@ import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
-import org.apache.bookkeeper.client.BKException;
-import org.apache.bookkeeper.shims.zk.ZooKeeperServerShim;
-import org.apache.bookkeeper.shims.zk.ZooKeeperServerShimFactory;
-import org.apache.bookkeeper.zookeeper.ZooKeeperClient;
-import org.apache.commons.io.FileUtils;
import org.apache.bookkeeper.bookie.BookieException;
+import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.proto.BookieServer;
import
org.apache.bookkeeper.replication.ReplicationException.CompatibilityException;
import
org.apache.bookkeeper.replication.ReplicationException.UnavailableException;
-import org.apache.bookkeeper.stats.StatsLogger;
-import org.apache.bookkeeper.stats.StatsProvider;
+import org.apache.bookkeeper.shims.zk.ZooKeeperServerShim;
+import org.apache.bookkeeper.shims.zk.ZooKeeperServerShimFactory;
import org.apache.bookkeeper.tls.SecurityException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.bookkeeper.zookeeper.ZooKeeperClient;
+import org.apache.commons.io.FileUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs.Ids;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import static com.google.common.base.Charsets.UTF_8;
-
+/**
+ * Local Bookkeeper.
+ */
public class LocalBookKeeper {
protected static final Logger LOG =
LoggerFactory.getLogger(LocalBookKeeper.class);
public static final int CONNECTION_TIMEOUT = 30000;
@@ -68,10 +69,10 @@ public class LocalBookKeeper {
LOG.info("Running {} bookie(s) on zkServer {}.", this.numberOfBookies);
}
- static String ZooKeeperDefaultHost = "127.0.0.1";
- static int ZooKeeperDefaultPort = 2181;
- static int zkSessionTimeOut = 5000;
- static Integer BookieDefaultInitialPort = 5000;
+ private static String zooKeeperDefaultHost = "127.0.0.1";
+ private static int zooKeeperDefaultPort = 2181;
+ private static int zkSessionTimeOut = 5000;
+ private static Integer bookieDefaultInitialPort = 5000;
//BookKeeper variables
File journalDirs[];
@@ -170,7 +171,7 @@ public class LocalBookKeeper {
bs = new BookieServer[numberOfBookies];
bsConfs = new ServerConfiguration[numberOfBookies];
- for(int i = 0; i < numberOfBookies; i++) {
+ for (int i = 0; i < numberOfBookies; i++) {
if (null == baseConf.getJournalDirNameWithoutDefault()) {
journalDirs[i] = IOUtils.createTempDir("localbookkeeper" +
Integer.toString(i), dirSuffix);
tempDirs.add(journalDirs[i]);
@@ -220,7 +221,7 @@ public class LocalBookKeeper {
if (null == baseConf.getZkServers()) {
bsConfs[i].setZkServers(InetAddress.getLocalHost().getHostAddress() + ":"
- + ZooKeeperDefaultPort);
+ + zooKeeperDefaultPort);
}
@@ -316,7 +317,7 @@ public class LocalBookKeeper {
}
public static void main(String[] args) throws Exception, SecurityException
{
- if(args.length < 1) {
+ if (args.length < 1) {
usage();
System.exit(-1);
}
@@ -336,8 +337,8 @@ public class LocalBookKeeper {
}
}
- startLocalBookiesInternal(conf, ZooKeeperDefaultHost,
ZooKeeperDefaultPort,
- numBookies, true, BookieDefaultInitialPort, false, "test");
+ startLocalBookiesInternal(conf, zooKeeperDefaultHost,
zooKeeperDefaultPort,
+ numBookies, true, bookieDefaultInitialPort, false, "test");
}
private static void usage() {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/NativeIO.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/NativeIO.java
index 2448842..816e197 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/NativeIO.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/NativeIO.java
@@ -18,13 +18,18 @@
package org.apache.bookkeeper.util;
-import java.lang.reflect.Field;
+import com.sun.jna.LastErrorException;
+import com.sun.jna.Native;
+
import java.io.FileDescriptor;
+import java.lang.reflect.Field;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sun.jna.LastErrorException;
-import com.sun.jna.Native;
+/**
+ * Native I/O operations.
+ */
public final class NativeIO {
private static final Logger LOG = LoggerFactory.getLogger(NativeIO.class);
@@ -84,15 +89,12 @@ public final class NativeIO {
/**
* Remove pages from the file system page cache when they wont
- * be accessed again
+ * be accessed again.
*
* @param fd The file descriptor of the source file.
* @param offset The offset within the file.
* @param len The length to be flushed.
- *
- * @throws nothing => Best effort
*/
-
public static void bestEffortRemoveFromPageCache(int fd, long offset, long
len) {
if (!initialized || !fadvisePossible || fd < 0) {
return;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/OrderedSafeExecutor.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/OrderedSafeExecutor.java
index 8df8d5b..db30e55 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/OrderedSafeExecutor.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/OrderedSafeExecutor.java
@@ -32,18 +32,18 @@ import org.slf4j.LoggerFactory;
/**
* This class provides 2 things over the java {@link ScheduledExecutorService}.
*
- * 1. It takes {@link SafeRunnable objects} instead of plain Runnable objects.
+ * <p>1. It takes {@link SafeRunnable objects} instead of plain Runnable
objects.
* This means that exceptions in scheduled tasks wont go unnoticed and will be
* logged.
*
- * 2. It supports submitting tasks with an ordering key, so that tasks
submitted
+ * <p>2. It supports submitting tasks with an ordering key, so that tasks
submitted
* with the same key will always be executed in order, but tasks across
* different keys can be unordered. This retains parallelism while retaining
the
* basic amount of ordering we want (e.g. , per ledger handle). Ordering is
* achieved by hashing the key objects to threads by their {@link #hashCode()}
* method.
*
- * @Deprecated since 4.6.0, in favor of using {@link
org.apache.bookkeeper.common.util.OrderedScheduler}.
+ * <p>Note: deprecated since 4.6.0, in favor of using {@link
org.apache.bookkeeper.common.util.OrderedScheduler}.
*/
public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.OrderedScheduler {
@@ -51,6 +51,9 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
return new Builder();
}
+ /**
+ * A builder class for an OrderedSafeExecutor.
+ */
public static class Builder extends AbstractBuilder<OrderedSafeExecutor> {
public OrderedSafeExecutor build() {
@@ -64,7 +67,7 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
}
/**
- * Constructs Safe executor
+ * Constructs Safe executor.
*
* @param numThreads
* - number of threads
@@ -88,14 +91,14 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
}
/**
- * schedules a one time action to execute
+ * Schedules a one time action to execute.
*/
public void submit(SafeRunnable r) {
super.submit(r);
}
/**
- * schedules a one time action to execute with an ordering guarantee on
the key
+ * Schedules a one time action to execute with an ordering guarantee on
the key.
* @param orderingKey
* @param r
*/
@@ -104,7 +107,7 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
}
/**
- * schedules a one time action to execute with an ordering guarantee on
the key
+ * Schedules a one time action to execute with an ordering guarantee on
the key.
* @param orderingKey
* @param r
*/
@@ -113,7 +116,7 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
}
/**
- * schedules a one time action to execute with an ordering guarantee on
the key
+ * Schedules a one time action to execute with an ordering guarantee on
the key.
* @param orderingKey
* @param r
*/
@@ -127,7 +130,8 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
* @param command - the SafeRunnable to execute
* @param delay - the time from now to delay execution
* @param unit - the time unit of the delay parameter
- * @return a ScheduledFuture representing pending completion of the task
and whose get() method will return null upon completion
+ * @return a ScheduledFuture representing pending completion of the task
and whose get() method
+ * will return null upon completion
*/
public ScheduledFuture<?> schedule(SafeRunnable command, long delay,
TimeUnit unit) {
return super.schedule(command, delay, unit);
@@ -140,7 +144,8 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
* @param command - the SafeRunnable to execute
* @param delay - the time from now to delay execution
* @param unit - the time unit of the delay parameter
- * @return a ScheduledFuture representing pending completion of the task
and whose get() method will return null upon completion
+ * @return a ScheduledFuture representing pending completion of the task
and whose get() method
+ * will return null upon completion
*/
public ScheduledFuture<?> scheduleOrdered(Object orderingKey, SafeRunnable
command, long delay, TimeUnit unit) {
return super.scheduleOrdered(orderingKey, command, delay, unit);
@@ -148,16 +153,16 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
/**
* Creates and executes a periodic action that becomes enabled first after
- * the given initial delay, and subsequently with the given period;
+ * the given initial delay, and subsequently with the given period.
*
- * For more details check scheduleAtFixedRate in interface
ScheduledExecutorService
+ * <p>For more details check scheduleAtFixedRate in interface
ScheduledExecutorService
*
* @param command - the SafeRunnable to execute
* @param initialDelay - the time to delay first execution
* @param period - the period between successive executions
* @param unit - the time unit of the initialDelay and period parameters
* @return a ScheduledFuture representing pending completion of the task,
and whose get()
- * method will throw an exception upon cancellation
+ * method will throw an exception upon cancellation
*/
public ScheduledFuture<?> scheduleAtFixedRate(SafeRunnable command, long
initialDelay, long period, TimeUnit unit) {
return super.scheduleAtFixedRate(command, initialDelay, period, unit);
@@ -165,9 +170,9 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
/**
* Creates and executes a periodic action that becomes enabled first after
- * the given initial delay, and subsequently with the given period;
+ * the given initial delay, and subsequently with the given period.
*
- * For more details check scheduleAtFixedRate in interface
ScheduledExecutorService
+ * <p>For more details check scheduleAtFixedRate in interface
ScheduledExecutorService
*
* @param orderingKey - the key used for ordering
* @param command - the SafeRunnable to execute
@@ -186,7 +191,7 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
* Creates and executes a periodic action that becomes enabled first after
the given initial delay, and subsequently
* with the given delay between the termination of one execution and the
commencement of the next.
*
- * For more details check scheduleWithFixedDelay in interface
ScheduledExecutorService
+ * <p>For more details check scheduleWithFixedDelay in interface
ScheduledExecutorService
*
* @param command - the SafeRunnable to execute
* @param initialDelay - the time to delay first execution
@@ -204,7 +209,7 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
* Creates and executes a periodic action that becomes enabled first after
the given initial delay, and subsequently
* with the given delay between the termination of one execution and the
commencement of the next.
*
- * For more details check scheduleWithFixedDelay in interface
ScheduledExecutorService
+ * <p>For more details check scheduleWithFixedDelay in interface
ScheduledExecutorService
*
* @param orderingKey - the key used for ordering
* @param command - the SafeRunnable to execute
@@ -221,9 +226,9 @@ public class OrderedSafeExecutor extends
org.apache.bookkeeper.common.util.Order
/**
* Generic callback implementation which will run the
- * callback in the thread which matches the ordering key
+ * callback in the thread which matches the ordering key.
*/
- public static abstract class OrderedSafeGenericCallback<T>
+ public abstract static class OrderedSafeGenericCallback<T>
implements GenericCallback<T> {
private static final Logger LOG =
LoggerFactory.getLogger(OrderedSafeGenericCallback.class);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ReflectionUtils.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ReflectionUtils.java
index 6d096a1..6297651 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ReflectionUtils.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ReflectionUtils.java
@@ -27,7 +27,7 @@ import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
/**
- * General Class Reflection Utils
+ * General Class Reflection Utils.
*/
public class ReflectionUtils {
@@ -42,8 +42,8 @@ public class ReflectionUtils {
* @param xface class interface
* @return the class object associated with the class or interface with
the given string name.
*/
- public static <U> Class<? extends U> forName(String className,
- Class<U> xface) {
+ public static <T> Class<? extends T> forName(String className,
+ Class<T> xface) {
// Construct the class
Class<?> theCls;
@@ -91,9 +91,9 @@ public class ReflectionUtils {
* Get the value of the <code>name</code> property as a <code>Class</code>
implementing
* the interface specified by <code>xface</code>.
*
- * If no such property is specified, then <code>defaultValue</code> is
returned.
+ * <p>If no such property is specified, then <code>defaultValue</code> is
returned.
*
- * An exception is thrown if the returned class does not implement the
named interface.
+ * <p>An exception is thrown if the returned class does not implement the
named interface.
*
* @param conf
* Configuration Object.
@@ -108,9 +108,9 @@ public class ReflectionUtils {
* @return property value as a <code>Class</code>, or
<code>defaultValue</code>.
* @throws ConfigurationException
*/
- public static <U> Class<? extends U> getClass(Configuration conf,
- String name, Class<? extends
U> defaultValue,
- Class<U> xface, ClassLoader
classLoader)
+ public static <T> Class<? extends T> getClass(Configuration conf,
+ String name, Class<? extends
T> defaultValue,
+ Class<T> xface, ClassLoader
classLoader)
throws ConfigurationException {
try {
Class<?> theCls = getClass(conf, name, defaultValue, classLoader);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SafeRunnable.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SafeRunnable.java
index 7e56cd1..a03f5fc 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SafeRunnable.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SafeRunnable.java
@@ -19,12 +19,15 @@ package org.apache.bookkeeper.util;
import java.util.function.Consumer;
+/**
+ * A SafeRunnable implementation.
+ */
public abstract class SafeRunnable implements
org.apache.bookkeeper.common.util.SafeRunnable {
/**
- * Utility method to use SafeRunnable from lambdas
- * <p>
- * Eg:
+ * Utility method to use SafeRunnable from lambdas.
+ *
+ * <p>Eg:
* <pre>
* <code>
* executor.submit(SafeRunnable.safeRun(() -> {
@@ -44,9 +47,9 @@ public abstract class SafeRunnable implements
org.apache.bookkeeper.common.util.
/**
* Utility method to use SafeRunnable from lambdas with
- * a custom exception handler
- * <p>
- * Eg:
+ * a custom exception handler.
+ *
+ * <p>Eg:
* <pre>
* <code>
* executor.submit(SafeRunnable.safeRun(() -> {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Shell.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Shell.java
index f9c99e7..a5c4ea1 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Shell.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Shell.java
@@ -36,17 +36,19 @@ import org.apache.commons.logging.LogFactory;
* <code>df</code>. It also offers facilities to gate commands by
* time-intervals.
*/
-abstract public class Shell {
+public abstract class Shell {
public static final Log LOG = LogFactory.getLog(Shell.class);
protected long timeOutInterval = 0L;
- /** If or not script timed out*/
+ /* If or not script timed out */
private AtomicBoolean timedOut;
- /** Set to true on Windows platforms */
- public static final boolean WINDOWS /* borrowed from Path.WINDOWS */
- = System.getProperty("os.name").startsWith("Windows");
+ /**
+ * Set to true on Windows platforms.
+ */
+ public static final boolean WINDOWS = /* borrowed from Path.WINDOWS */
+ System.getProperty("os.name").startsWith("Windows");
private long interval; // refresh interval in msec
private long lastTime; // last time the command was performed
@@ -55,7 +57,7 @@ abstract public class Shell {
private Process process; // sub process used to execute the command
private int exitCode;
- /**If or not script finished executing*/
+ /* If or not script finished executing */
private volatile AtomicBoolean completed;
public Shell() {
@@ -71,29 +73,36 @@ abstract public class Shell {
this.lastTime = (interval < 0) ? 0 : -interval;
}
- /** set the environment for the command
+ /**
+ * Set the environment for the command.
* @param env Mapping of environment variables
*/
protected void setEnvironment(Map<String, String> env) {
this.environment = env;
}
- /** set the working directory
+ /**
+ * Set the working directory.
* @param dir The directory where the command would be executed
*/
protected void setWorkingDirectory(File dir) {
this.dir = dir;
}
- /** check to see if a command needs to be executed and execute if needed */
+ /**
+ * Check to see if a command needs to be executed and execute if needed.
+ */
protected void run() throws IOException {
- if (lastTime + interval > MathUtils.now())
+ if (lastTime + interval > MathUtils.now()) {
return;
+ }
exitCode = 0; // reset for next run
runCommand();
}
- /** Run a command */
+ /**
+ * Run a command.
+ */
private void runCommand() throws IOException {
ProcessBuilder builder = new ProcessBuilder(getExecString());
Timer timeOutTimer = null;
@@ -192,20 +201,26 @@ abstract public class Shell {
}
}
- /** return an array containing the command name & its parameters */
+ /**
+ * Return an array containing the command name & its parameters.
+ */
protected abstract String[] getExecString();
- /** Parse the execution result */
+ /**
+ * Parse the execution result.
+ */
protected abstract void parseExecResult(BufferedReader lines) throws
IOException;
- /** get the current sub-process executing the given command
+ /**
+ * Get the current sub-process executing the given command.
* @return process executing the command
*/
public Process getProcess() {
return process;
}
- /** get the exit code
+ /**
+ * Get the exit code.
* @return the exit code of the process
*/
public int getExitCode() {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SnapshotMap.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SnapshotMap.java
index a665476..8902d06 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SnapshotMap.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SnapshotMap.java
@@ -1,5 +1,3 @@
-package org.apache.bookkeeper.util;
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,12 +15,12 @@ package org.apache.bookkeeper.util;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.ConcurrentHashMap;
+package org.apache.bookkeeper.util;
import java.util.Map;
import java.util.NavigableMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
index d76bc20..c9cd39c 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
@@ -21,10 +21,13 @@
package org.apache.bookkeeper.util;
-import java.io.IOException;
-
import com.google.protobuf.ByteString;
+import java.io.IOException;
+
+/**
+ * A String-based entry formatter.
+ */
public class StringEntryFormatter extends EntryFormatter {
@Override
public void formatEntry(byte[] data) {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringUtils.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringUtils.java
index c0c110d..44f5575 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringUtils.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringUtils.java
@@ -28,10 +28,10 @@ import java.io.IOException;
public class StringUtils {
// Ledger Node Prefix
- static public final String LEDGER_NODE_PREFIX = "L";
+ public static final String LEDGER_NODE_PREFIX = "L";
/**
- * Formats ledger ID according to ZooKeeper rules
+ * Formats ledger ID according to ZooKeeper rules.
*
* @param id
* znode id
@@ -41,7 +41,7 @@ public class StringUtils {
}
/**
- * Formats ledger ID according to ZooKeeper rules
+ * Formats ledger ID according to ZooKeeper rules.
*
* @param id
* znode id
@@ -49,9 +49,9 @@ public class StringUtils {
public static String getZKStringIdForLongHierarchical(long id) {
return String.format("%019d", id);
}
-
+
/**
- * Get the hierarchical ledger path according to the ledger id
+ * Get the hierarchical ledger path according to the ledger id.
*
* @param ledgerId
* ledger id
@@ -70,7 +70,7 @@ public class StringUtils {
}
/**
- * Get the long hierarchical ledger path according to the ledger id
+ * Get the long hierarchical ledger path according to the ledger id.
*
* @param ledgerId
* ledger id
@@ -89,16 +89,16 @@ public class StringUtils {
.append(ledgerIdStr.substring(15, 19));
return sb.toString();
}
-
+
public static String getHybridHierarchicalLedgerPath(long ledgerId) {
- if(ledgerId < Integer.MAX_VALUE) {
+ if (ledgerId < Integer.MAX_VALUE) {
return getShortHierarchicalLedgerPath(ledgerId);
}
return getLongHierarchicalLedgerPath(ledgerId);
}
-
+
/**
- * Parse the hierarchical ledger path to its ledger id
+ * Parse the hierarchical ledger path to its ledger id.
*
* @param hierarchicalLedgerPath
* @return the ledger id
@@ -116,7 +116,7 @@ public class StringUtils {
}
/**
- * Parse the long hierarchical ledger path to its ledger id
+ * Parse the long hierarchical ledger path to its ledger id.
*
* @param longHierarchicalLedgerPaths
* @return the ledger id
@@ -132,9 +132,9 @@ public class StringUtils {
longHierarchicalParts[4].substring(LEDGER_NODE_PREFIX.length());
return stringToHierarchicalLedgerId(longHierarchicalParts);
}
-
+
/**
- * Get ledger id
+ * Get ledger id.
*
* @param levelNodes
* level of the ledger path
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SubTreeCache.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SubTreeCache.java
index 418c458..c5e4406 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SubTreeCache.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/SubTreeCache.java
@@ -21,12 +21,6 @@
package org.apache.bookkeeper.util;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -34,27 +28,36 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
- * Caching layer for traversing and monitoring changes on a znode subtree
+ * Caching layer for traversing and monitoring changes on a znode subtree.
*
- * ZooKeeper does not provide a way to perform a recursive watch on a subtree.
+ * <p>ZooKeeper does not provide a way to perform a recursive watch on a
subtree.
* In order to detect changes to a subtree, we need to maintain a
* cache of nodes which have been listed and have not changed since. This
would
* mirror the set of nodes with live watches in ZooKeeper (since we can't
* cancel them at the moment).
*
- * In order to avoid having to pre-read the whole subtree up front, we'll
weaken
+ * <p>In order to avoid having to pre-read the whole subtree up front, we'll
weaken
* the guarantee to only require firing the watcher for updates on nodes read
since
* the watcher was registered which happened after the read. We'll also permit
* spurious events elsewhere in the tree to avoid having to distinguish between
* nodes which were read before and after a watch was established.
*
- * Finally, we'll allow (require, even) the user to cancel a registered watcher
+ * <p>Finally, we'll allow (require, even) the user to cancel a registered
watcher
* once no longer interested.
*/
public class SubTreeCache {
private static final Logger LOG =
LoggerFactory.getLogger(SubTreeCache.class);
+ /**
+ * A tree provider.
+ */
public interface TreeProvider {
List<String> getChildren(
String path, Watcher watcher) throws InterruptedException,
KeeperException;
@@ -93,7 +96,7 @@ public class SubTreeCache {
this.provider = provider;
}
- synchronized private void handleEvent(WatchedEvent event) {
+ private synchronized void handleEvent(WatchedEvent event) {
Set<Watcher> toReturn = pendingWatchers;
for (Watcher watcher: pendingWatchers) {
watcher.process(event);
@@ -103,7 +106,7 @@ public class SubTreeCache {
/**
- * Returns children of node
+ * Returns children of node.
*
* @param path Path of which to get children
* @return Children of path
@@ -119,9 +122,9 @@ public class SubTreeCache {
}
/**
- * Register a watcher
- * <p>
- * See class header for semantics.
+ * Register a watcher.
+ *
+ * <p>See class header for semantics.
*
* @param watcher watcher to register
*/
@@ -130,7 +133,7 @@ public class SubTreeCache {
}
/**
- * Cancel a watcher (noop if not registered or already fired)
+ * Cancel a watcher (noop if not registered or already fired).
*
* @param watcher Watcher object to cancel
*/
@@ -138,6 +141,9 @@ public class SubTreeCache {
pendingWatchers.remove(watcher);
}
+ /**
+ * A watch guard.
+ */
public class WatchGuard implements AutoCloseable {
final Watcher w;
@@ -152,9 +158,9 @@ public class SubTreeCache {
}
/**
- * Register watcher and get interest guard object which can be used with
try-with-resources
- * <p>
- * It's important not to leak watchers into this structure. The returned
WatchGuard
+ * Register watcher and get interest guard object which can be used with
try-with-resources.
+ *
+ * <p>It's important not to leak watchers into this structure. The
returned WatchGuard
* can be used to ensure that the watch is unregistered upon exiting a
scope.
*
* @param watcher Watcher to register
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Tool.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Tool.java
index 0ffa00e..8a60af0 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Tool.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/Tool.java
@@ -25,13 +25,13 @@ import
org.apache.commons.configuration.CompositeConfiguration;
*/
public interface Tool {
/**
- * Exectue the command with given arguments
+ * Exectue the command with given arguments.
*
* @param args command specific arguments
* @return exit code.
* @throws Exception
*/
- public int run(String[] args) throws Exception;
+ int run(String[] args) throws Exception;
/**
* Passe a configuration object to the tool.
@@ -39,5 +39,5 @@ public interface Tool {
* @param conf configuration object
* @throws Exception
*/
- public void setConf(CompositeConfiguration conf) throws Exception;
+ void setConf(CompositeConfiguration conf) throws Exception;
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZeroBuffer.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZeroBuffer.java
index 16e0c28..8778d6e 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZeroBuffer.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZeroBuffer.java
@@ -29,10 +29,10 @@ import java.nio.ByteBuffer;
*/
public class ZeroBuffer {
- static final byte zeroBytes[] = new byte[64*1024];
+ private static final byte zeroBytes[] = new byte[64 * 1024];
/**
- * fill zeros into given buffer
+ * Fill zeros into given buffer.
* @param dst
*/
public static void put(ByteBuffer dst) {
@@ -40,7 +40,7 @@ public class ZeroBuffer {
}
/**
- * fill zeros into given buffer up to given length
+ * Fill zeros into given buffer up to given length.
* @param dst
* @param length
*/
@@ -55,7 +55,7 @@ public class ZeroBuffer {
}
/**
- * returns read-only zero-filled buffer,
+ * Returns read-only zero-filled buffer.
* @param length
* @return ByteBuffer
*/
@@ -63,8 +63,7 @@ public class ZeroBuffer {
ByteBuffer buffer;
if (length <= zeroBytes.length) {
buffer = ByteBuffer.wrap(zeroBytes, 0, length);
- }
- else {
+ } else {
buffer = ByteBuffer.allocate(length);
put(buffer);
buffer.rewind();
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZkUtils.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZkUtils.java
index 440a69a..7fceff6 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZkUtils.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/ZkUtils.java
@@ -26,8 +26,8 @@ import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.bookkeeper.conf.AbstractConfiguration;
+import org.apache.bookkeeper.conf.AbstractConfiguration;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.AsyncCallback.StringCallback;
@@ -36,8 +36,8 @@ import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.ZooDefs;
-import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.ACL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,7 +50,7 @@ public class ZkUtils {
/**
* Asynchronously create zookeeper path recursively and optimistically.
*
- * @see
#createFullPathOptimistic(ZooKeeper,String,byte[],List<ACL>,CreateMode)
+ * @see #createFullPathOptimistic(ZooKeeper, String, byte[], List,
CreateMode)
*
* @param zk
* Zookeeper client
@@ -113,7 +113,7 @@ public class ZkUtils {
* it fails to delete the leafnode then it will callback with the received
* error code, but it fails to delete the parent node for whatsoever reason
* it stops proceeding further and it will callback with ok error code.
- *
+ *
* @param zk
* Zookeeper client
* @param originalPath
@@ -145,7 +145,7 @@ public class ZkUtils {
}
}, leafNodePath);
}
-
+
/**
* Create zookeeper path recursively and optimistically. This method can
throw
* any of the KeeperExceptions which can be thrown by ZooKeeper#create.
@@ -204,7 +204,7 @@ public class ZkUtils {
throw KeeperException.create(Code.get(rc.get()));
}
}
-
+
private static class GetChildrenCtx {
int rc;
boolean done = false;
@@ -212,7 +212,7 @@ public class ZkUtils {
}
/**
- * Sync get all children under single zk node
+ * Sync get all children under single zk node.
*
* @param zk
* zookeeper client
@@ -252,7 +252,7 @@ public class ZkUtils {
}
/**
- * Async get direct children under single node
+ * Async get direct children under single node.
*
* @param zk
* zookeeper client
@@ -291,12 +291,12 @@ public class ZkUtils {
}
/**
- * Compute ZooKeeper ACLs using actual configuration
+ * Compute ZooKeeper ACLs using actual configuration.
*
* @param conf Bookie or BookKeeper configuration
*/
public static List<ACL> getACLs(AbstractConfiguration conf) {
- return conf.isZkEnableSecurity() ? ZooDefs.Ids.CREATOR_ALL_ACL:
ZooDefs.Ids.OPEN_ACL_UNSAFE;
+ return conf.isZkEnableSecurity() ? ZooDefs.Ids.CREATOR_ALL_ACL :
ZooDefs.Ids.OPEN_ACL_UNSAFE;
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashMap.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashMap.java
index b78eb5f..011a666 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashMap.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashMap.java
@@ -23,19 +23,19 @@ package org.apache.bookkeeper.util.collections;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.locks.StampedLock;
import java.util.function.LongFunction;
-import com.google.common.collect.Lists;
-
/**
* Map from long to an Object.
- *
- * Provides similar methods as a ConcurrentMap<long,Object> with 2 differences:
+ *
+ * <p>Provides similar methods as a {@code ConcurrentMap<long,Object>} with 2
differences:
* <ol>
- * <li>No boxing/unboxing from long -> Long
+ * <li>No boxing/unboxing from long -> Long
* <li>Open hash map with linear probing, no node allocations to store the
values
* </ol>
*
@@ -182,7 +182,10 @@ public class ConcurrentLongHashMap<V> {
return values;
}
- public static interface EntryProcessor<V> {
+ /**
+ * An entry processor.
+ */
+ public interface EntryProcessor<V> {
void accept(long key, V value);
}
@@ -484,11 +487,11 @@ public class ConcurrentLongHashMap<V> {
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) n & (Max - 1);
+ static final int signSafeMod(long n, int max) {
+ return (int) n & (max - 1);
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashSet.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashSet.java
index d9c67f3..fbf374e 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashSet.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongHashSet.java
@@ -28,12 +28,12 @@ import java.util.Set;
import java.util.concurrent.locks.StampedLock;
/**
- * Concurrent hash set for primitive longs
+ * Concurrent hash set for primitive longs.
*
- * Provides similar methods as a ConcurrentSet<Long> but since it's an
open hash map with linear probing, no node
- * allocations are required to store the values.
- * <p>
- * Items <strong>MUST</strong> be >= 0.
+ * <p>Provides similar methods as a ConcurrentSet<Long> but since it's
an open hash map with linear probing,
+ * no node allocations are required to store the values.
+ *
+ * <p>Items <strong>MUST</strong> be >= 0.
*/
public class ConcurrentLongHashSet {
@@ -47,7 +47,10 @@ public class ConcurrentLongHashSet {
private final Section[] sections;
- public static interface ConsumerLong {
+ /**
+ * A consumer of long values.
+ */
+ public interface ConsumerLong {
void accept(long item);
}
@@ -121,7 +124,7 @@ public class ConcurrentLongHashSet {
}
/**
- * Remove an existing entry if found
+ * Remove an existing entry if found.
*
* @param item
* @return true if removed or false if item was not present
@@ -132,7 +135,7 @@ public class ConcurrentLongHashSet {
return getSection(h).remove(item, (int) h);
}
- private final Section getSection(long hash) {
+ private Section getSection(long hash) {
// Use 32 msb out of long to get the section
final int sectionIdx = (int) (hash >>> 32) & (sections.length - 1);
return sections[sectionIdx];
@@ -398,22 +401,22 @@ public class ConcurrentLongHashSet {
private static final long HashMixer = 0xc6a4a7935bd1e995L;
private static final int R = 47;
- final static long hash(long key) {
+ static final long hash(long key) {
long hash = key * HashMixer;
hash ^= hash >>> R;
hash *= HashMixer;
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) (n & (Max - 1));
+ static final int signSafeMod(long n, int max) {
+ return (int) (n & (max - 1));
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
- private static final void checkBiggerEqualZero(long n) {
+ private static void checkBiggerEqualZero(long n) {
if (n < 0L) {
throw new IllegalArgumentException("Keys and values must be >= 0");
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongHashMap.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongHashMap.java
index 12a3d76..ecc890b 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongHashMap.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongHashMap.java
@@ -23,22 +23,22 @@ package org.apache.bookkeeper.util.collections;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.StampedLock;
import java.util.function.LongPredicate;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
/**
- * Concurrent hash map from primitive long to long
+ * Concurrent hash map from primitive long to long.
+ *
+ * <p>Provides similar methods as a {@code ConcurrentMap<K,V>} but since it's
an open hash map with linear probing,
+ * no node allocations are required to store the values.
*
- * Provides similar methods as a ConcurrentMap<K,V> but since it's an open
hash map with linear probing, no node
- * allocations are required to store the values.
- * <p>
- * Keys <strong>MUST</strong> be >= 0.
+ * <p>Keys <strong>MUST</strong> be >= 0.
*/
public class ConcurrentLongLongHashMap {
@@ -54,15 +54,24 @@ public class ConcurrentLongLongHashMap {
private final Section[] sections;
- public static interface BiConsumerLong {
+ /**
+ * A Long-Long BiConsumer.
+ */
+ public interface BiConsumerLong {
void accept(long key, long value);
}
- public static interface LongLongFunction {
+ /**
+ * A Long-Long function.
+ */
+ public interface LongLongFunction {
long apply(long key);
}
- public static interface LongLongPredicate {
+ /**
+ * A Long-Long predicate.
+ */
+ public interface LongLongPredicate {
boolean test(long key, long value);
}
@@ -193,7 +202,7 @@ public class ConcurrentLongLongHashMap {
}
/**
- * Remove an existing entry if found
+ * Remove an existing entry if found.
*
* @param key
* @return the value associated with the key or -1 if key was not present
@@ -233,7 +242,7 @@ public class ConcurrentLongLongHashMap {
return removedCount;
}
- private final Section getSection(long hash) {
+ private Section getSection(long hash) {
// Use 32 msb out of long to get the section
final int sectionIdx = (int) (hash >>> 32) & (sections.length - 1);
return sections[sectionIdx];
@@ -700,22 +709,22 @@ public class ConcurrentLongLongHashMap {
private static final long HashMixer = 0xc6a4a7935bd1e995L;
private static final int R = 47;
- final static long hash(long key) {
+ static final long hash(long key) {
long hash = key * HashMixer;
hash ^= hash >>> R;
hash *= HashMixer;
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) (n & (Max - 1)) << 1;
+ static final int signSafeMod(long n, int max) {
+ return (int) (n & (max - 1)) << 1;
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
- private static final void checkBiggerEqualZero(long n) {
+ private static void checkBiggerEqualZero(long n) {
if (n < 0L) {
throw new IllegalArgumentException("Keys and values must be >= 0");
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongPairHashMap.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongPairHashMap.java
index 13a7529..146b904 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongPairHashMap.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentLongLongPairHashMap.java
@@ -22,23 +22,23 @@ package org.apache.bookkeeper.util.collections;
import static com.google.common.base.Preconditions.checkArgument;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.StampedLock;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
/**
* Concurrent hash map where both keys and values are composed of pairs of
longs.
- * <p>
- * (long,long) --> (long,long)
- * <p>
- * Provides similar methods as a ConcurrentMap<K,V> but since it's an open
hash map with linear probing, no node
- * allocations are required to store the keys and values, and no boxing is
required.
- * <p>
- * Keys <strong>MUST</strong> be >= 0.
+ *
+ * <p>(long,long) --> (long,long)
+ *
+ * <p>Provides similar methods as a {@code ConcurrentMap<K,V>} but since it's
an open hash map with linear probing,
+ * no node allocations are required to store the keys and values, and no
boxing is required.
+ *
+ * <p>Keys <strong>MUST</strong> be >= 0.
*/
public class ConcurrentLongLongPairHashMap {
@@ -54,15 +54,24 @@ public class ConcurrentLongLongPairHashMap {
private final Section[] sections;
- public static interface BiConsumerLongPair {
+ /**
+ * A BiConsumer Long pair.
+ */
+ public interface BiConsumerLongPair {
void accept(long key1, long key2, long value1, long value2);
}
- public static interface LongLongPairFunction {
+ /**
+ * A Long pair function.
+ */
+ public interface LongLongPairFunction {
long apply(long key1, long key2);
}
- public static interface LongLongPairPredicate {
+ /**
+ * A Long pair predicate.
+ */
+ public interface LongLongPairPredicate {
boolean test(long key1, long key2, long value1, long value2);
}
@@ -153,7 +162,7 @@ public class ConcurrentLongLongPairHashMap {
}
/**
- * Remove an existing entry if found
+ * Remove an existing entry if found.
*
* @param key
* @return the value associated with the key or -1 if key was not present
@@ -171,7 +180,7 @@ public class ConcurrentLongLongPairHashMap {
return getSection(h).remove(key1, key2, value1, value2, (int) h);
}
- private final Section getSection(long hash) {
+ private Section getSection(long hash) {
// Use 32 msb out of long to get the section
final int sectionIdx = (int) (hash >>> 32) & (sections.length - 1);
return sections[sectionIdx];
@@ -491,7 +500,7 @@ public class ConcurrentLongLongPairHashMap {
private static final long HashMixer = 0xc6a4a7935bd1e995L;
private static final int R = 47;
- final static long hash(long key1, long key2) {
+ static final long hash(long key1, long key2) {
long hash = key1 * HashMixer;
hash ^= hash >>> R;
hash *= HashMixer;
@@ -501,20 +510,23 @@ public class ConcurrentLongLongPairHashMap {
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) (n & (Max - 1)) << 2;
+ static final int signSafeMod(long n, int max) {
+ return (int) (n & (max - 1)) << 2;
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
- private static final void checkBiggerEqualZero(long n) {
+ private static void checkBiggerEqualZero(long n) {
if (n < 0L) {
throw new IllegalArgumentException("Keys and values must be >= 0");
}
}
+ /**
+ * A pair of long values.
+ */
public static class LongPair implements Comparable<LongPair> {
public final long first;
public final long second;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashMap.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashMap.java
index fe9612c..77f3c11 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashMap.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashMap.java
@@ -23,6 +23,8 @@ package org.apache.bookkeeper.util.collections;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.locks.StampedLock;
@@ -30,13 +32,11 @@ import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Function;
-import com.google.common.collect.Lists;
-
/**
- * Concurrent hash map
+ * Concurrent hash map.
*
- * Provides similar methods as a ConcurrentMap<K,V> but since it's an open
hash map with linear probing, no node
- * allocations are required to store the values
+ * <p>Provides similar methods as a {@code ConcurrentMap<K,V>} but since it's
an open hash map with linear probing,
+ * no node allocations are required to store the values
*
* @param <V>
*/
@@ -168,7 +168,7 @@ public class ConcurrentOpenHashMap<K, V> {
checkNotNull(filter);
int removedCount = 0;
- for (Section<K,V> s : sections) {
+ for (Section<K, V> s : sections) {
removedCount += s.removeIf(filter);
}
@@ -423,7 +423,7 @@ public class ConcurrentOpenHashMap<K, V> {
}
}
- private final void cleanBucket(int bucket) {
+ private void cleanBucket(int bucket) {
int nextInArray = (bucket + 2) & (table.length - 1);
if (table[nextInArray] == EmptyKey) {
table[bucket] = EmptyKey;
@@ -476,18 +476,18 @@ public class ConcurrentOpenHashMap<K, V> {
private static final long HashMixer = 0xc6a4a7935bd1e995L;
private static final int R = 47;
- final static <K> long hash(K key) {
+ static final <K> long hash(K key) {
long hash = key.hashCode() * HashMixer;
hash ^= hash >>> R;
hash *= HashMixer;
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) (n & (Max - 1)) << 1;
+ static final int signSafeMod(long n, int max) {
+ return (int) (n & (max - 1)) << 1;
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashSet.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashSet.java
index a056a17..3420eda 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashSet.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/ConcurrentOpenHashSet.java
@@ -23,18 +23,18 @@ package org.apache.bookkeeper.util.collections;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Lists;
+
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.locks.StampedLock;
import java.util.function.Consumer;
-import com.google.common.collect.Lists;
-
/**
- * Concurrent hash set
- *
- * Provides similar methods as a ConcurrentMap<K,V> but since it's an open
hash map with linear probing, no node
- * allocations are required to store the values
+ * Concurrent hash set.
+ *
+ * <p>Provides similar methods as a {@code ConcurrentMap<K,V>} but since it's
an open hash map with linear probing,
+ * no node allocations are required to store the values
*
* @param <V>
*/
@@ -399,18 +399,18 @@ public class ConcurrentOpenHashSet<V> {
private static final long HashMixer = 0xc6a4a7935bd1e995L;
private static final int R = 47;
- final static <K> long hash(K key) {
+ static final <K> long hash(K key) {
long hash = key.hashCode() * HashMixer;
hash ^= hash >>> R;
hash *= HashMixer;
return hash;
}
- static final int signSafeMod(long n, int Max) {
- return (int) n & (Max - 1);
+ static final int signSafeMod(long n, int max) {
+ return (int) n & (max - 1);
}
- private static final int alignToPowerOfTwo(int n) {
+ private static int alignToPowerOfTwo(int n) {
return (int) Math.pow(2, 32 - Integer.numberOfLeadingZeros(n - 1));
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/GrowableArrayBlockingQueue.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/GrowableArrayBlockingQueue.java
index 8f7dae7..e8143a3 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/GrowableArrayBlockingQueue.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/GrowableArrayBlockingQueue.java
@@ -36,7 +36,7 @@ import org.apache.bookkeeper.util.MathUtils;
/**
* This implements a {@link BlockingQueue} backed by an array with no fixed
capacity.
*
- * When the capacity is reached, data will be moved to a bigger array.
+ * <p>When the capacity is reached, data will be moved to a bigger array.
*
*/
public class GrowableArrayBlockingQueue<T> extends AbstractQueue<T> implements
BlockingQueue<T> {
@@ -345,7 +345,7 @@ public class GrowableArrayBlockingQueue<T> extends
AbstractQueue<T> implements B
}
}
- final static class PaddedInt {
+ static final class PaddedInt {
private int value;
// Padding to avoid false sharing
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/RecyclableArrayList.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/RecyclableArrayList.java
index 1febc0c..3e45c55 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/RecyclableArrayList.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/RecyclableArrayList.java
@@ -27,6 +27,9 @@ public final class RecyclableArrayList<T> extends
ArrayList<T> {
private static final int DEFAULT_INITIAL_CAPACITY = 8;
+ /**
+ * An ArrayList recycler.
+ */
public static class Recycler<X>
extends io.netty.util.Recycler<RecyclableArrayList<X>> {
@Override
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/package-info.java
similarity index 55%
copy from
bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
copy to
bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/package-info.java
index d76bc20..1b949b6 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/collections/package-info.java
@@ -1,5 +1,4 @@
/*
- *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -16,30 +15,9 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-package org.apache.bookkeeper.util;
-
-import java.io.IOException;
-
-import com.google.protobuf.ByteString;
-
-public class StringEntryFormatter extends EntryFormatter {
- @Override
- public void formatEntry(byte[] data) {
- System.out.println(ByteString.copyFrom(data).toStringUtf8());
- }
-
- @Override
- public void formatEntry(java.io.InputStream input) {
- try {
- byte[] data = new byte[input.available()];
- input.read(data, 0, data.length);
- formatEntry(data);
- } catch (IOException ie) {
- System.out.println("Warn: Unreadable entry : " + ie.getMessage());
- }
- }
-
-}
+/**
+ * Bookkeeper collection utilities.
+ */
+package org.apache.bookkeeper.util.collections;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/package-info.java
similarity index 57%
copy from
bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
copy to
bookkeeper-server/src/main/java/org/apache/bookkeeper/util/package-info.java
index d76bc20..eaab025 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/StringEntryFormatter.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/package-info.java
@@ -1,5 +1,4 @@
/*
- *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -16,30 +15,9 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
+/**
+ * Bookkeeper utilities.
+ */
package org.apache.bookkeeper.util;
-
-import java.io.IOException;
-
-import com.google.protobuf.ByteString;
-
-public class StringEntryFormatter extends EntryFormatter {
- @Override
- public void formatEntry(byte[] data) {
- System.out.println(ByteString.copyFrom(data).toStringUtf8());
- }
-
- @Override
- public void formatEntry(java.io.InputStream input) {
- try {
- byte[] data = new byte[input.available()];
- input.read(data, 0, data.length);
- formatEntry(data);
- } catch (IOException ie) {
- System.out.println("Warn: Unreadable entry : " + ie.getMessage());
- }
- }
-
-}
diff --git a/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
b/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
index 85ff462..dc62f83 100644
--- a/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
+++ b/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
@@ -22,7 +22,6 @@
<suppress checks="JavadocPackage" files=".*[\\/]examples[\\/].*"/>
<!-- suppress packages by packages -->
<suppress checks=".*" files=".*[\\/]test[\\/].*"/>
- <suppress checks=".*" files=".*[\\/]util[\\/].*"/>
<!-- suppress all checks in the generated directories -->
<suppress checks=".*" files=".+[\\/]generated[\\/].+\.java" />
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].