Merge branch 'stable-2.14'
* stable-2.14:
Extract JGroups configuration into jgroups section
Fix a test name, use Cluster instead of Channel
Fix a typo in the documentation
Change-Id: I80686b458d84f7cc5ddf930936f948f64b8c259b
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
index 8cb57f3..fb74e34 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -54,6 +54,11 @@
static final String STRATEGY_KEY = "strategy";
static final String MY_URL_KEY = "myUrl";
+ // jgroups section
+ static final String JGROUPS_SECTION = "jgroups";
+ static final String SKIP_INTERFACE_KEY = "skipInterface";
+ static final String CLUSTER_NAME_KEY = "clusterName";
+
// http section
static final String HTTP_SECTION = "http";
static final String USER_KEY = "user";
@@ -83,10 +88,6 @@
static final String WEBSESSION_SECTION = "websession";
static final String CLEANUP_INTERVAL_KEY = "cleanupInterval";
- // jgroups section used if peerInfo.strategy == jgroups
- static final String SKIP_INTERFACE_KEY = "skipInterface";
- static final String CLUSTER_NAME_KEY = "clusterName";
-
static final int DEFAULT_TIMEOUT_MS = 5000;
static final int DEFAULT_MAX_TRIES = 5;
static final int DEFAULT_RETRY_INTERVAL = 1000;
@@ -101,6 +102,7 @@
private final Main main;
private final PeerInfo peerInfo;
+ private final JGroups jgroups;
private final Http http;
private final Cache cache;
private final Event event;
@@ -130,6 +132,7 @@
default:
throw new IllegalArgumentException("Not supported strategy: " + peerInfo.strategy);
}
+ jgroups = new JGroups(cfg);
http = new Http(cfg);
cache = new Cache(cfg);
event = new Event(cfg);
@@ -153,6 +156,10 @@
return peerInfoJGroups;
}
+ public JGroups jgroups() {
+ return jgroups;
+ }
+
public Http http() {
return http;
}
@@ -252,17 +259,27 @@
}
public static class PeerInfoJGroups {
- private final ImmutableList<String> skipInterface;
- private final String clusterName;
private final String myUrl;
private PeerInfoJGroups(Config cfg) {
- String[] skip = cfg.getStringList(PEER_INFO_SECTION, JGROUPS_SUBSECTION, SKIP_INTERFACE_KEY);
+ myUrl = trimTrailingSlash(cfg.getString(PEER_INFO_SECTION, JGROUPS_SUBSECTION, MY_URL_KEY));
+ }
+
+ public String myUrl() {
+ return myUrl;
+ }
+ }
+
+ public static class JGroups {
+ private final ImmutableList<String> skipInterface;
+ private final String clusterName;
+
+ private JGroups(Config cfg) {
+ String[] skip = cfg.getStringList(JGROUPS_SECTION, null, SKIP_INTERFACE_KEY);
skipInterface = skip == null ? DEFAULT_SKIP_INTERFACE_LIST : ImmutableList.copyOf(skip);
clusterName =
getString(
- cfg, PEER_INFO_SECTION, JGROUPS_SUBSECTION, CLUSTER_NAME_KEY, DEFAULT_CLUSTER_NAME);
- myUrl = trimTrailingSlash(cfg.getString(PEER_INFO_SECTION, JGROUPS_SUBSECTION, MY_URL_KEY));
+ cfg, JGROUPS_SECTION, null, CLUSTER_NAME_KEY, DEFAULT_CLUSTER_NAME);
}
public ImmutableList<String> skipInterface() {
@@ -272,10 +289,6 @@
public String clusterName() {
return clusterName;
}
-
- public String myUrl() {
- return myUrl;
- }
}
public static class Http {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinder.java
index 04c67d4..c973b4a 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinder.java
@@ -32,12 +32,12 @@
public class InetAddressFinder {
private final boolean preferIPv4;
- private final Configuration.PeerInfoJGroups jgroupsConfig;
+ private final Configuration.JGroups jgroupsConfig;
@Inject
InetAddressFinder(Configuration pluginConfiguration) {
preferIPv4 = Boolean.getBoolean("java.net.preferIPv4Stack");
- jgroupsConfig = pluginConfiguration.peerInfoJGroups();
+ jgroupsConfig = pluginConfiguration.jgroups();
}
/**
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
index 39ba578..610d781 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
@@ -45,7 +45,7 @@
implements Provider<Optional<PeerInfo>>, LifecycleListener {
private static final Logger log = LoggerFactory.getLogger(JGroupsPeerInfoProvider.class);
- private final Configuration.PeerInfoJGroups jgroupsConfig;
+ private final Configuration.JGroups jgroupsConfig;
private final InetAddressFinder finder;
private final String myUrl;
@@ -56,7 +56,7 @@
@Inject
JGroupsPeerInfoProvider(
Configuration pluginConfiguration, InetAddressFinder finder, MyUrlProvider myUrlProvider) {
- this.jgroupsConfig = pluginConfiguration.peerInfoJGroups();
+ this.jgroupsConfig = pluginConfiguration.jgroups();
this.finder = finder;
this.myUrl = myUrlProvider.get();
}
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 1c7caaf..42ce673 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -23,7 +23,8 @@
: strategy = jgroups
[peerInfo "jgroups"]
: myUrl = local_instance_url
-: cluster = foo
+[jgroups]
+: clusterName = foo
: skipInterface = lo*
: skipInterface = eth2
[http]
@@ -53,20 +54,6 @@
peerInfo.static.url
: Specify the URL for the peer instance.
-peerInfo.jgroups.clusterName
-: The name of the high-availability cluster. When peers discover themselves dynamically this
- name is used to determine which instances should work together. Only those Gerrit
- interfaces which are configured for the same clusterName will communicate with each other.
- Defaults to "GerritHA".
-
-peerInfo.jgroups.skipInterface
-: A name or a wildcard of network interface(s) which should be skipped
- for JGroups communication. Peer discovery may fail if the host has multiple
- network interfaces and an inappropriate interface is chosen by JGroups.
- This option can be repeated many times in the `jgroups` section.
- Defaults to the list of: `lo*`, `utun*`, `awdl*` which are known to be
- inappropriate for JGroups communication.
-
peerInfo.jgroups.myUrl
: The URL of this instance to be broadcast to other peers. If not specified, the
URL is determined from the `httpd.listenUrl` in the `gerrit.config`.
@@ -75,6 +62,20 @@
configured to listen on all local addresses (i.e. using hostname `*`), then
the URL must be explicitly specified with `myUrl`.
+jgroups.clusterName
+: The name of the high-availability cluster. When peers discover themselves dynamically this
+ name is used to determine which instances should work together. Only those Gerrit
+ interfaces which are configured for the same clusterName will communicate with each other.
+ Defaults to "GerritHA".
+
+jgroups.skipInterface
+: A name or a wildcard of network interface(s) which should be skipped
+ for JGroups communication. Peer discovery may fail if the host has multiple
+ network interfaces and an inappropriate interface is chosen by JGroups.
+ This option can be repeated many times in the `jgroups` section.
+ Defaults to the list of: `lo*`, `utun*`, `awdl*` which are known to be
+ inappropriate for JGroups communication.
+
NOTE: To work properly in certain environments, JGroups needs the System property
`java.net.preferIPv4Stack` to be set to `true`.
See (http://jgroups.org/tutorial/index.html#_trouble_shooting).
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
index b1d9fcc..f3ff562 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
@@ -30,6 +30,7 @@
import static com.ericsson.gerrit.plugins.highavailability.Configuration.EVENT_SECTION;
import static com.ericsson.gerrit.plugins.highavailability.Configuration.HTTP_SECTION;
import static com.ericsson.gerrit.plugins.highavailability.Configuration.INDEX_SECTION;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGROUPS_SECTION;
import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGROUPS_SUBSECTION;
import static com.ericsson.gerrit.plugins.highavailability.Configuration.MAIN_SECTION;
import static com.ericsson.gerrit.plugins.highavailability.Configuration.MAX_TRIES_KEY;
@@ -153,16 +154,16 @@
}
@Test
- public void testGetJGroupsChannel() throws Exception {
+ public void testGetJGroupsCluster() throws Exception {
when(configMock.getEnum(PEER_INFO_SECTION, null, STRATEGY_KEY, DEFAULT_PEER_INFO_STRATEGY))
.thenReturn(Configuration.PeerInfoStrategy.JGROUPS);
initializeConfiguration();
- assertThat(configuration.peerInfoJGroups().clusterName()).isEqualTo(DEFAULT_CLUSTER_NAME);
+ assertThat(configuration.jgroups().clusterName()).isEqualTo(DEFAULT_CLUSTER_NAME);
- when(configMock.getString(PEER_INFO_SECTION, JGROUPS_SUBSECTION, CLUSTER_NAME_KEY))
+ when(configMock.getString(JGROUPS_SECTION, null, CLUSTER_NAME_KEY))
.thenReturn("foo");
initializeConfiguration();
- assertThat(configuration.peerInfoJGroups().clusterName()).isEqualTo("foo");
+ assertThat(configuration.jgroups().clusterName()).isEqualTo("foo");
}
@Test
@@ -170,13 +171,13 @@
when(configMock.getEnum(PEER_INFO_SECTION, null, STRATEGY_KEY, DEFAULT_PEER_INFO_STRATEGY))
.thenReturn(Configuration.PeerInfoStrategy.JGROUPS);
initializeConfiguration();
- assertThat(configuration.peerInfoJGroups().skipInterface())
+ assertThat(configuration.jgroups().skipInterface())
.isEqualTo(DEFAULT_SKIP_INTERFACE_LIST);
- when(configMock.getStringList(PEER_INFO_SECTION, JGROUPS_SUBSECTION, SKIP_INTERFACE_KEY))
+ when(configMock.getStringList(JGROUPS_SECTION, null, SKIP_INTERFACE_KEY))
.thenReturn(new String[] {"lo*", "eth0"});
initializeConfiguration();
- assertThat(configuration.peerInfoJGroups().skipInterface())
+ assertThat(configuration.jgroups().skipInterface())
.containsAllOf("lo*", "eth0")
.inOrder();
}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinderTest.java
index 7b1dea4..3fb5a90 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/InetAddressFinderTest.java
@@ -29,12 +29,12 @@
public class InetAddressFinderTest {
@Mock private Configuration configuration;
- @Mock private Configuration.PeerInfoJGroups jgroupsConfig;
+ @Mock private Configuration.JGroups jgroupsConfig;
private InetAddressFinder finder;
@Before
public void setUp() {
- when(configuration.peerInfoJGroups()).thenReturn(jgroupsConfig);
+ when(configuration.jgroups()).thenReturn(jgroupsConfig);
finder = new InetAddressFinder(configuration);
}