You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/06/04 22:03:55 UTC
[bookkeeper] 01/09: Provide the flag to allow ignoring startup
failures on loading extra server components
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch branch-4.7
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
commit 1ae9772a30292f378d0ca9e68e2371badc6a99f2
Author: Sijie Guo <si...@apache.org>
AuthorDate: Fri May 25 11:10:22 2018 -0700
Provide the flag to allow ignoring startup failures on loading extra server components
Descriptions of the changes in this PR:
Addressed the comments in apache/bookkeeper#1420
Author: Sijie Guo <si...@apache.org>
Reviewers: Enrico Olivelli <eo...@gmail.com>, Jia Zhai <None>
This closes #1426 from sijie/flag_to_allow_silent_failures
---
bookkeeper-dist/src/assemble/bin-all.xml | 6 +++
bookkeeper-dist/src/assemble/bin-server.xml | 6 +++
.../bookkeeper/conf/ServerConfiguration.java | 29 ++++++++++++-
.../java/org/apache/bookkeeper/server/Main.java | 8 +++-
.../org/apache/bookkeeper/server/TestMain.java | 49 ++++++++++++++++++++++
conf/bk_server.conf | 5 +++
site/_data/config/bk_server.yaml | 3 ++
7 files changed, 103 insertions(+), 3 deletions(-)
diff --git a/bookkeeper-dist/src/assemble/bin-all.xml b/bookkeeper-dist/src/assemble/bin-all.xml
index 4a7c4dc..54cd125 100644
--- a/bookkeeper-dist/src/assemble/bin-all.xml
+++ b/bookkeeper-dist/src/assemble/bin-all.xml
@@ -114,6 +114,12 @@
<exclude>io.netty:netty-tcnative-boringssl-static</exclude>
<exclude>io.netty:netty-transport-native-epoll</exclude>
<exclude>io.netty:netty-transport</exclude>
+ <!-- All these dependencies are already included in stream-storage-java-client -->
+ <exclude>org.apache.bookkeeper:stream-storage-common</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-proto</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-api</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-java-client-base</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-java-kv-client</exclude>
</excludes>
</dependencySet>
</dependencySets>
diff --git a/bookkeeper-dist/src/assemble/bin-server.xml b/bookkeeper-dist/src/assemble/bin-server.xml
index ce5a646..693fda6 100644
--- a/bookkeeper-dist/src/assemble/bin-server.xml
+++ b/bookkeeper-dist/src/assemble/bin-server.xml
@@ -103,6 +103,12 @@
<exclude>io.netty:netty-resolver-dns</exclude>
<exclude>io.netty:netty-tcnative-boringssl-static</exclude>
<exclude>io.netty:netty-transport</exclude>
+ <!-- All these dependencies are already included in stream-storage-java-client -->
+ <exclude>org.apache.bookkeeper:stream-storage-common</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-proto</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-api</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-java-client-base</exclude>
+ <exclude>org.apache.bookkeeper:stream-storage-java-kv-client</exclude>
</excludes>
</dependencySet>
</dependencySets>
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
index 904ca3f..3e4749c 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
@@ -18,6 +18,7 @@
package org.apache.bookkeeper.conf;
import com.google.common.annotations.Beta;
+import com.google.common.base.Strings;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.apache.bookkeeper.bookie.InterleavedLedgerStorage;
@@ -174,6 +175,8 @@ public class ServerConfiguration extends AbstractConfiguration<ServerConfigurati
// Lifecycle Components
protected static final String EXTRA_SERVER_COMPONENTS = "extraServerComponents";
+ protected static final String IGNORE_EXTRA_SERVER_COMPONENTS_STARTUP_FAILURES =
+ "ignoreExtraServerComponentsStartupFailures";
// Registration
protected static final String REGISTRATION_MANAGER_CLASS = "registrationManagerClass";
@@ -2653,7 +2656,8 @@ public class ServerConfiguration extends AbstractConfiguration<ServerConfigurati
* @return the extra list of server lifecycle components to enable on a bookie server.
*/
public String[] getExtraServerComponents() {
- if (!this.containsKey(EXTRA_SERVER_COMPONENTS)) {
+ String extraServerComponentsStr = getString(EXTRA_SERVER_COMPONENTS);
+ if (Strings.isNullOrEmpty(extraServerComponentsStr)) {
return null;
}
return this.getStringArray(EXTRA_SERVER_COMPONENTS);
@@ -2672,6 +2676,29 @@ public class ServerConfiguration extends AbstractConfiguration<ServerConfigurati
}
/**
+ * Return the flag whether to ignore startup failures on loading server components specified at
+ * {@link #getExtraServerComponents()}.
+ *
+ * @return the flag whether to ignore startup failures on loading server components specified at
+ * {@link #getExtraServerComponents()}. The default value is <tt>false</tt>.
+ */
+ public boolean getIgnoreExtraServerComponentsStartupFailures() {
+ return getBoolean(IGNORE_EXTRA_SERVER_COMPONENTS_STARTUP_FAILURES, false);
+ }
+
+ /**
+ * Set the flag whether to ignore startup failures on loading server components specified at
+ * {@link #getExtraServerComponents()}.
+ *
+ * @param enabled flag to enable/disable ignoring startup failures on loading server components.
+ * @return server configuration.
+ */
+ public ServerConfiguration setIgnoreExtraServerComponentsStartupFailures(boolean enabled) {
+ setProperty(IGNORE_EXTRA_SERVER_COMPONENTS_STARTUP_FAILURES, enabled);
+ return this;
+ }
+
+ /**
* Set registration manager class.
*
* @param regManagerClass
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/Main.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/Main.java
index 1ef56de..ae92955 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/Main.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/Main.java
@@ -338,8 +338,12 @@ public class Main {
log.info("Load lifecycle component : {}", component.getClass().getName());
}
} catch (Exception e) {
- log.info("Failed to load extra components '{}' - {}. Continuing without those components.",
- StringUtils.join(extraComponents), e.getMessage());
+ if (conf.getServerConf().getIgnoreExtraServerComponentsStartupFailures()) {
+ log.info("Failed to load extra components '{}' - {}. Continuing without those components.",
+ StringUtils.join(extraComponents), e.getMessage());
+ } else {
+ throw e;
+ }
}
}
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/TestMain.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/TestMain.java
index 8027511..d5253fd 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/TestMain.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/TestMain.java
@@ -22,6 +22,7 @@ package org.apache.bookkeeper.server;
import static org.apache.bookkeeper.server.Main.buildBookieServer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -95,4 +96,52 @@ public class TestMain {
verify(mockServer, times(1)).shutdown();
}
+ @Test
+ public void testIgnoreExtraServerComponentsStartupFailures() throws Exception {
+ ServerConfiguration serverConf = new ServerConfiguration()
+ .setAutoRecoveryDaemonEnabled(false)
+ .setHttpServerEnabled(false)
+ .setExtraServerComponents(new String[] { "bad-server-component"})
+ .setIgnoreExtraServerComponentsStartupFailures(true);
+ BookieConfiguration conf = new BookieConfiguration(serverConf);
+
+ BookieServer mockServer = PowerMockito.mock(BookieServer.class);
+ whenNew(BookieServer.class)
+ .withArguments(any(ServerConfiguration.class), any(StatsLogger.class))
+ .thenReturn(mockServer);
+
+ LifecycleComponentStack stack = buildBookieServer(conf);
+ assertEquals(2, stack.getNumComponents());
+
+ stack.start();
+ verify(mockServer, times(1)).start();
+
+ stack.stop();
+
+ stack.close();
+ verify(mockServer, times(1)).shutdown();
+ }
+
+ @Test
+ public void testExtraServerComponentsStartupFailures() throws Exception {
+ ServerConfiguration serverConf = new ServerConfiguration()
+ .setAutoRecoveryDaemonEnabled(false)
+ .setHttpServerEnabled(false)
+ .setExtraServerComponents(new String[] { "bad-server-component"})
+ .setIgnoreExtraServerComponentsStartupFailures(false);
+ BookieConfiguration conf = new BookieConfiguration(serverConf);
+
+ BookieServer mockServer = PowerMockito.mock(BookieServer.class);
+ whenNew(BookieServer.class)
+ .withArguments(any(ServerConfiguration.class), any(StatsLogger.class))
+ .thenReturn(mockServer);
+
+ try {
+ buildBookieServer(conf);
+ fail("Should fail to start bookie server if `ignoreExtraServerComponentsStartupFailures` is set to false");
+ } catch (RuntimeException re) {
+ assertTrue(re.getCause() instanceof ClassNotFoundException);
+ }
+ }
+
}
diff --git a/conf/bk_server.conf b/conf/bk_server.conf
index 6e3c1b4..10c7783 100755
--- a/conf/bk_server.conf
+++ b/conf/bk_server.conf
@@ -97,6 +97,11 @@ bookiePort=3181
# extraServerComponents=org.apache.bookkeeper.stream.server.StreamStorageLifecycleComponent
extraServerComponents=
+# Whether the bookie should ignore startup failures on loading server components specified
+# by `extraServerComponents`. The default value is `false`.
+#
+# ignoreExtraServerComponentsStartupFailures=false
+
#############################################################################
## Thread settings
#############################################################################
diff --git a/site/_data/config/bk_server.yaml b/site/_data/config/bk_server.yaml
index fd3ab7a..01d82f3 100644
--- a/site/_data/config/bk_server.yaml
+++ b/site/_data/config/bk_server.yaml
@@ -44,6 +44,9 @@ groups:
- param: extraServerComponents
description: Configure a list of extra server components to enable and load on a bookie server. This provides a plugin mechanism to run extra server components along with a bookie server.
default: ''
+ - param: ignoreExtraServerComponentsStartupFailures
+ description: Whether the bookie should ignore startup failures on loading server components specified by `extraServerComponents`.
+ default: 'false'
- name: Worker thread settings
params:
--
To stop receiving notification emails like this one, please contact
sijie@apache.org.