This is an automated email from the ASF dual-hosted git repository.
eolivelli 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 86b915c ISSUE #230: Enable Checkstyle on the meta package
86b915c is described below
commit 86b915ce845f4ee3c7c0eb2971e051368d061943
Author: Aaron Coburn <[email protected]>
AuthorDate: Fri Dec 1 17:03:53 2017 +0100
ISSUE #230: Enable Checkstyle on the meta package
This is part of #230 and adds Checkstyle verification to the meta
package in bookkeeper-server.
Author: Aaron Coburn <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, Sijie Guo
<[email protected]>
This closes #797 from acoburn/checkstyle_meta, closes #230
---
.../meta/AbstractHierarchicalLedgerManager.java | 32 ++---
.../bookkeeper/meta/AbstractZkLedgerManager.java | 36 +++---
.../bookkeeper/meta/CleanupLedgerManager.java | 18 +--
.../apache/bookkeeper/meta/FlatLedgerManager.java | 12 +-
.../bookkeeper/meta/FlatLedgerManagerFactory.java | 11 +-
.../bookkeeper/meta/HierarchicalLedgerManager.java | 22 ++--
.../meta/HierarchicalLedgerManagerFactory.java | 12 +-
.../apache/bookkeeper/meta/LedgerIdGenerator.java | 7 +-
.../org/apache/bookkeeper/meta/LedgerLayout.java | 28 ++---
.../org/apache/bookkeeper/meta/LedgerManager.java | 38 +++---
.../bookkeeper/meta/LedgerManagerFactory.java | 24 ++--
.../meta/LedgerUnderreplicationManager.java | 51 ++++----
.../meta/LegacyHierarchicalLedgerManager.java | 26 ++--
.../LegacyHierarchicalLedgerManagerFactory.java | 14 +--
.../meta/LongHierarchicalLedgerManager.java | 37 +++---
.../meta/LongHierarchicalLedgerManagerFactory.java | 3 +
.../bookkeeper/meta/LongZkLedgerIdGenerator.java | 137 ++++++++++-----------
.../bookkeeper/meta/MSLedgerManagerFactory.java | 35 +++---
.../bookkeeper/meta/ZkLedgerIdGenerator.java | 8 +-
.../meta/ZkLedgerUnderreplicationManager.java | 53 ++++----
.../org/apache/bookkeeper/meta/package-info.java | 23 ++++
.../resources/bookkeeper/server-suppressions.xml | 1 -
22 files changed, 328 insertions(+), 300 deletions(-)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractHierarchicalLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractHierarchicalLedgerManager.java
index 02359e0..9d25ac3 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractHierarchicalLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractHierarchicalLedgerManager.java
@@ -29,18 +29,20 @@ import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
import org.apache.bookkeeper.util.StringUtils;
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.AsyncCallback.VoidCallback;
import org.apache.zookeeper.KeeperException.Code;
+import org.apache.zookeeper.ZooKeeper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * An abstract class for managing hierarchical ledgers.
+ */
public abstract class AbstractHierarchicalLedgerManager extends
AbstractZkLedgerManager {
-
+
private static final Logger LOG =
LoggerFactory.getLogger(AbstractHierarchicalLedgerManager.class);
/**
- * Constructor
+ * Constructor.
*
* @param conf
* Configuration object
@@ -50,9 +52,9 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
public AbstractHierarchicalLedgerManager(AbstractConfiguration conf,
ZooKeeper zk) {
super(conf, zk);
}
-
+
/**
- * Process hash nodes in a given path
+ * Process hash nodes in a given path.
*/
void asyncProcessLevelNodes(
final String path, final Processor<String> processor,
@@ -88,7 +90,7 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
}
}, null);
}
-
+
/**
* Process list one by one in asynchronize way. Process will be stopped
immediately
* when error occurred.
@@ -98,7 +100,7 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
ScheduledExecutorService scheduler;
/**
- * Constructor
+ * Constructor.
*
* @param scheduler
* Executor used to prevent long stack chains
@@ -108,7 +110,7 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
}
/**
- * Process list of items
+ * Process list of items.
*
* @param data
* List of data to process
@@ -150,7 +152,7 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
final AsyncCallback.VoidCallback stub = this;
scheduler.submit(new Runnable() {
@Override
- public final void run() {
+ public void run() {
processor.process(dataToProcess, stub);
}
});
@@ -160,12 +162,12 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
processor.process(firstElement, stubCallback);
}
}
-
+
// get ledger from all level nodes
long getLedgerId(String...levelNodes) throws IOException {
return StringUtils.stringToHierarchicalLedgerId(levelNodes);
}
-
+
/**
* Get all ledger ids in the given zk path.
*
@@ -189,8 +191,9 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
char ch;
for (int i = ledgerRootPath.length() + 1; i < path.length(); i++) {
ch = path.charAt(i);
- if (ch < '0' || ch > '9')
+ if (ch < '0' || ch > '9') {
continue;
+ }
ledgerIdPrefix = ledgerIdPrefix * 10 + (ch - '0');
}
@@ -201,8 +204,9 @@ public abstract class AbstractHierarchicalLedgerManager
extends AbstractZkLedger
long ledgerId = ledgerIdPrefix;
for (int i = 0; i < ledgerNode.length(); i++) {
ch = ledgerNode.charAt(i);
- if (ch < '0' || ch > '9')
+ if (ch < '0' || ch > '9') {
continue;
+ }
ledgerId = ledgerId * 10 + (ch - '0');
}
zkActiveLedgers.add(ledgerId);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
index c93a8a9..3546d89 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
@@ -19,6 +19,7 @@ package org.apache.bookkeeper.meta;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
@@ -30,6 +31,7 @@ import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+
import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.client.LedgerMetadata;
import org.apache.bookkeeper.conf.AbstractConfiguration;
@@ -52,8 +54,8 @@ import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.data.ACL;
+import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,9 +64,9 @@ import org.slf4j.LoggerFactory;
*/
abstract class AbstractZkLedgerManager implements LedgerManager, Watcher {
- private final static Logger LOG =
LoggerFactory.getLogger(AbstractZkLedgerManager.class);
+ private static final Logger LOG =
LoggerFactory.getLogger(AbstractZkLedgerManager.class);
- static int ZK_CONNECT_BACKOFF_MS = 200;
+ private static final int ZK_CONNECT_BACKOFF_MS = 200;
protected final AbstractConfiguration conf;
protected final ZooKeeper zk;
@@ -109,7 +111,7 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
scheduler.submit(new Runnable() {
@Override
public void run() {
- synchronized(listenerSet) {
+ synchronized (listenerSet) {
for (LedgerMetadataListener listener :
listenerSet) {
listener.onChanged(ledgerId, result);
}
@@ -134,7 +136,7 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
}
/**
- * ZooKeeper-based Ledger Manager Constructor
+ * ZooKeeper-based Ledger Manager Constructor.
*
* @param conf
* Configuration object
@@ -155,7 +157,7 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
}
/**
- * Get the znode path that is used to store ledger metadata
+ * Get the znode path that is used to store ledger metadata.
*
* @param ledgerId
* Ledger ID
@@ -164,7 +166,7 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
protected abstract String getLedgerPath(long ledgerId);
/**
- * Get ledger id from its znode ledger path
+ * Get ledger id from its znode ledger path.
*
* @param ledgerPath
* Ledger path to store metadata
@@ -194,13 +196,13 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
case NodeDeleted:
Set<LedgerMetadataListener> listenerSet = listeners.get(ledgerId);
if (null != listenerSet) {
- synchronized(listenerSet){
+ synchronized (listenerSet){
if (LOG.isDebugEnabled()) {
LOG.debug("Removed ledger metadata listeners on ledger
{} : {}",
ledgerId, listenerSet);
}
for (LedgerMetadataListener l : listenerSet) {
- l.onChanged( ledgerId, null );
+ l.onChanged(ledgerId, null);
}
listeners.remove(ledgerId, listenerSet);
}
@@ -264,18 +266,18 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
int znodeVersion = -1;
if (Version.NEW == version) {
LOG.error("Request to delete ledger {} metadata with version set
to the initial one", ledgerId);
- cb.operationComplete(BKException.Code.MetadataVersionException,
(Void)null);
+ cb.operationComplete(BKException.Code.MetadataVersionException,
(Void) null);
return;
} else if (Version.ANY != version) {
if (!(version instanceof LongVersion)) {
LOG.info("Not an instance of ZKVersion: {}", ledgerId);
-
cb.operationComplete(BKException.Code.MetadataVersionException, (Void)null);
+
cb.operationComplete(BKException.Code.MetadataVersionException, (Void) null);
return;
} else {
znodeVersion = (int) ((LongVersion) version).getLongVersion();
}
}
-
+
VoidCallback callbackForDelete = new VoidCallback() {
@Override
public void processResult(int rc, String path, Object ctx) {
@@ -288,7 +290,8 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
Set<LedgerMetadataListener> listenerSet =
listeners.remove(ledgerId);
if (null != listenerSet) {
if (LOG.isDebugEnabled()) {
- LOG.debug("Remove registered ledger metadata
listeners on ledger {} after ledger is deleted.",
+ LOG.debug(
+ "Remove registered ledger metadata
listeners on ledger {} after ledger is deleted.",
ledgerId, listenerSet);
}
} else {
@@ -380,13 +383,14 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
return;
}
if (stat == null) {
- LOG.error("Could not parse ledger metadata for ledger: " +
ledgerId+". Stat object is null");
+ LOG.error("Could not parse ledger metadata for ledger: {}.
Stat object is null", ledgerId);
readCb.operationComplete(BKException.Code.ZKException,
null);
return;
}
LedgerMetadata metadata;
try {
- metadata = LedgerMetadata.parseConfig(data, new
LongVersion(stat.getVersion()), Optional.of(stat.getCtime()));
+ metadata = LedgerMetadata.parseConfig(data, new
LongVersion(stat.getVersion()),
+ Optional.of(stat.getCtime()));
} catch (IOException e) {
LOG.error("Could not parse ledger metadata for ledger: " +
ledgerId, e);
readCb.operationComplete(BKException.Code.ZKException,
null);
@@ -485,7 +489,7 @@ abstract class AbstractZkLedgerManager implements
LedgerManager, Watcher {
}
/**
- * Whether the znode a special znode
+ * Whether the znode a special znode.
*
* @param znode
* Znode Name
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/CleanupLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/CleanupLedgerManager.java
index 50117fe..3b71a02 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/CleanupLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/CleanupLedgerManager.java
@@ -18,13 +18,6 @@
package org.apache.bookkeeper.meta;
import com.google.common.annotations.VisibleForTesting;
-import org.apache.bookkeeper.client.BKException;
-import org.apache.bookkeeper.client.LedgerMetadata;
-import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
-import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataListener;
-import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
-import org.apache.bookkeeper.versioning.Version;
-import org.apache.zookeeper.AsyncCallback;
import java.io.IOException;
import java.util.HashSet;
@@ -33,6 +26,17 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.client.LedgerMetadata;
+import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
+import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataListener;
+import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
+import org.apache.bookkeeper.versioning.Version;
+import org.apache.zookeeper.AsyncCallback;
+
+/**
+ * A ledger manager that cleans up resources upon closing.
+ */
public class CleanupLedgerManager implements LedgerManager {
private class CleanupGenericCallback<T> implements GenericCallback<T> {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManager.java
index 36db62a..a155c4d 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManager.java
@@ -46,7 +46,7 @@ class FlatLedgerManager extends AbstractZkLedgerManager {
private final String ledgerPrefix;
/**
- * Constructor
+ * Constructor.
*
* @param conf
* Configuration object
@@ -87,9 +87,9 @@ class FlatLedgerManager extends AbstractZkLedgerManager {
asyncProcessLedgersInSingleNode(ledgerRootPath, processor, finalCb,
ctx, successRc, failureRc);
}
-
protected static boolean isSpecialZnode(String znode) {
- return znode.startsWith(ZkLedgerIdGenerator.LEDGER_ID_GEN_PREFIX) ||
AbstractZkLedgerManager.isSpecialZnode(znode);
+ return znode.startsWith(ZkLedgerIdGenerator.LEDGER_ID_GEN_PREFIX)
+ || AbstractZkLedgerManager.isSpecialZnode(znode);
}
@Override
@@ -99,7 +99,7 @@ class FlatLedgerManager extends AbstractZkLedgerManager {
boolean nextCalled = false;
LedgerRange nextRange = null;
- synchronized private void preload() throws IOException {
+ private synchronized void preload() throws IOException {
if (nextRange != null) {
return;
}
@@ -116,13 +116,13 @@ class FlatLedgerManager extends AbstractZkLedgerManager {
}
@Override
- synchronized public boolean hasNext() throws IOException {
+ public synchronized boolean hasNext() throws IOException {
preload();
return nextRange != null && nextRange.size() > 0 &&
!nextCalled;
}
@Override
- synchronized public LedgerRange next() throws IOException {
+ public synchronized LedgerRange next() throws IOException {
if (!hasNext()) {
throw new NoSuchElementException();
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManagerFactory.java
index 33a46c6..c736e0e 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/FlatLedgerManagerFactory.java
@@ -1,5 +1,3 @@
-package org.apache.bookkeeper.meta;
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,20 +15,21 @@ package org.apache.bookkeeper.meta;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.bookkeeper.meta;
import java.io.IOException;
import java.util.List;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.ZKUtil;
-import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.conf.AbstractConfiguration;
+import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.util.ZkUtils;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.ZKUtil;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
/**
- * Flat Ledger Manager Factory
+ * Flat Ledger Manager Factory.
*/
public class FlatLedgerManagerFactory extends LedgerManagerFactory {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManager.java
index fe260fc..07607e4 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManager.java
@@ -24,18 +24,18 @@ import
org.apache.bookkeeper.meta.LedgerManager.LedgerRangeIterator;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
import org.apache.bookkeeper.util.StringUtils;
import org.apache.zookeeper.AsyncCallback.VoidCallback;
+import org.apache.zookeeper.ZooKeeper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.zookeeper.ZooKeeper;
/**
* HierarchicalLedgerManager makes use of both LongHierarchicalLedgerManager
and LegacyHierarchicalLedgerManager
- * to extend the 31-bit ledger id range of the LegacyHierarchicalLedgerManager
to that of the LongHierarchicalLedgerManager
- * while remaining backwards-compatible with the legacy manager.
+ * to extend the 31-bit ledger id range of the LegacyHierarchicalLedgerManager
to that of the
+ * LongHierarchicalLedgerManager while remaining backwards-compatible with the
legacy manager.
*
- * In order to achieve backwards-compatibility, the HierarchicalLedgerManager
forwards requests relating to ledger IDs which
- * are < Integer.MAX_INT to the LegacyHierarchicalLedgerManager. The new
5-part directory structure will not appear until a
- * ledger with an ID >= Integer.MAX_INT is created.
+ * <p>In order to achieve backwards-compatibility, the
HierarchicalLedgerManager forwards requests relating to ledger
+ * IDs which are < Integer.MAX_INT to the LegacyHierarchicalLedgerManager. The
new 5-part directory structure will not
+ * appear until a ledger with an ID >= Integer.MAX_INT is created.
*
* @see LongHierarchicalLedgerManager
* @see LegacyHierarchicalLedgerManager
@@ -60,11 +60,10 @@ class HierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
@Override
public void processResult(int rc, String path, Object ctx) {
- if(rc == failureRc) {
+ if (rc == failureRc) {
// If it fails, return the failure code to the callback
finalCb.processResult(rc, path, ctx);
- }
- else {
+ } else {
// If it succeeds, proceed with our own recursive ledger
processing for the 63-bit id ledgers
longLM.asyncProcessLedgers(processor, finalCb, context,
successRc, failureRc);
}
@@ -99,7 +98,8 @@ class HierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
LedgerRangeIterator legacyLedgerRangeIterator;
LedgerRangeIterator longLedgerRangeIterator;
- HierarchicalLedgerRangeIterator(LedgerRangeIterator
legacyLedgerRangeIterator, LedgerRangeIterator longLedgerRangeIterator) {
+ HierarchicalLedgerRangeIterator(LedgerRangeIterator
legacyLedgerRangeIterator,
+ LedgerRangeIterator longLedgerRangeIterator) {
this.legacyLedgerRangeIterator = legacyLedgerRangeIterator;
this.longLedgerRangeIterator = longLedgerRangeIterator;
}
@@ -111,7 +111,7 @@ class HierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
@Override
public LedgerRange next() throws IOException {
- if(legacyLedgerRangeIterator.hasNext()) {
+ if (legacyLedgerRangeIterator.hasNext()) {
return legacyLedgerRangeIterator.next();
}
return longLedgerRangeIterator.next();
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManagerFactory.java
index a74a633..eeeb6e9 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/HierarchicalLedgerManagerFactory.java
@@ -23,17 +23,19 @@ import org.apache.bookkeeper.util.ZkUtils;
import org.apache.zookeeper.data.ACL;
/**
- * Legacy Hierarchical Ledger Manager Factory
+ * Legacy Hierarchical Ledger Manager Factory.
*/
public class HierarchicalLedgerManagerFactory extends
LegacyHierarchicalLedgerManagerFactory {
public static final String NAME = "hierarchical";
-
+
@Override
public LedgerIdGenerator newLedgerIdGenerator() {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- ZkLedgerIdGenerator subIdGenerator = new ZkLedgerIdGenerator(zk,
conf.getZkLedgersRootPath(), LegacyHierarchicalLedgerManager.IDGEN_ZNODE,
zkAcls);
- return new LongZkLedgerIdGenerator(zk, conf.getZkLedgersRootPath(),
LongHierarchicalLedgerManager.IDGEN_ZNODE, subIdGenerator, zkAcls);
+ ZkLedgerIdGenerator subIdGenerator = new ZkLedgerIdGenerator(zk,
conf.getZkLedgersRootPath(),
+ LegacyHierarchicalLedgerManager.IDGEN_ZNODE, zkAcls);
+ return new LongZkLedgerIdGenerator(zk, conf.getZkLedgersRootPath(),
LongHierarchicalLedgerManager.IDGEN_ZNODE,
+ subIdGenerator, zkAcls);
}
-
+
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerIdGenerator.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerIdGenerator.java
index 24d1f01..a110334 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerIdGenerator.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerIdGenerator.java
@@ -19,16 +19,15 @@ package org.apache.bookkeeper.meta;
import java.io.Closeable;
-import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
/**
- * The interface for global unique ledger ID generation
+ * The interface for global unique ledger ID generation.
*/
public interface LedgerIdGenerator extends Closeable {
/**
- * generate a global unique ledger id
+ * Generate a global unique ledger id.
*
* @param cb
* Callback when a new ledger id is generated, return code:<ul>
@@ -36,6 +35,6 @@ public interface LedgerIdGenerator extends Closeable {
* <li>{@link BKException.Code.ZKException} when can't generate
new ledger id</li>
* </ul>
*/
- public void generateLedgerId(GenericCallback<Long> cb);
+ void generateLedgerId(GenericCallback<Long> cb);
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerLayout.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerLayout.java
index 730e288..a1e2cef 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerLayout.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerLayout.java
@@ -45,7 +45,7 @@ class LedgerLayout {
public static final int LAYOUT_FORMAT_VERSION = 2;
/**
- * Read ledger layout from zookeeper
+ * Read ledger layout from zookeeper.
*
* @param zk ZooKeeper Client
* @param ledgersRoot Root of the ledger namespace to check
@@ -71,8 +71,8 @@ class LedgerLayout {
}
}
- static final String splitter = ":";
- static final String lSplitter = "\n";
+ private static final String splitter = ":";
+ private static final String lSplitter = "\n";
// ledger manager factory class
private String managerFactoryCls;
@@ -83,7 +83,7 @@ class LedgerLayout {
private int layoutFormatVersion = LAYOUT_FORMAT_VERSION;
/**
- * Ledger Layout Constructor
+ * Ledger Layout Constructor.
*
* @param managerFactoryCls
* Ledger Manager Factory Class
@@ -104,7 +104,7 @@ class LedgerLayout {
}
/**
- * Get Ledger Manager Type
+ * Get Ledger Manager Type.
*
* @return ledger manager type
* @deprecated replaced by {@link #getManagerFactoryClass()}
@@ -116,7 +116,7 @@ class LedgerLayout {
}
/**
- * Get ledger manager factory class
+ * Get ledger manager factory class.
*
* @return ledger manager factory class
*/
@@ -129,7 +129,7 @@ class LedgerLayout {
}
/**
- * Return layout format version
+ * Return layout format version.
*
* @return layout format version
*/
@@ -138,7 +138,7 @@ class LedgerLayout {
}
/**
- * Store the ledger layout into zookeeper
+ * Store the ledger layout into zookeeper.
*/
public void store(final ZooKeeper zk, String ledgersRoot, List<ACL> zkAcls)
throws IOException, KeeperException, InterruptedException {
@@ -149,7 +149,7 @@ class LedgerLayout {
}
/**
- * Delete the LAYOUT from zookeeper
+ * Delete the LAYOUT from zookeeper.
*/
public void delete(final ZooKeeper zk, String ledgersRoot)
throws KeeperException, InterruptedException {
@@ -175,7 +175,7 @@ class LedgerLayout {
}
/**
- * Parses a given byte array and transforms into a LedgerLayout object
+ * Parses a given byte array and transforms into a LedgerLayout object.
*
* @param bytes
* byte array to parse
@@ -195,8 +195,7 @@ class LedgerLayout {
try {
int layoutFormatVersion = Integer.parseInt(lines[0]);
- if (LAYOUT_FORMAT_VERSION < layoutFormatVersion ||
- LAYOUT_MIN_COMPAT_VERSION > layoutFormatVersion) {
+ if (LAYOUT_FORMAT_VERSION < layoutFormatVersion ||
LAYOUT_MIN_COMPAT_VERSION > layoutFormatVersion) {
throw new IOException("Metadata version not compatible.
Expected "
+ LAYOUT_FORMAT_VERSION + ", but got " +
layoutFormatVersion);
}
@@ -227,9 +226,8 @@ class LedgerLayout {
if (!(obj instanceof LedgerLayout)) {
return false;
}
- LedgerLayout other = (LedgerLayout)obj;
- return managerFactoryCls.equals(other.managerFactoryCls)
- && managerVersion == other.managerVersion;
+ LedgerLayout other = (LedgerLayout) obj;
+ return managerFactoryCls.equals(other.managerFactoryCls) &&
managerVersion == other.managerVersion;
}
@Override
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
index fe3c2cf..3d8b693 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
@@ -1,5 +1,3 @@
-package org.apache.bookkeeper.meta;
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,6 +15,7 @@ package org.apache.bookkeeper.meta;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.bookkeeper.meta;
import java.io.Closeable;
import java.io.IOException;
@@ -24,13 +23,12 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
-import org.apache.zookeeper.AsyncCallback;
-import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.client.LedgerMetadata;
-import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataListener;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
+import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataListener;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
import org.apache.bookkeeper.versioning.Version;
+import org.apache.zookeeper.AsyncCallback;
/**
* LedgerManager takes responsibility of ledger management in client side.
@@ -42,7 +40,7 @@ import org.apache.bookkeeper.versioning.Version;
public interface LedgerManager extends Closeable {
/**
- * Create a new ledger with provided ledger id and metadata
+ * Create a new ledger with provided ledger id and metadata.
*
* @param ledgerId
* Ledger id provided to be created
@@ -56,7 +54,7 @@ public interface LedgerManager extends Closeable {
* for other issue</li>
* </ul>
*/
- public void createLedgerMetadata(long ledgerId, LedgerMetadata metadata,
GenericCallback<Void> cb);
+ void createLedgerMetadata(long ledgerId, LedgerMetadata metadata,
GenericCallback<Void> cb);
/**
* Remove a specified ledger metadata by ledgerId and version.
@@ -73,7 +71,7 @@ public interface LedgerManager extends Closeable {
* <li>{@link BKException.Code.ZKException} for other issue</li>
* </ul>
*/
- public void removeLedgerMetadata(long ledgerId, Version version,
GenericCallback<Void> vb);
+ void removeLedgerMetadata(long ledgerId, Version version,
GenericCallback<Void> cb);
/**
* Read ledger metadata of a specified ledger.
@@ -87,7 +85,7 @@ public interface LedgerManager extends Closeable {
* <li>{@link BKException.Code.ZKException} for other issue</li>
* </ul>
*/
- public void readLedgerMetadata(long ledgerId,
GenericCallback<LedgerMetadata> readCb);
+ void readLedgerMetadata(long ledgerId, GenericCallback<LedgerMetadata>
readCb);
/**
* Write ledger metadata.
@@ -103,7 +101,7 @@ public interface LedgerManager extends Closeable {
* <li>{@link BKException.Code.ZKException} for other issue</li>
* </ul>
*/
- public void writeLedgerMetadata(long ledgerId, LedgerMetadata metadata,
GenericCallback<Void> cb);
+ void writeLedgerMetadata(long ledgerId, LedgerMetadata metadata,
GenericCallback<Void> cb);
/**
* Register the ledger metadata <i>listener</i> on <i>ledgerId</i>.
@@ -113,7 +111,7 @@ public interface LedgerManager extends Closeable {
* @param listener
* listener.
*/
- public abstract void registerLedgerMetadataListener(long ledgerId,
LedgerMetadataListener listener);
+ void registerLedgerMetadataListener(long ledgerId, LedgerMetadataListener
listener);
/**
* Unregister the ledger metadata <i>listener</i> on <i>ledgerId</i>.
@@ -123,7 +121,7 @@ public interface LedgerManager extends Closeable {
* @param listener
* ledger metadata listener.
*/
- public abstract void unregisterLedgerMetadataListener(long ledgerId,
LedgerMetadataListener listener);
+ void unregisterLedgerMetadataListener(long ledgerId,
LedgerMetadataListener listener);
/**
* Loop to process all ledgers.
@@ -146,21 +144,21 @@ public interface LedgerManager extends Closeable {
* @param failureRc
* Failure RC code passed to finalCb when exceptions occured.
*/
- public void asyncProcessLedgers(Processor<Long> processor,
AsyncCallback.VoidCallback finalCb,
+ void asyncProcessLedgers(Processor<Long> processor,
AsyncCallback.VoidCallback finalCb,
Object context, int successRc, int
failureRc);
/**
- * Loop to scan a range of metadata from metadata storage
+ * Loop to scan a range of metadata from metadata storage.
*
* @return will return a iterator of the Ranges
*/
- public LedgerRangeIterator getLedgerRanges();
+ LedgerRangeIterator getLedgerRanges();
- /*
+ /**
* Used to represent the Ledgers range returned from the
* current scan.
*/
- public static class LedgerRange {
+ class LedgerRange {
// returned ledgers
private final SortedSet<Long> ledgers;
@@ -187,7 +185,7 @@ public interface LedgerManager extends Closeable {
/**
* Interface of the ledger meta range iterator from
- * storage (e.g. in ZooKeeper or other key/value store)
+ * storage (e.g. in ZooKeeper or other key/value store).
*/
interface LedgerRangeIterator {
@@ -199,7 +197,7 @@ public interface LedgerManager extends Closeable {
* in the case it fails to access the ledger metadata store. Otherwise
it
* will end up deleting all ledgers by accident.
*/
- public boolean hasNext() throws IOException;
+ boolean hasNext() throws IOException;
/**
* Get the next element.
@@ -210,6 +208,6 @@ public interface LedgerManager extends Closeable {
* in the case it fails to access the ledger metadata store. Otherwise
it
* will end up deleting all ledgers by accident.
*/
- public LedgerRange next() throws IOException;
+ LedgerRange next() throws IOException;
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
index 3dc639f..91d83e7 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
@@ -1,5 +1,3 @@
-package org.apache.bookkeeper.meta;
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,22 +15,25 @@ package org.apache.bookkeeper.meta;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.bookkeeper.meta;
import java.io.IOException;
import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.conf.AbstractConfiguration;
+import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.util.ReflectionUtils;
import org.apache.bookkeeper.util.ZkUtils;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ * A factory for creating ledger managers.
+ */
public abstract class LedgerManagerFactory {
static final Logger LOG =
LoggerFactory.getLogger(LedgerManagerFactory.class);
@@ -165,9 +166,9 @@ public abstract class LedgerManagerFactory {
}
// handle V2 layout case
- if (factoryClass != null &&
- !layout.getManagerFactoryClass().equals(factoryClass.getName()) &&
-
conf.getProperty(AbstractConfiguration.LEDGER_MANAGER_FACTORY_DISABLE_CLASS_CHECK)
== null) { // Disable should ONLY happen during compatibility testing.
+ if (factoryClass != null &&
!layout.getManagerFactoryClass().equals(factoryClass.getName())
+ &&
conf.getProperty(AbstractConfiguration.LEDGER_MANAGER_FACTORY_DISABLE_CLASS_CHECK)
== null) {
+ // Disable should ONLY happen during compatibility testing.
throw new IOException("Configured layout " + factoryClass.getName()
+ " does not match existing layout " +
layout.getManagerFactoryClass());
@@ -181,7 +182,8 @@ public abstract class LedgerManagerFactory {
}
factoryClass = theCls.asSubclass(LedgerManagerFactory.class);
} catch (ClassNotFoundException cnfe) {
- throw new IOException("Failed to instantiate ledger manager
factory " + layout.getManagerFactoryClass());
+ throw new IOException("Failed to instantiate ledger manager
factory "
+ + layout.getManagerFactoryClass());
}
}
// instantiate a factory
@@ -243,7 +245,7 @@ public abstract class LedgerManagerFactory {
}
/**
- * Format the ledger metadata for LedgerManager
+ * Format the ledger metadata for LedgerManager.
*
* @param conf
* Configuration instance
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerUnderreplicationManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerUnderreplicationManager.java
index 014c1a8..22abcb6 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerUnderreplicationManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerUnderreplicationManager.java
@@ -17,15 +17,15 @@
*/
package org.apache.bookkeeper.meta;
-import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
-import org.apache.bookkeeper.replication.ReplicationException;
-
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
+import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
+import org.apache.bookkeeper.replication.ReplicationException;
+
/**
- * Interface for marking ledgers which need to be rereplicated
+ * Interface for marking ledgers which need to be rereplicated.
*/
public interface LedgerUnderreplicationManager {
/**
@@ -45,13 +45,13 @@ public interface LedgerUnderreplicationManager {
/**
* Get a list of all the ledgers which have been
* marked for rereplication, filtered by the predicate on the missing
replicas list.
- *
- * Missing replicas list of an underreplicated ledger is the list of the
bookies which are part of
+ *
+ * <p>Missing replicas list of an underreplicated ledger is the list of
the bookies which are part of
* the ensemble of this ledger and are currently unavailable/down.
- *
- * If filtering is not needed then it is suggested to pass null for
predicate,
+ *
+ * <p>If filtering is not needed then it is suggested to pass null for
predicate,
* otherwise it will read the content of the ZNode to decide on filtering.
- *
+ *
* @param predicate filter to use while listing under replicated ledgers.
'null' if filtering is not required
* @return an iterator which returns ledger ids
*/
@@ -79,14 +79,13 @@ public interface LedgerUnderreplicationManager {
/**
- * Release a previously acquired ledger. This allows others to acquire
- * the ledger
+ * Release a previously acquired ledger. This allows others to acquire the
ledger.
*/
void releaseUnderreplicatedLedger(long ledgerId)
throws ReplicationException.UnavailableException;
/**
- * Release all resources held by the ledger underreplication manager
+ * Release all resources held by the ledger underreplication manager.
*/
void close()
throws ReplicationException.UnavailableException;
@@ -95,22 +94,22 @@ public interface LedgerUnderreplicationManager {
* Stop ledger replication. Currently running ledger rereplication tasks
* will be continued and will be stopped from next task. This will block
* ledger replication {@link #Auditor} and {@link
#getLedgerToRereplicate()}
- * tasks
+ * tasks.
*/
void disableLedgerReplication()
throws ReplicationException.UnavailableException;
/**
* Resuming ledger replication. This will allow ledger replication
- * {@link #Auditor} and {@link #getLedgerToRereplicate()} tasks to continue
+ * {@link #Auditor} and {@link #getLedgerToRereplicate()} tasks to
continue.
*/
void enableLedgerReplication()
throws ReplicationException.UnavailableException;
/**
* Check whether the ledger replication is enabled or not. This will return
- * true if the ledger replication is enabled, otherwise return false
- *
+ * true if the ledger replication is enabled, otherwise return false.
+ *
* @return - return true if it is enabled otherwise return false
*/
boolean isLedgerReplicationEnabled()
@@ -118,8 +117,8 @@ public interface LedgerUnderreplicationManager {
/**
* Receive notification asynchronously when the ledger replication process
- * is enabled
- *
+ * is enabled.
+ *
* @param cb
* - callback implementation to receive the notification
*/
@@ -128,8 +127,8 @@ public interface LedgerUnderreplicationManager {
/**
* Creates the zNode for lostBookieRecoveryDelay with the specified value
and returns true.
- * If the node is already existing, then it returns false
- *
+ * If the node is already existing, then it returns false.
+ *
* @param lostBookieRecoveryDelay
* @return
* true if it succeeds in creating zNode for lostBookieRecoveryDelay,
false if it is already existing
@@ -139,24 +138,24 @@ public interface LedgerUnderreplicationManager {
throws ReplicationException.UnavailableException;
/**
- * Setter for the lostBookieRecoveryDelay znode
- *
+ * Setter for the lostBookieRecoveryDelay znode.
+ *
* @param lostBookieRecoveryDelay
* @throws ReplicationException.UnavailableException
*/
void setLostBookieRecoveryDelay(int lostBookieRecoveryDelay) throws
ReplicationException.UnavailableException;
/**
- * Getter for the lostBookieRecoveryDelay
- *
+ * Getter for the lostBookieRecoveryDelay.
+ *
* @return the int value of lostBookieRecoveryDelay
* @throws ReplicationException.UnavailableException
*/
int getLostBookieRecoveryDelay() throws
ReplicationException.UnavailableException;
/**
- * Receive notification asynchronously when the lostBookieRecoveryDelay
value is Changed
- *
+ * Receive notification asynchronously when the lostBookieRecoveryDelay
value is Changed.
+ *
* @param cb
* @throws ReplicationException.UnavailableException
*/
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManager.java
index 60c44f7..11e2314 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManager.java
@@ -37,8 +37,7 @@ import org.slf4j.LoggerFactory;
/**
* Hierarchical Ledger Manager which manages ledger meta in zookeeper using
2-level hierarchical znodes.
*
- * <p>
- * LegacyHierarchicalLedgerManager splits the generated id into 3 parts
(2-4-4):
+ * <p>LegacyHierarchicalLedgerManager splits the generated id into 3 parts
(2-4-4):
* <pre><level1 (2 digits)><level2 (4 digits)><level3 (4
digits)></pre>
* These 3 parts are used to form the actual ledger node path used to store
ledger metadata:
* <pre>(ledgersRootPath)/level1/level2/L(level3)</pre>
@@ -60,9 +59,9 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
return new StringBuilder();
}
};
-
+
/**
- * Constructor
+ * Constructor.
*
* @param conf
* Configuration object
@@ -92,7 +91,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
//
/**
- * Get the smallest cache id in a specified node /level1/level2
+ * Get the smallest cache id in a specified node /level1/level2.
*
* @param level1
* 1st level node name
@@ -105,7 +104,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
}
/**
- * Get the largest cache id in a specified node /level1/level2
+ * Get the largest cache id in a specified node /level1/level2.
*
* @param level1
* 1st level node name
@@ -148,7 +147,8 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
}
protected static boolean isSpecialZnode(String znode) {
- return IDGEN_ZNODE.equals(znode) ||
LongHierarchicalLedgerManager.IDGEN_ZNODE.equals(znode) ||
AbstractHierarchicalLedgerManager.isSpecialZnode(znode);
+ return IDGEN_ZNODE.equals(znode) ||
LongHierarchicalLedgerManager.IDGEN_ZNODE.equals(znode)
+ || AbstractHierarchicalLedgerManager.isSpecialZnode(znode);
}
@Override
@@ -157,7 +157,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
}
/**
- * Iterator through each metadata bucket with hierarchical mode
+ * Iterator through each metadata bucket with hierarchical mode.
*/
private class HierarchicalLedgerRangeIterator implements
LedgerRangeIterator {
private Iterator<String> l1NodesIter = null;
@@ -167,7 +167,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
private LedgerRange nextRange = null;
/**
- * iterate next level1 znode
+ * Iterate next level1 znode.
*
* @return false if have visited all level1 nodes
* @throws InterruptedException/KeeperException if error occurs
reading zookeeper children
@@ -195,7 +195,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
return true;
}
- synchronized private void preload() throws IOException {
+ private synchronized void preload() throws IOException {
while (nextRange == null && !iteratorDone) {
boolean hasMoreElements = false;
try {
@@ -227,13 +227,13 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
}
@Override
- synchronized public boolean hasNext() throws IOException {
+ public synchronized boolean hasNext() throws IOException {
preload();
return nextRange != null && !iteratorDone;
}
@Override
- synchronized public LedgerRange next() throws IOException {
+ public synchronized LedgerRange next() throws IOException {
if (!hasNext()) {
throw new NoSuchElementException();
}
@@ -243,7 +243,7 @@ class LegacyHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager
}
/**
- * Get a single node level1/level2
+ * Get a single node level1/level2.
*
* @param level1
* 1st level node name
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManagerFactory.java
index 1ac4038..1d82d95 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LegacyHierarchicalLedgerManagerFactory.java
@@ -1,5 +1,3 @@
-package org.apache.bookkeeper.meta;
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -17,20 +15,21 @@ package org.apache.bookkeeper.meta;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.bookkeeper.meta;
import java.io.IOException;
import java.util.List;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.ZKUtil;
+import org.apache.bookkeeper.conf.AbstractConfiguration;
import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.util.ZkUtils;
-import org.apache.bookkeeper.conf.AbstractConfiguration;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.ZKUtil;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
/**
- * Hierarchical Ledger Manager Factory
+ * Hierarchical Ledger Manager Factory.
*/
public class LegacyHierarchicalLedgerManagerFactory extends
LedgerManagerFactory {
@@ -68,7 +67,8 @@ public class LegacyHierarchicalLedgerManagerFactory extends
LedgerManagerFactory
@Override
public LedgerIdGenerator newLedgerIdGenerator() {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- return new ZkLedgerIdGenerator(zk, conf.getZkLedgersRootPath(),
LegacyHierarchicalLedgerManager.IDGEN_ZNODE, zkAcls);
+ return new ZkLedgerIdGenerator(zk, conf.getZkLedgersRootPath(),
LegacyHierarchicalLedgerManager.IDGEN_ZNODE,
+ zkAcls);
}
@Override
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManager.java
index b01886e..d9f2c1f 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManager.java
@@ -39,24 +39,22 @@ import org.slf4j.LoggerFactory;
/**
* LongHierarchical Ledger Manager which manages ledger meta in zookeeper
using 5-level hierarchical znodes.
*
- * <p>
- * LongHierarchicalLedgerManager splits the generated id into 5 parts
(3-4-4-4-4):
+ * <p>LongHierarchicalLedgerManager splits the generated id into 5 parts
(3-4-4-4-4):
*
* <pre>
* <level0 (3 digits)><level1 (4 digits)><level2 (4
digits)><level3 (4 digits)>
* <level4 (4 digits)>
* </pre>
*
- * These 5 parts are used to form the actual ledger node path used to store
ledger metadata:
+ * <p>These 5 parts are used to form the actual ledger node path used to store
ledger metadata:
*
* <pre>
* (ledgersRootPath) / level0 / level1 / level2 / level3 / L(level4)
* </pre>
*
- * E.g Ledger 0000000000000000001 is split into 5 parts <i>000</i>,
<i>0000</i>, <i>0000</i>, <i>0000</i>, <i>0001</i>,
- * which is stored in <i>(ledgersRootPath)/000/0000/0000/0000/L0001</i>. So
each znode could have at most 10000 ledgers,
- * which avoids errors during garbage collection due to lists of children that
are too long.
- *
+ * <p>E.g Ledger 0000000000000000001 is split into 5 parts <i>000</i>,
<i>0000</i>, <i>0000</i>, <i>0000</i>,
+ * <i>0001</i>, which is stored in
<i>(ledgersRootPath)/000/0000/0000/0000/L0001</i>. So each znode could have at
most
+ * 10000 ledgers, which avoids errors during garbage collection due to lists
of children that are too long.
*/
class LongHierarchicalLedgerManager extends AbstractHierarchicalLedgerManager {
@@ -68,7 +66,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
/**
- * Constructor
+ * Constructor.
*
* @param conf
* Configuration object
@@ -87,7 +85,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
String hierarchicalPath = pathName.substring(ledgerRootPath.length() +
1);
return StringUtils.stringToLongHierarchicalLedgerId(hierarchicalPath);
}
-
+
@Override
public String getLedgerPath(long ledgerId) {
return ledgerRootPath +
StringUtils.getLongHierarchicalLedgerPath(ledgerId);
@@ -98,7 +96,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
//
/**
- * Get the smallest cache id in a specified node
/level0/level1/level2/level3
+ * Get the smallest cache id in a specified node
/level0/level1/level2/level3.
*
* @param level0
* 1st level node name
@@ -116,7 +114,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
}
/**
- * Get the largest cache id in a specified node
/level0/level1/level2/level3
+ * Get the largest cache id in a specified node
/level0/level1/level2/level3.
*
* @param level0
* 1st level node name
@@ -148,7 +146,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
// hierarchical paths (2-4-4)
return LegacyHierarchicalLedgerManager.isSpecialZnode(znode) ||
znode.length() < 3;
}
-
+
private class RecursiveProcessor implements Processor<String> {
private final int level;
private final String path;
@@ -191,7 +189,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
}
/**
- * Iterator through each metadata bucket with hierarchical mode
+ * Iterator through each metadata bucket with hierarchical mode.
*/
private class LongHierarchicalLedgerRangeIterator implements
LedgerRangeIterator {
private List<Iterator<String>> levelNodesIter;
@@ -206,7 +204,8 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
curLevelNodes = new ArrayList<String>(Collections.nCopies(4,
(String) null));
}
- synchronized private void initialize(String path, int level) throws
KeeperException, InterruptedException, IOException {
+ private synchronized void initialize(String path, int level) throws
KeeperException, InterruptedException,
+ IOException {
List<String> levelNodes = zk.getChildren(path, null);
Collections.sort(levelNodes);
if (level == 0) {
@@ -245,12 +244,12 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
}
private void clearHigherLevels(int level) {
- for(int i = level+1; i < 4; i++) {
+ for (int i = level + 1; i < 4; i++) {
curLevelNodes.set(i, null);
}
}
- synchronized private boolean moveToNext(int level) throws
KeeperException, InterruptedException {
+ private synchronized boolean moveToNext(int level) throws
KeeperException, InterruptedException {
Iterator<String> curLevelNodesIter = levelNodesIter.get(level);
boolean movedToNextNode = false;
if (level == 0) {
@@ -293,7 +292,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
return movedToNextNode;
}
- synchronized private void preload() throws IOException,
KeeperException, InterruptedException {
+ private synchronized void preload() throws IOException,
KeeperException, InterruptedException {
if (!iteratorDone && !initialized) {
initialize(ledgerRootPath, 0);
}
@@ -308,7 +307,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
}
@Override
- synchronized public boolean hasNext() throws IOException {
+ public synchronized boolean hasNext() throws IOException {
try {
preload();
} catch (KeeperException ke) {
@@ -321,7 +320,7 @@ class LongHierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
}
@Override
- synchronized public LedgerRange next() throws IOException {
+ public synchronized LedgerRange next() throws IOException {
if (!hasNext()) {
throw new NoSuchElementException();
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManagerFactory.java
index 06e7b9e..93ad9dd 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongHierarchicalLedgerManagerFactory.java
@@ -17,6 +17,9 @@
*/
package org.apache.bookkeeper.meta;
+/**
+ * LongHierarchical Ledger Manager Factory.
+ */
public class LongHierarchicalLedgerManagerFactory extends
HierarchicalLedgerManagerFactory {
public static final String NAME = "longhierarchical";
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongZkLedgerIdGenerator.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongZkLedgerIdGenerator.java
index f410744..5f7c4d8 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongZkLedgerIdGenerator.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LongZkLedgerIdGenerator.java
@@ -26,11 +26,11 @@ import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
import org.apache.bookkeeper.util.ZkUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.zookeeper.AsyncCallback.StringCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.AsyncCallback.StringCallback;
import org.apache.zookeeper.ZooDefs.Ids;
+import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,16 +43,16 @@ import org.slf4j.LoggerFactory;
* fundamentally limited to 9 billion. In practice, the id generated by
zookeeper
* is only 31 bits (signed 32-bit integer), so the limit is much lower than 9
billion.
*
- * In order to support the full range of the long ledgerId, once ledgerIds
reach Integer.MAX_INT,
+ * <p>In order to support the full range of the long ledgerId, once ledgerIds
reach Integer.MAX_INT,
* a new system is employed. The 32 most significant bits of the ledger ID are
taken and turned into
* a directory prefixed with <i>HOB-</i> under <i>(ledgerIdGenPath)</i>
*
- * Under this <i>HOB-</i> directory, zookeeper is used to continue generating
EPHEMERAL_SEQUENTIAL ids
- * which constitute the lower 32-bits of the ledgerId (sign bit is always 0).
Once the <i>HOB-</i> directory runs out of available
- * ids, the process is repeated. The higher bits are incremented, a new
<i>HOB-</i> directory is created, and
- * zookeeper generates sequential ids underneath it.
+ * <p>Under this <i>HOB-</i> directory, zookeeper is used to continue
generating EPHEMERAL_SEQUENTIAL ids
+ * which constitute the lower 32-bits of the ledgerId (sign bit is always 0).
Once the <i>HOB-</i> directory runs out
+ * of available ids, the process is repeated. The higher bits are incremented,
a new <i>HOB-</i> directory is created,
+ * and zookeeper generates sequential ids underneath it.
*
- * The reason for treating ids which are less than Integer.MAX_INT differently
is to maintain backwards
+ * <p>The reason for treating ids which are less than Integer.MAX_INT
differently is to maintain backwards
* compatibility. This is a drop-in replacement for ZkLedgerIdGenerator.
*/
public class LongZkLedgerIdGenerator implements LedgerIdGenerator {
@@ -70,7 +70,8 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
NOT_PRESENT
}
- public LongZkLedgerIdGenerator(ZooKeeper zk, String ledgersPath, String
idGenZnodeName, ZkLedgerIdGenerator shortIdGen, List<ACL> zkAcls) {
+ public LongZkLedgerIdGenerator(ZooKeeper zk, String ledgersPath, String
idGenZnodeName,
+ ZkLedgerIdGenerator shortIdGen, List<ACL> zkAcls) {
this.zk = zk;
if (StringUtils.isBlank(idGenZnodeName)) {
this.ledgerIdGenPath = ledgersPath;
@@ -83,27 +84,25 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
this.zkAcls = zkAcls;
}
- private void generateLongLedgerIdLowBits(final String ledgerPrefix, long
highBits, final GenericCallback<Long> cb) throws KeeperException,
InterruptedException, IOException {
- String highPath = ledgerPrefix + formatHalfId((int)highBits);
+ private void generateLongLedgerIdLowBits(final String ledgerPrefix, long
highBits, final GenericCallback<Long> cb)
+ throws KeeperException, InterruptedException, IOException {
+ String highPath = ledgerPrefix + formatHalfId((int) highBits);
ZkLedgerIdGenerator.generateLedgerIdImpl(new GenericCallback<Long>(){
@Override
public void operationComplete(int rc, Long result) {
- if(rc == BKException.Code.OK) {
+ if (rc == BKException.Code.OK) {
assert((highBits & 0xFFFFFFFF00000000L) == 0);
assert((result & 0xFFFFFFFF00000000L) == 0);
cb.operationComplete(rc, (highBits << 32) | result);
- }
- else if(rc == BKException.Code.LedgerIdOverflowException) {
+ } else if (rc == BKException.Code.LedgerIdOverflowException) {
// Lower bits are full. Need to expand and create another
HOB node.
try {
Long newHighBits = highBits + 1;
createHOBPathAndGenerateId(ledgerPrefix,
newHighBits.intValue(), cb);
- }
- catch (KeeperException e) {
+ } catch (KeeperException e) {
LOG.error("Failed to create long ledger ID path", e);
cb.operationComplete(BKException.Code.ZKException,
null);
- }
- catch (InterruptedException e) {
+ } catch (InterruptedException e) {
LOG.error("Failed to create long ledger ID path", e);
cb.operationComplete(BKException.Code.InterruptedException, null);
} catch (IOException e) {
@@ -118,7 +117,7 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
}
/**
- * Formats half an ID as 10-character 0-padded string
+ * Formats half an ID as 10-character 0-padded string.
* @param i - 32 bits of the ID to format
* @return a 10-character 0-padded string.
*/
@@ -126,14 +125,14 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
return String.format("%010d", i);
}
- private void createHOBPathAndGenerateId(String ledgerPrefix, int hob,
final GenericCallback<Long> cb) throws KeeperException, InterruptedException,
IOException {
+ private void createHOBPathAndGenerateId(String ledgerPrefix, int hob,
final GenericCallback<Long> cb)
+ throws KeeperException, InterruptedException, IOException {
try {
if (LOG.isDebugEnabled()) {
LOG.debug("Creating HOB path: {}", ledgerPrefix +
formatHalfId(hob));
}
zk.create(ledgerPrefix + formatHalfId(hob), new byte[0],
Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- }
- catch(KeeperException.NodeExistsException e) {
+ } catch (KeeperException.NodeExistsException e) {
// It's fine if we lost a race to create the node
(NodeExistsException).
// All other exceptions should continue unwinding.
if (LOG.isDebugEnabled()) {
@@ -149,13 +148,14 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
highOrderDirectories = null;
}
- private void generateLongLedgerId(final GenericCallback<Long> cb) throws
KeeperException, InterruptedException, IOException {
+ private void generateLongLedgerId(final GenericCallback<Long> cb) throws
KeeperException, InterruptedException,
+ IOException {
final String hobPrefix = "HOB-";
final String ledgerPrefix = this.ledgerIdGenPath + "/" + hobPrefix;
// Only pull the directories from zk if we don't have any cached.
boolean refreshedDirectories = false;
- if(highOrderDirectories == null) {
+ if (highOrderDirectories == null) {
refreshedDirectories = true;
highOrderDirectories = zk.getChildren(ledgerIdGenPath, false);
}
@@ -164,8 +164,7 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
.map((t) -> {
try {
return Long.parseLong(t.replace(hobPrefix, ""));
- }
- catch(NumberFormatException e) {
+ } catch (NumberFormatException e) {
return null;
}
})
@@ -173,13 +172,12 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
.reduce(Math::max);
// If we didn't get any valid IDs from the directory...
- if(!largest.isPresent()) {
- if(!refreshedDirectories) {
+ if (!largest.isPresent()) {
+ if (!refreshedDirectories) {
// Our cache might be bad. Invalidate it and retry.
invalidateDirectoryCache();
generateLongLedgerId(cb); // Try again
- }
- else {
+ } else {
// else, Start at HOB-0000000001;
createHOBPathAndGenerateId(ledgerPrefix, 1, cb);
}
@@ -193,13 +191,12 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
// Perform garbage collection on HOB- directories.
// Keeping 3 should be plenty to prevent races
- if(highOrderDirectories.size() > 3) {
+ if (highOrderDirectories.size() > 3) {
Object[] highOrderDirs = highOrderDirectories.stream()
.map((t) -> {
try {
return Long.parseLong(t.replace(hobPrefix,
""));
- }
- catch(NumberFormatException e) {
+ } catch (NumberFormatException e) {
return null;
}
})
@@ -210,15 +207,14 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
// Go ahead and invalidate. We want to reload cache even if we
fail.
invalidateDirectoryCache();
- for(int i = 0; i < highOrderDirs.length - 3; i++) {
- String path = ledgerPrefix +
formatHalfId(((Long)highOrderDirs[i]).intValue());
+ for (int i = 0; i < highOrderDirs.length - 3; i++) {
+ String path = ledgerPrefix + formatHalfId(((Long)
highOrderDirs[i]).intValue());
if (LOG.isDebugEnabled()) {
LOG.debug("DELETING HIGH ORDER DIR: {}", path);
}
try {
zk.delete(path, 0);
- }
- catch (KeeperException e) {
+ } catch (KeeperException e) {
// We don't care if we fail. Just warn about it.
if (LOG.isDebugEnabled()) {
LOG.debug("Failed to delete {}", path);
@@ -230,34 +226,34 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
private void createLongLedgerIdPathAndGenerateLongLedgerId(final
GenericCallback<Long> cb, String createPath) {
ZkUtils.asyncCreateFullPathOptimistic(zk, ledgerIdGenPath, new
byte[0], Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT, new
StringCallback() {
- @Override
- public void
processResult(int rc, String path, Object ctx, String name) {
- try {
-
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.PRESENT);
-
generateLongLedgerId(cb);
- } catch
(KeeperException e) {
-
LOG.error("Failed to create long ledger ID path", e);
-
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
-
cb.operationComplete(BKException.Code.ZKException, null);
- } catch
(InterruptedException e) {
-
LOG.error("Failed to create long ledger ID path", e);
-
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
-
cb.operationComplete(BKException.Code.InterruptedException, null);
- } catch (IOException
e) {
-
LOG.error("Failed to create long ledger ID path", e);
-
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
-
cb.operationComplete(BKException.Code.IllegalOpException, null);
- }
- }
- }, null);
+ CreateMode.PERSISTENT, new StringCallback() {
+ @Override
+ public void processResult(int rc, String path, Object ctx,
String name) {
+ try {
+
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.PRESENT);
+ generateLongLedgerId(cb);
+ } catch (KeeperException e) {
+ LOG.error("Failed to create long ledger ID path",
e);
+
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
+ cb.operationComplete(BKException.Code.ZKException,
null);
+ } catch (InterruptedException e) {
+ LOG.error("Failed to create long ledger ID path",
e);
+
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
+
cb.operationComplete(BKException.Code.InterruptedException, null);
+ } catch (IOException e) {
+ LOG.error("Failed to create long ledger ID path",
e);
+
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
+
cb.operationComplete(BKException.Code.IllegalOpException, null);
+ }
+ }
+ }, null);
}
public void invalidateLedgerIdGenPathStatus() {
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus.UNKNOWN);
}
- synchronized private void
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus status) {
+ private synchronized void
setLedgerIdGenPathStatus(HighOrderLedgerIdGenPathStatus status) {
ledgerIdGenPathStatus = status;
}
@@ -272,14 +268,13 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
* @throws KeeperException
* @throws InterruptedException
*/
- synchronized public boolean ledgerIdGenPathPresent(ZooKeeper zk) throws
KeeperException, InterruptedException {
+ public synchronized boolean ledgerIdGenPathPresent(ZooKeeper zk) throws
KeeperException, InterruptedException {
switch(ledgerIdGenPathStatus) {
case UNKNOWN:
- if(zk.exists(ledgerIdGenPath, false) != null) {
+ if (zk.exists(ledgerIdGenPath, false) != null) {
ledgerIdGenPathStatus = HighOrderLedgerIdGenPathStatus.PRESENT;
return true;
- }
- else {
+ } else {
ledgerIdGenPathStatus =
HighOrderLedgerIdGenPathStatus.NOT_PRESENT;
return false;
}
@@ -295,24 +290,22 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
@Override
public void generateLedgerId(final GenericCallback<Long> cb) {
try {
- if(!ledgerIdGenPathPresent(zk)) {
+ if (!ledgerIdGenPathPresent(zk)) {
// We've not moved onto 63-bit ledgers yet.
shortIdGen.generateLedgerId(new GenericCallback<Long>(){
@Override
public void operationComplete(int rc, Long result) {
- if(rc ==
BKException.Code.LedgerIdOverflowException) {
+ if (rc ==
BKException.Code.LedgerIdOverflowException) {
// 31-bit IDs overflowed. Start using 63-bit
ids.
createLongLedgerIdPathAndGenerateLongLedgerId(cb, ledgerIdGenPath);
- }
- else {
+ } else {
// 31-bit Generation worked OK, or had some
other
// error that we will pass on.
cb.operationComplete(rc, result);
}
}
});
- }
- else {
+ } else {
// We've already started generating 63-bit ledger IDs.
// Keep doing that.
generateLongLedgerId(cb);
@@ -320,12 +313,10 @@ public class LongZkLedgerIdGenerator implements
LedgerIdGenerator {
} catch (KeeperException e) {
LOG.error("Failed to create long ledger ID path", e);
cb.operationComplete(BKException.Code.ZKException, null);
- }
- catch (InterruptedException e) {
+ } catch (InterruptedException e) {
LOG.error("Failed to create long ledger ID path", e);
cb.operationComplete(BKException.Code.InterruptedException, null);
- }
- catch (IOException e) {
+ } catch (IOException e) {
LOG.error("Failed to create long ledger ID path", e);
cb.operationComplete(BKException.Code.IllegalOpException, null);
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
index 6612683..47149d6 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
@@ -17,21 +17,24 @@
*/
package org.apache.bookkeeper.meta;
-import com.google.common.base.Optional;
import static org.apache.bookkeeper.metastore.MetastoreTable.ALL_FIELDS;
import static org.apache.bookkeeper.metastore.MetastoreTable.NON_FIELDS;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.bookkeeper.client.BKException;
@@ -56,27 +59,25 @@ import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataLis
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
import org.apache.bookkeeper.replication.ReplicationException;
import org.apache.bookkeeper.util.StringUtils;
+import org.apache.bookkeeper.util.ZkUtils;
import org.apache.bookkeeper.versioning.Version;
import org.apache.bookkeeper.versioning.Versioned;
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.ACL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import java.util.List;
-import org.apache.bookkeeper.util.ZkUtils;
-import org.apache.zookeeper.data.ACL;
/**
- * MetaStore Based Ledger Manager Factory
+ * MetaStore Based Ledger Manager Factory.
*/
public class MSLedgerManagerFactory extends LedgerManagerFactory {
- private final static Logger LOG =
LoggerFactory.getLogger(MSLedgerManagerFactory.class);
+ private static final Logger LOG =
LoggerFactory.getLogger(MSLedgerManagerFactory.class);
- static int MS_CONNECT_BACKOFF_MS = 200;
+ private static final int MS_CONNECT_BACKOFF_MS = 200;
public static final int CUR_VERSION = 1;
@@ -238,7 +239,7 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
scheduler.submit(new Runnable() {
@Override
public void run() {
- synchronized(listenerSet) {
+ synchronized (listenerSet) {
for (LedgerMetadataListener listener :
listenerSet) {
listener.onChanged(ledgerId, result);
}
@@ -295,9 +296,9 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
Set<LedgerMetadataListener> listenerSet =
listeners.get(ledgerId);
if (listenerSet != null) {
synchronized (listenerSet) {
- for(LedgerMetadataListener l : listenerSet){
+ for (LedgerMetadataListener l : listenerSet){
unregisterLedgerMetadataListener(ledgerId, l);
- l.onChanged( ledgerId, null );
+ l.onChanged(ledgerId, null);
}
}
}
@@ -423,8 +424,8 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
}
LedgerMetadata metadata;
try {
- metadata = LedgerMetadata
-
.parseConfig(value.getValue().getField(META_FIELD), value.getVersion(),
Optional.<Long>absent());
+ metadata =
LedgerMetadata.parseConfig(value.getValue().getField(META_FIELD),
+ value.getVersion(), Optional.<Long>absent());
} catch (IOException e) {
LOG.error("Could not parse ledger metadata for ledger
" + ledgerId + " : ", e);
readCb.operationComplete(BKException.Code.MetaStoreException, null);
@@ -635,7 +636,7 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
ScheduledExecutorService scheduler;
/**
- * Constructor
+ * Constructor.
*
* @param scheduler
* Executor used to prevent long stack chains
@@ -645,7 +646,7 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
}
/**
- * Process set of items
+ * Process set of items.
*
* @param data
* Set of data to process
@@ -685,7 +686,7 @@ public class MSLedgerManagerFactory extends
LedgerManagerFactory {
final AsyncCallback.VoidCallback stub = this;
scheduler.submit(new Runnable() {
@Override
- public final void run() {
+ public void run() {
processor.process(dataToProcess, stub);
}
});
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerIdGenerator.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerIdGenerator.java
index 03e471c..c5d5346 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerIdGenerator.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerIdGenerator.java
@@ -73,7 +73,8 @@ public class ZkLedgerIdGenerator implements LedgerIdGenerator
{
generateLedgerIdImpl(cb, zk, ledgerPrefix, zkAcls);
}
- public static void generateLedgerIdImpl(final GenericCallback<Long> cb,
ZooKeeper zk, String ledgerPrefix, List<ACL> zkAcls) {
+ public static void generateLedgerIdImpl(final GenericCallback<Long> cb,
ZooKeeper zk, String ledgerPrefix,
+ List<ACL> zkAcls) {
ZkUtils.asyncCreateFullPathOptimistic(zk, ledgerPrefix, new byte[0],
zkAcls,
CreateMode.EPHEMERAL_SEQUENTIAL,
new StringCallback() {
@@ -92,10 +93,9 @@ public class ZkLedgerIdGenerator implements
LedgerIdGenerator {
long ledgerId;
try {
ledgerId = getLedgerIdFromGenPath(idPathName,
ledgerPrefix);
- if(ledgerId < 0 || ledgerId >= Integer.MAX_VALUE) {
+ if (ledgerId < 0 || ledgerId >= Integer.MAX_VALUE)
{
cb.operationComplete(BKException.Code.LedgerIdOverflowException, null);
- }
- else {
+ } else {
cb.operationComplete(BKException.Code.OK,
ledgerId);
}
} catch (IOException e) {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
index e56ee30..35b76d5 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
@@ -20,6 +20,10 @@ package org.apache.bookkeeper.meta;
import static com.google.common.base.Charsets.UTF_8;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
+import com.google.protobuf.TextFormat;
+
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Collections;
@@ -57,29 +61,25 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Joiner;
-import com.google.protobuf.TextFormat;
-
/**
* ZooKeeper implementation of underreplication manager.
* This is implemented in a heirarchical fashion, so it'll work with
* FlatLedgerManagerFactory and HierarchicalLedgerManagerFactory.
*
- * Layout is:
+ * <p>Layout is:
* /root/underreplication/ LAYOUT
* ledgers/(hierarchicalpath)/urL(ledgerId)
* locks/(ledgerId)
*
- * The hierarchical path is created by splitting the ledger into 4 2byte
+ * <p>The hierarchical path is created by splitting the ledger into 4 2byte
* segments which are represented in hexidecimal.
* e.g. For ledger id 0xcafebeef0000feed, the path is
* cafe/beef/0000/feed/
*/
public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationManager {
static final Logger LOG =
LoggerFactory.getLogger(ZkLedgerUnderreplicationManager.class);
- static final String LAYOUT="BASIC";
- static final int LAYOUT_VERSION=1;
+ static final String LAYOUT = "BASIC";
+ static final int LAYOUT_VERSION = 1;
private static final byte[] LOCK_DATA = getLockData();
@@ -92,8 +92,13 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
this.ledgerZNodeVersion = ledgerZNodeVersion;
}
- String getLockZNode() { return lockZNode; }
- int getLedgerZNodeVersion() { return ledgerZNodeVersion; }
+ String getLockZNode() {
+ return lockZNode;
+ }
+
+ int getLedgerZNodeVersion() {
+ return ledgerZNodeVersion;
+ }
}
private final Map<Long, Lock> heldLocks = new ConcurrentHashMap<Long,
Lock>();
private final Pattern idExtractionPattern;
@@ -116,7 +121,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
+ BookKeeperConstants.DEFAULT_ZK_LEDGERS_ROOT_PATH;
urLockPath = basePath + '/' +
BookKeeperConstants.UNDER_REPLICATION_LOCK;
lostBookieRecoveryDelayZnode = basePath + '/' +
BookKeeperConstants.LOSTBOOKIERECOVERYDELAY_NODE;
-
+
idExtractionPattern = Pattern.compile("urL(\\d+)$");
this.zkc = zkc;
this.subTreeCache = new SubTreeCache(new SubTreeCache.TreeProvider() {
@@ -160,8 +165,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
while (true) {
if (zkc.exists(layoutZNode, false) == null) {
- LedgerRereplicationLayoutFormat.Builder builder
- = LedgerRereplicationLayoutFormat.newBuilder();
+ LedgerRereplicationLayoutFormat.Builder builder =
LedgerRereplicationLayoutFormat.newBuilder();
builder.setType(LAYOUT).setVersion(LAYOUT_VERSION);
try {
zkc.create(layoutZNode,
TextFormat.printToString(builder.build()).getBytes(UTF_8),
@@ -173,8 +177,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} else {
byte[] layoutData = zkc.getData(layoutZNode, false, null);
- LedgerRereplicationLayoutFormat.Builder builder
- = LedgerRereplicationLayoutFormat.newBuilder();
+ LedgerRereplicationLayoutFormat.Builder builder =
LedgerRereplicationLayoutFormat.newBuilder();
try {
TextFormat.merge(new String(layoutData, UTF_8), builder);
@@ -348,13 +351,13 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
/**
* Get a list of all the ledgers which have been
* marked for rereplication, filtered by the predicate on the replicas
list.
- *
- * Replicas list of an underreplicated ledger is the list of the bookies
which are part of
+ *
+ * <p>Replicas list of an underreplicated ledger is the list of the
bookies which are part of
* the ensemble of this ledger and are currently unavailable/down.
- *
- * If filtering is not needed then it is suggested to pass null for
predicate,
+ *
+ * <p>If filtering is not needed then it is suggested to pass null for
predicate,
* otherwise it will read the content of the ZNode to decide on filtering.
- *
+ *
* @param predicate filter to use while listing under replicated ledgers.
'null' if filtering is not required.
* @return an iterator which returns ledger ids
*/
@@ -692,7 +695,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
/**
- * Check whether the ledger is being replicated by any bookie
+ * Check whether the ledger is being replicated by any bookie.
*/
public static boolean isLedgerBeingReplicated(ZooKeeper zkc, String
zkLedgersRootPath, long ledgerId)
throws KeeperException,
@@ -701,7 +704,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
/**
- * Acquire the underreplicated ledger lock
+ * Acquire the underreplicated ledger lock.
*/
public static void acquireUnderreplicatedLedgerLock(ZooKeeper zkc, String
zkLedgersRootPath,
long ledgerId, List<ACL> zkAcls)
@@ -711,7 +714,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
/**
- * Release the underreplicated ledger lock if it exists
+ * Release the underreplicated ledger lock if it exists.
*/
public static void releaseUnderreplicatedLedgerLock(ZooKeeper zkc, String
zkLedgersRootPath, long ledgerId)
throws InterruptedException, KeeperException {
@@ -727,8 +730,8 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
zkc.create(lostBookieRecoveryDelayZnode,
Integer.toString(lostBookieRecoveryDelay).getBytes(UTF_8),
Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
} catch (KeeperException.NodeExistsException ke) {
- LOG.info(
- "lostBookieRecoveryDelay Znode is already present, so
using existing lostBookieRecoveryDelay Znode value");
+ LOG.info("lostBookieRecoveryDelay Znode is already present, so
using "
+ + "existing lostBookieRecoveryDelay Znode value");
return false;
} catch (KeeperException ke) {
LOG.error("Error while initializing LostBookieRecoveryDelay", ke);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/package-info.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/package-info.java
new file mode 100644
index 0000000..0cc7ba4
--- /dev/null
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Classes for interacting with bookkeeper ledgers and ledger metadata.
+ */
+package org.apache.bookkeeper.meta;
diff --git a/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
b/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
index 5c6bef7..a8371d6 100644
--- a/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
+++ b/buildtools/src/main/resources/bookkeeper/server-suppressions.xml
@@ -24,7 +24,6 @@
<suppress checks=".*" files=".*[\\/]bookie[\\/].*"/>
<suppress checks=".*"
files=".*[\\/]client[\\/](?:[^\\/]+$|(?!api)|(?!impl)[^\\/]+[\\/])"/>
<suppress checks=".*" files=".*[\\/]http[\\/].*"/>
- <suppress checks=".*" files=".*[\\/]meta[\\/].*"/>
<suppress checks=".*" files=".*[\\/]metastore[\\/].*"/>
<suppress checks=".*" files=".*[\\/]net[\\/].*"/>
<suppress checks=".*" files=".*[\\/]proto[\\/].*"/>
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].