From 5033e9cf1b9c98c1cd279834f0795fe5d8e54ac8 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Tue, 12 Apr 2016 21:13:48 -0700 Subject: [PATCH 1/2] CMS-1417: Add command line tool to manually recover ledgers --- .../apache/bookkeeper/bookie/BookieShell.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 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 aacd7a21f5a..04baf34cdab 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 @@ -567,6 +567,7 @@ class ReadLedgerEntriesCmd extends MyCommand { lOpts.addOption("l", "ledgerid", true, "Ledger ID"); lOpts.addOption("fe", "firstentryid", true, "First EntryID"); lOpts.addOption("le", "lastentryid", true, "Last EntryID"); + lOpts.addOption("r", "force-recovery", false, "Ensure the ledger is properly closed before reading"); } @Override @@ -582,7 +583,8 @@ String getDescription() { @Override String getUsage() { return "readledger [-msg] -ledgerid " - + "[-firstentryid [-lastentryid ]]"; + + "[-firstentryid [-lastentryid ]] " + + "[-force-recovery]"; } @Override @@ -594,9 +596,10 @@ int runCmd(CommandLine cmdLine) throws Exception { } final long firstEntry = getOptionLongValue(cmdLine, "firstentryid", 0); - final long lastEntry = getOptionLongValue(cmdLine, "lastentryid", -1); + long lastEntry = getOptionLongValue(cmdLine, "lastentryid", -1); boolean printMsg = cmdLine.hasOption("m"); + boolean forceRecovery = cmdLine.hasOption("r"); ClientConfiguration conf = new ClientConfiguration(); conf.addConfiguration(bkConf); @@ -604,13 +607,26 @@ int runCmd(CommandLine cmdLine) throws Exception { BookKeeperAdmin bk = null; try { bk = new BookKeeperAdmin(conf); + if (forceRecovery) { + // Force the opening of the ledger to trigger recovery + LedgerHandle lh = bk.openLedger(ledgerId); + if (lastEntry == -1 || lastEntry > lh.getLastAddConfirmed()) { + lastEntry = lh.getLastAddConfirmed(); + } + lh.close(); + } + Iterator entries = bk.readEntries(ledgerId, firstEntry, lastEntry).iterator(); while (entries.hasNext()) { LedgerEntry entry = entries.next(); formatEntry(entry, printMsg); } + } catch (NumberFormatException nfe) { + System.err.println("ERROR: invalid number " + nfe.getMessage()); + printUsage(); + return -1; } catch (Exception e) { - LOG.error("Error reading entries from ledger {}", ledgerId, e.getCause()); + LOG.error("Error reading entries from ledger", e); return -1; } finally { if (bk != null) { From 83e75d91ab5d369cc4f5fcd3cf316c4e91e50fbc Mon Sep 17 00:00:00 2001 From: Sijie Guo Date: Tue, 19 Dec 2017 00:46:19 -0800 Subject: [PATCH 2/2] use try-with-resources --- .../org/apache/bookkeeper/bookie/BookieShell.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 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 04baf34cdab..2e1dc179722 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 @@ -609,11 +609,11 @@ int runCmd(CommandLine cmdLine) throws Exception { bk = new BookKeeperAdmin(conf); if (forceRecovery) { // Force the opening of the ledger to trigger recovery - LedgerHandle lh = bk.openLedger(ledgerId); - if (lastEntry == -1 || lastEntry > lh.getLastAddConfirmed()) { - lastEntry = lh.getLastAddConfirmed(); + try (LedgerHandle lh = bk.openLedger(ledgerId)) { + if (lastEntry == -1 || lastEntry > lh.getLastAddConfirmed()) { + lastEntry = lh.getLastAddConfirmed(); + } } - lh.close(); } Iterator entries = bk.readEntries(ledgerId, firstEntry, lastEntry).iterator(); @@ -621,12 +621,8 @@ int runCmd(CommandLine cmdLine) throws Exception { LedgerEntry entry = entries.next(); formatEntry(entry, printMsg); } - } catch (NumberFormatException nfe) { - System.err.println("ERROR: invalid number " + nfe.getMessage()); - printUsage(); - return -1; } catch (Exception e) { - LOG.error("Error reading entries from ledger", e); + LOG.error("Error reading entries from ledger {}", ledgerId, e); return -1; } finally { if (bk != null) {