This is an automated email from the ASF dual-hosted git repository.
sijie 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 5fb4112 Provide the flag to allow ignoring startup failures on
loading extra server components
5fb4112 is described below
commit 5fb4112eee2a54232995e06f2a5f1acffe4a5929
Author: Sijie Guo <[email protected]>
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 <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, 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 b8ea98d..af4fba5 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 d848cea..6411c80 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 f088b36..d51e93d 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;
@@ -175,6 +176,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";
@@ -2704,7 +2707,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);
@@ -2723,6 +2727,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 104a3d1..1db0a1c 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 6aca797..9a872e6 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
[email protected].