This is an automated email from the ASF dual-hosted git repository.
shoothzj 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 5571779402 Add Cookie to LocalBookie (#4052)
5571779402 is described below
commit 5571779402c1cf2724bbd0422fed9e7b2decee81
Author: Lishen Yao <[email protected]>
AuthorDate: Tue Apr 2 07:44:34 2024 +0800
Add Cookie to LocalBookie (#4052)
### Motivation
I tried to use command `bin/bookkeeper shell listbookies -a` to get all
bookies from localbookie, it raised error
```
ERROR Fail to process command 'list'
org.apache.bookkeeper.client.BKException$ZKException: Error while using
ZooKeeper
at
org.apache.bookkeeper.discover.ZKRegistrationClient.lambda$getChildren$4(ZKRegistrationClient.java:352)
~[bookkeeper-server-4.17.0-SNAPSHOT.jar:4.17.0-SNAPSHOT]
at
org.apache.bookkeeper.zookeeper.ZooKeeperClient$25$1.processResult(ZooKeeperClient.java:1177)
~[bookkeeper-server-4.17.0-SNAPSHOT.jar:4.17.0-SNAPSHOT]
at
org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:668)
~[zookeeper-3.8.1.jar:3.8.1]
at
org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:553)
~[zookeeper-3.8.1.jar:3.8.1]
Caused by: org.apache.zookeeper.KeeperException$NoNodeException:
KeeperErrorCode = NoNode for /ledgers/cookies
at
org.apache.zookeeper.KeeperException.create(KeeperException.java:118)
~[zookeeper-3.8.1.jar:3.8.1]
at
org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
~[zookeeper-3.8.1.jar:3.8.1]
at
org.apache.bookkeeper.discover.ZKRegistrationClient.lambda$getChildren$4(ZKRegistrationClient.java:351)
~[bookkeeper-server-4.17.0-SNAPSHOT.jar:4.17.0-SNAPSHOT]
... 3 more
```
The reason is that no /ledgers/cookies are created in ZK when starting the
local bk server. After applying this change, the command works.
---
.../src/main/java/org/apache/bookkeeper/util/LocalBookKeeper.java | 7 +++++++
1 file changed, 7 insertions(+)
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 ca467ab297..0c793eb4e5 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
@@ -18,6 +18,7 @@
package org.apache.bookkeeper.util;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.bookkeeper.server.Main.storageDirectoriesFromConf;
import static org.apache.bookkeeper.util.BookKeeperConstants.AVAILABLE_NODE;
import static org.apache.bookkeeper.util.BookKeeperConstants.READONLY;
@@ -38,8 +39,10 @@ import java.util.stream.Collectors;
import org.apache.bookkeeper.bookie.Bookie;
import org.apache.bookkeeper.bookie.BookieImpl;
import org.apache.bookkeeper.bookie.BookieResources;
+import org.apache.bookkeeper.bookie.CookieValidation;
import org.apache.bookkeeper.bookie.LedgerDirsManager;
import org.apache.bookkeeper.bookie.LedgerStorage;
+import org.apache.bookkeeper.bookie.LegacyCookieValidation;
import org.apache.bookkeeper.bookie.UncleanShutdownDetection;
import org.apache.bookkeeper.bookie.UncleanShutdownDetectionImpl;
import org.apache.bookkeeper.common.allocator.ByteBufAllocatorWithOomHandler;
@@ -526,6 +529,10 @@ public class LocalBookKeeper implements AutoCloseable {
LedgerStorage storage = BookieResources.createLedgerStorage(
conf, ledgerManager, ledgerDirsManager, indexDirsManager,
NullStatsLogger.INSTANCE, allocator);
+
+ CookieValidation cookieValidation = new
LegacyCookieValidation(conf, registrationManager);
+ cookieValidation.checkCookies(storageDirectoriesFromConf(conf));
+
UncleanShutdownDetection shutdownManager = new
UncleanShutdownDetectionImpl(ledgerDirsManager);
final ComponentInfoPublisher componentInfoPublisher = new
ComponentInfoPublisher();