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 4d5353b  ISSUE #1541: Fix ReadOnlyBookie constructor
4d5353b is described below

commit 4d5353bb7ea6c7f6cf2cb62992d122b265687b05
Author: cguttapalem <[email protected]>
AuthorDate: Mon Jul 23 16:35:02 2018 +0200

    ISSUE #1541: Fix ReadOnlyBookie constructor
    
    Descriptions of the changes in this PR:
    
    ### Motivation
    
    ReadOnlyBookie doesn't sets shutdownHandler to its statemanager.
    
    There are couple of issues with how 'stateManager' is handled in 
ReadOnlyBookie,
    
    - ReadOnlyBookie creates its own stateManager in its constructor but it 
does not sets shutdownHandler.
    - Also, it is not correct to create stateManager instance in Bookie 
constructor and then again in ReadOnlyBookie constructor and override the 
instance created in super constructor.
    
    ### Changes
    
    - move initializeStateManager logic to a method and override it in 
ReadOnlyBookie.
    
    Master Issue: #1541
    
    Author: cguttapalem <[email protected]>
    
    Reviewers: Enrico Olivelli <[email protected]>, Jia Zhai <None>, Sijie 
Guo <[email protected]>
    
    This closes #1557 from reddycharan/readonlybookiefix, closes #1541
---
 .../java/org/apache/bookkeeper/bookie/Bookie.java  |  8 ++++++--
 .../apache/bookkeeper/bookie/ReadOnlyBookie.java   | 22 +++++++++++++---------
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
index 2b89387..79153dc 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
@@ -138,7 +138,7 @@ public class Bookie extends BookieCriticalThread {
     protected StateManager stateManager;
 
     // Expose Stats
-    private final StatsLogger statsLogger;
+    final StatsLogger statsLogger;
     private final Counter writeBytes;
     private final Counter readBytes;
     private final Counter forceLedgerOps;
@@ -641,7 +641,7 @@ public class Bookie extends BookieCriticalThread {
         } catch (MetadataException e) {
             throw new MetadataStoreException("Failed to initialize ledger 
manager", e);
         }
-        stateManager = new BookieStateManager(conf, statsLogger, 
metadataDriver, ledgerDirsManager);
+        stateManager = initializeStateManager();
         // register shutdown handler using trigger mode
         stateManager.setShutdownHandler(exitCode -> 
triggerBookieShutdown(exitCode));
         // Initialise ledgerDirMonitor. This would look through all the
@@ -745,6 +745,10 @@ public class Bookie extends BookieCriticalThread {
         readBytesStats = statsLogger.getOpStatsLogger(BOOKIE_READ_ENTRY_BYTES);
     }
 
+    StateManager initializeStateManager() throws IOException {
+        return new BookieStateManager(conf, statsLogger, metadataDriver, 
ledgerDirsManager);
+    }
+
     void readJournal() throws IOException, BookieException {
         long startTs = MathUtils.now();
         JournalScanner scanner = new JournalScanner() {
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ReadOnlyBookie.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ReadOnlyBookie.java
index 4bd3664..5125c07 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ReadOnlyBookie.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ReadOnlyBookie.java
@@ -41,7 +41,19 @@ public class ReadOnlyBookie extends Bookie {
     public ReadOnlyBookie(ServerConfiguration conf, StatsLogger statsLogger)
             throws IOException, KeeperException, InterruptedException, 
BookieException {
         super(conf, statsLogger);
-        stateManager = new BookieStateManager(conf, statsLogger, 
metadataDriver, getLedgerDirsManager()) {
+        if (conf.isReadOnlyModeEnabled()) {
+            stateManager.forceToReadOnly();
+        } else {
+            String err = "Try to init ReadOnly Bookie, while ReadOnly mode is 
not enabled";
+            LOG.error(err);
+            throw new IOException(err);
+        }
+        LOG.info("Running bookie in force readonly mode.");
+    }
+
+    @Override
+    StateManager initializeStateManager() throws IOException {
+        return new BookieStateManager(conf, statsLogger, metadataDriver, 
getLedgerDirsManager()) {
 
             @Override
             public void doTransitionToWritableMode() {
@@ -55,13 +67,5 @@ public class ReadOnlyBookie extends Bookie {
                 LOG.info("Skip transition to readonly mode for readonly 
bookie");
             }
         };
-        if (conf.isReadOnlyModeEnabled()) {
-            stateManager.forceToReadOnly();
-        } else {
-            String err = "Try to init ReadOnly Bookie, while ReadOnly mode is 
not enabled";
-            LOG.error(err);
-            throw new IOException(err);
-        }
-        LOG.info("Running bookie in force readonly mode.");
     }
 }

Reply via email to