You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2021/01/27 11:11:15 UTC
[bookkeeper] branch branch-4.12 updated: Fix BookKeeper shell "list
bookies" in case of downbookie and reduce noisy log during re-replication
in case of down bookie
This is an automated email from the ASF dual-hosted git repository.
eolivelli pushed a commit to branch branch-4.12
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/branch-4.12 by this push:
new 4a0ab55 Fix BookKeeper shell "list bookies" in case of downbookie and reduce noisy log during re-replication in case of down bookie
4a0ab55 is described below
commit 4a0ab55c5e7e7708fc66b63c180e6e0ece1a3328
Author: Enrico Olivelli <eo...@gmail.com>
AuthorDate: Wed Jan 27 12:10:45 2021 +0100
Fix BookKeeper shell "list bookies" in case of downbookie and reduce noisy log during re-replication in case of down bookie
### Motivation
When a bookie is down you can see many error both on command line tools and during replicator work.
Also the CLI is not working at all
```
This is the error on "bookkeeper shell listbookies" when a bookie is downb
org.apache.bookkeeper.client.BKException$BKBookieHandleNotAvailableException: Bookie handle is not available
at org.apache.bookkeeper.discover.ZKRegistrationClient.getBookieServiceInfo(ZKRegistrationClient.java:248) ~[org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.client.DefaultBookieAddressResolver.resolve(DefaultBookieAddressResolver.java:43) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.helpers.CommandHelpers.getBookieSocketAddrStringRepresentation(CommandHelpers.java:45) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand.printBookies(ListBookiesCommand.java:124) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand.run(ListBookiesCommand.java:113) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand.run(ListBookiesCommand.java:43) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.helpers.DiscoveryCommand.apply(DiscoveryCommand.java:57) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.tools.cli.helpers.ClientCommand.apply(ClientCommand.java:60) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.bookie.BookieShell$ListBookiesCmd.runCmd(BookieShell.java:1202) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.bookie.BookieShell$MyCommand.runCmd(BookieShell.java:236) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.bookie.BookieShell.run(BookieShell.java:2235) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
at org.apache.bookkeeper.bookie.BookieShell.main(BookieShell.java:2326) [org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]
```
### Changes
Reduce the log level, and save printing useless stacktraces:
- CommandsHelpers -> prevent error on the CLI in case of down bookie (this is a blocker for the usage of the CLI)
- PerChannelBookieClient -> any time you try to connect to a down bookie
- DefaultBookieAddressResolver -> duplicate log line, the error already bubbles up on the caller
Reviewers: Flavio Junqueira <fp...@apache.org>
This closes #2538 from eolivelli/fix/reduce-logs
(cherry picked from commit 663000df507c54f3a6b3367ba074c85815f04b46)
Signed-off-by: Enrico Olivelli <eo...@apache.org>
---
.../client/DefaultBookieAddressResolver.java | 3 +-
.../bookkeeper/proto/PerChannelBookieClient.java | 3 +-
.../tools/cli/helpers/CommandHelpers.java | 36 ++++++++++++----------
3 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/DefaultBookieAddressResolver.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/DefaultBookieAddressResolver.java
index d11eaa9..b9d51ab 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/DefaultBookieAddressResolver.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/DefaultBookieAddressResolver.java
@@ -59,13 +59,12 @@ public class DefaultBookieAddressResolver implements BookieAddressResolver {
log.debug("Resolving dummy bookie Id {} using legacy bookie resolver", bookieId);
return BookieSocketAddress.resolveDummyBookieId(bookieId);
}
- log.info("Cannot resolve {}, bookie is unknown", bookieId, ex);
+ log.info("Cannot resolve {}, bookie is unknown", bookieId, ex.toString());
throw new BookieIdNotResolvedException(bookieId, ex);
} catch (Exception ex) {
if (ex instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
- log.info("Cannot resolve {} ", bookieId, ex);
throw new BookieIdNotResolvedException(bookieId, ex);
}
}
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
index 04ac1f9..c1fc78e 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
@@ -542,7 +542,8 @@ public class PerChannelBookieClient extends ChannelInboundHandlerAdapter {
try {
addr = bookieAddressResolver.resolve(bookieId);
} catch (BookieAddressResolver.BookieIdNotResolvedException err) {
- LOG.error("Cannot connect to {} as endpopint resolution failed", bookieId, err);
+ LOG.error("Cannot connect to {} as endpoint resolution failed (probably bookie is down)",
+ bookieId, err.toString());
return processBookieNotResolvedError(startTime, err);
}
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/CommandHelpers.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/CommandHelpers.java
index dd41e81..46980e1 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/CommandHelpers.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/CommandHelpers.java
@@ -42,23 +42,27 @@ public final class CommandHelpers {
*/
public static String getBookieSocketAddrStringRepresentation(BookieId bookieId,
BookieAddressResolver bookieAddressResolver) {
- BookieSocketAddress networkAddress = bookieAddressResolver.resolve(bookieId);
- String hostname = networkAddress.getHostName();
- String realHostname;
- String ip;
- if (InetAddresses.isInetAddress(hostname)){
- ip = hostname;
- realHostname = networkAddress.getSocketAddress().getAddress().getCanonicalHostName();
- } else {
- InetAddress ia = networkAddress.getSocketAddress().getAddress();
- if (null != ia){
- ip = ia.getHostAddress();
- } else {
- ip = UNKNOWN;
- }
- realHostname = hostname;
+ try {
+ BookieSocketAddress networkAddress = bookieAddressResolver.resolve(bookieId);
+ String hostname = networkAddress.getHostName();
+ String realHostname;
+ String ip;
+ if (InetAddresses.isInetAddress(hostname)){
+ ip = hostname;
+ realHostname = networkAddress.getSocketAddress().getAddress().getCanonicalHostName();
+ } else {
+ InetAddress ia = networkAddress.getSocketAddress().getAddress();
+ if (null != ia){
+ ip = ia.getHostAddress();
+ } else {
+ ip = UNKNOWN;
+ }
+ realHostname = hostname;
+ }
+ return formatBookieSocketAddress(bookieId, ip, networkAddress.getPort(), realHostname);
+ } catch (BookieAddressResolver.BookieIdNotResolvedException bookieNotAvailable) {
+ return formatBookieSocketAddress(bookieId, UNKNOWN, 0, UNKNOWN);
}
- return formatBookieSocketAddress(bookieId, ip, networkAddress.getPort(), realHostname);
}
/**