This is an automated email from the ASF dual-hosted git repository.
nicoloboschi 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 dd8ba477ee Exit bookkeeper shell correctly even if fails to run for
some reason (#3663)
dd8ba477ee is described below
commit dd8ba477ee1f7b376869777ecf37463e8d2edec5
Author: Yuri Mizushima <[email protected]>
AuthorDate: Fri Nov 25 20:28:08 2022 +0900
Exit bookkeeper shell correctly even if fails to run for some reason (#3663)
* fix: close legacyLM and longLM if call HierarchicalLedgerManager#close
* fix: exit as ok when calling listledgers command and get
NoSuchLedgerExistsOnMetadataServerException
* fix: call exit even if get some exception in bookkeeler shell
---
.../org/apache/bookkeeper/bookie/BookieShell.java | 90 ++++++++++++----------
.../bookkeeper/meta/HierarchicalLedgerManager.java | 11 +++
.../cli/commands/bookie/ListLedgersCommand.java | 4 +-
3 files changed, 62 insertions(+), 43 deletions(-)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
index 9f7de7e89e..5d0798351d 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
@@ -2397,50 +2397,56 @@ public class BookieShell implements Tool {
}
}
- public static void main(String[] argv) throws Exception {
- BookieShell shell = new BookieShell();
-
- // handle some common options for multiple cmds
- Options opts = new Options();
- opts.addOption(CONF_OPT, true, "configuration file");
- opts.addOption(LEDGERID_FORMATTER_OPT, true, "format of ledgerId");
- opts.addOption(ENTRY_FORMATTER_OPT, true, "format of entries");
- BasicParser parser = new BasicParser();
- CommandLine cmdLine = parser.parse(opts, argv, true);
-
- // load configuration
- CompositeConfiguration conf = new CompositeConfiguration();
- if (cmdLine.hasOption(CONF_OPT)) {
- String val = cmdLine.getOptionValue(CONF_OPT);
- conf.addConfiguration(new PropertiesConfiguration(
- new File(val).toURI().toURL()));
- }
- shell.setConf(conf);
-
- // ledgerid format
- if (cmdLine.hasOption(LEDGERID_FORMATTER_OPT)) {
- String val = cmdLine.getOptionValue(LEDGERID_FORMATTER_OPT);
- shell.ledgerIdFormatter =
LedgerIdFormatter.newLedgerIdFormatter(val, shell.bkConf);
- } else {
- shell.ledgerIdFormatter =
LedgerIdFormatter.newLedgerIdFormatter(shell.bkConf);
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug("Using ledgerIdFormatter {}",
shell.ledgerIdFormatter.getClass());
- }
+ public static void main(String[] argv) {
+ int res = -1;
+ try {
+ BookieShell shell = new BookieShell();
- // entry format
- if (cmdLine.hasOption(ENTRY_FORMATTER_OPT)) {
- String val = cmdLine.getOptionValue(ENTRY_FORMATTER_OPT);
- shell.entryFormatter = EntryFormatter.newEntryFormatter(val,
shell.bkConf);
- } else {
- shell.entryFormatter =
EntryFormatter.newEntryFormatter(shell.bkConf);
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug("Using entry formatter {}",
shell.entryFormatter.getClass());
- }
+ // handle some common options for multiple cmds
+ Options opts = new Options();
+ opts.addOption(CONF_OPT, true, "configuration file");
+ opts.addOption(LEDGERID_FORMATTER_OPT, true, "format of ledgerId");
+ opts.addOption(ENTRY_FORMATTER_OPT, true, "format of entries");
+ BasicParser parser = new BasicParser();
+ CommandLine cmdLine = parser.parse(opts, argv, true);
+
+ // load configuration
+ CompositeConfiguration conf = new CompositeConfiguration();
+ if (cmdLine.hasOption(CONF_OPT)) {
+ String val = cmdLine.getOptionValue(CONF_OPT);
+ conf.addConfiguration(new PropertiesConfiguration(
+ new File(val).toURI().toURL()));
+ }
+ shell.setConf(conf);
- int res = shell.run(cmdLine.getArgs());
- System.exit(res);
+ // ledgerid format
+ if (cmdLine.hasOption(LEDGERID_FORMATTER_OPT)) {
+ String val = cmdLine.getOptionValue(LEDGERID_FORMATTER_OPT);
+ shell.ledgerIdFormatter =
LedgerIdFormatter.newLedgerIdFormatter(val, shell.bkConf);
+ } else {
+ shell.ledgerIdFormatter =
LedgerIdFormatter.newLedgerIdFormatter(shell.bkConf);
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using ledgerIdFormatter {}",
shell.ledgerIdFormatter.getClass());
+ }
+
+ // entry format
+ if (cmdLine.hasOption(ENTRY_FORMATTER_OPT)) {
+ String val = cmdLine.getOptionValue(ENTRY_FORMATTER_OPT);
+ shell.entryFormatter = EntryFormatter.newEntryFormatter(val,
shell.bkConf);
+ } else {
+ shell.entryFormatter =
EntryFormatter.newEntryFormatter(shell.bkConf);
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using entry formatter {}",
shell.entryFormatter.getClass());
+ }
+
+ res = shell.run(cmdLine.getArgs());
+ } catch (Throwable e) {
+ LOG.error("Got an exception", e);
+ } finally {
+ System.exit(res);
+ }
}
private synchronized void initEntryLogger() throws IOException {
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 aa57c40f36..edf7c5c911 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
@@ -122,4 +122,15 @@ class HierarchicalLedgerManager extends
AbstractHierarchicalLedgerManager {
protected String getLedgerParentNodeRegex() {
return StringUtils.HIERARCHICAL_LEDGER_PARENT_NODE_REGEX;
}
+
+ @Override
+ public void close() {
+ super.close();
+ if (legacyLM != null) {
+ legacyLM.close();
+ }
+ if (longLM != null) {
+ longLM.close();
+ }
+ }
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/bookie/ListLedgersCommand.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/bookie/ListLedgersCommand.java
index c743222844..462c5abcbe 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/bookie/ListLedgersCommand.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/bookie/ListLedgersCommand.java
@@ -157,7 +157,9 @@ public class ListLedgersCommand extends
BookieCommand<ListLedgersFlags> {
}
cb.processResult(BKException.Code.OK, null,
null);
} else if (BKException.getExceptionCode(exception)
- ==
BKException.Code.NoSuchLedgerExistsException) {
+ ==
BKException.Code.NoSuchLedgerExistsException
+ || BKException.getExceptionCode(exception)
+ ==
BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
cb.processResult(BKException.Code.OK, null,
null);
} else {
LOG.error("Unable to read the ledger: {}
information", ledgerId);