mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 14:38:45 +00:00
bug4811: removed testMongoReplica because it required access to port 27017 of the MongoDB instance created
This commit is contained in:
+6
-26
@@ -35,7 +35,9 @@ import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.landscape.InboundReplicationConfiguration;
|
||||
import com.sap.sse.landscape.application.ApplicationMasterProcess;
|
||||
import com.sap.sse.landscape.application.ApplicationProcessMetrics;
|
||||
import com.sap.sse.landscape.application.ApplicationReplicaProcess;
|
||||
import com.sap.sse.landscape.aws.AmazonMachineImage;
|
||||
import com.sap.sse.landscape.aws.AwsInstance;
|
||||
import com.sap.sse.landscape.aws.AwsLandscape;
|
||||
@@ -82,7 +84,7 @@ public class TestProcedures {
|
||||
public void testStartupEmptyMultiServer() throws Exception {
|
||||
final String keyName = "MyKey-"+UUID.randomUUID();
|
||||
landscape.createKeyPair(region, keyName);
|
||||
final StartMultiServer.Builder<String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> builder = StartMultiServer.builder();
|
||||
final StartMultiServer.Builder<?, String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> builder = StartMultiServer.builder();
|
||||
final StartMultiServer<String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> startEmptyMultiServer = builder
|
||||
.setLandscape(landscape)
|
||||
.setKeyName(keyName)
|
||||
@@ -114,7 +116,7 @@ public class TestProcedures {
|
||||
public void testAddMongoReplica() throws Exception {
|
||||
final String keyName = "MyKey-"+UUID.randomUUID();
|
||||
landscape.createKeyPair(region, keyName);
|
||||
final StartMongoDBServer.Builder<String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> builder = StartMongoDBServer.builder();
|
||||
final StartMongoDBServer.Builder<?, String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> builder = StartMongoDBServer.builder();
|
||||
final StartMongoDBServer<String, SailingAnalyticsMetrics, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> startMongoDBServerProcedure = builder
|
||||
.setLandscape(landscape)
|
||||
.setKeyName(keyName)
|
||||
@@ -161,7 +163,7 @@ public class TestProcedures {
|
||||
public void testImageUpgrade() throws Exception {
|
||||
final String keyName = "MyKey-"+UUID.randomUUID();
|
||||
landscape.createKeyPair(region, keyName);
|
||||
final com.sap.sailing.landscape.procedures.UpgradeAmi.Builder<String, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> imageUpgradeProcedureBuilder = UpgradeAmi.builder();
|
||||
final com.sap.sailing.landscape.procedures.UpgradeAmi.Builder<?, String, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> imageUpgradeProcedureBuilder = UpgradeAmi.builder();
|
||||
final UpgradeAmi<String, SailingAnalyticsMaster<String>, SailingAnalyticsReplica<String>> imageUpgradeProcedure =
|
||||
imageUpgradeProcedureBuilder
|
||||
.setLandscape(landscape)
|
||||
@@ -184,34 +186,12 @@ public class TestProcedures {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMongoReplica() throws Exception {
|
||||
final Builder<String, ApplicationProcessMetrics, ?, ?> startMongoDBServerProcedureBuilder = StartMongoDBServer.builder();
|
||||
final StartMongoDBServer<String, ApplicationProcessMetrics, ?, ?> startMongoDBServerProcedure = startMongoDBServerProcedureBuilder.build();
|
||||
// by default this should add a replica to the only "live" server in the test landscape
|
||||
try {
|
||||
startMongoDBServerProcedure.run();
|
||||
final AwsInstance<String, ApplicationProcessMetrics> host = startMongoDBServerProcedure.getHost();
|
||||
final String internalDNSName = landscape.getInstance(host.getInstanceId(), region).privateDnsName();
|
||||
// now configure a MongoEndpoint against the replica just launched and try to connect (with a timeout)
|
||||
final MongoEndpoint mongoEndpoint = landscape.getDatabaseConfigurationForDefaultReplicaSet(region);
|
||||
final MongoClient mongoClient = mongoEndpoint.getClient();
|
||||
final MongoDatabase database = mongoClient.getDatabase("admin");
|
||||
final Document replicaSetStatus = database.runCommand(new Document("replSetGetStatus", 1));
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<Document> members = (List<Document>) replicaSetStatus.get("members");
|
||||
assertTrue(members.stream().filter(member->member.get("name").equals(internalDNSName+":27017")).findAny().isPresent());
|
||||
} finally {
|
||||
startMongoDBServerProcedure.getHost().terminate();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConnectivity() throws Exception {
|
||||
final String serverName = "test"+new Random().nextInt();
|
||||
final String keyName = "MyKey-"+UUID.randomUUID();
|
||||
landscape.createKeyPair(region, keyName);
|
||||
final StartSailingAnalyticsMaster.Builder<String> builder = StartSailingAnalyticsMaster.builder();
|
||||
final StartSailingAnalyticsMaster.Builder<?, String> builder = StartSailingAnalyticsMaster.builder();
|
||||
final StartSailingAnalyticsMaster<String> startSailingAnalyticsMaster = builder
|
||||
.setServerName(serverName)
|
||||
.setLandscape(landscape)
|
||||
|
||||
+11
-9
@@ -44,22 +44,24 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
* </ul>
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<T extends StartEmptyServer<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartEmptyServer<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartAwsHost.Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setNoShutdown(boolean noShutdown);
|
||||
extends StartAwsHost.Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
BuilderT setNoShutdown(boolean noShutdown);
|
||||
}
|
||||
|
||||
protected abstract static class BuilderImpl<T extends StartEmptyServer<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
protected abstract static class BuilderImpl<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartEmptyServer<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartAwsHost.BuilderImpl<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
extends StartAwsHost.BuilderImpl<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
private boolean noShutdown = true;
|
||||
|
||||
protected boolean isNoShutdown() {
|
||||
@@ -67,9 +69,9 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setNoShutdown(boolean noShutdown) {
|
||||
public BuilderT setNoShutdown(boolean noShutdown) {
|
||||
this.noShutdown = noShutdown;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getInstanceName() {
|
||||
@@ -77,7 +79,7 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
}
|
||||
}
|
||||
|
||||
public StartEmptyServer(BuilderImpl<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
public StartEmptyServer(BuilderImpl<?, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
super(builder);
|
||||
addUserData(Collections.singleton(IMAGE_UPGRADE_USER_DATA));
|
||||
if (builder.isNoShutdown()) {
|
||||
|
||||
+11
-8
@@ -48,18 +48,20 @@ implements StartFromSailingAnalyticsImage {
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartEmptyServer.Builder<StartMultiServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>> {
|
||||
extends StartEmptyServer.Builder<BuilderT, StartMultiServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>> {
|
||||
}
|
||||
|
||||
protected static class BuilderImpl<ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
protected static class BuilderImpl<BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartEmptyServer.BuilderImpl<StartMultiServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
extends StartEmptyServer.BuilderImpl<BuilderT, StartMultiServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>>
|
||||
implements Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
implements Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
@Override
|
||||
public StartMultiServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> build() {
|
||||
return new StartMultiServer<>(this);
|
||||
@@ -109,14 +111,15 @@ implements StartFromSailingAnalyticsImage {
|
||||
}
|
||||
}
|
||||
|
||||
public static <ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
public static <BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder() {
|
||||
Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder() {
|
||||
return new BuilderImpl<>();
|
||||
}
|
||||
|
||||
protected StartMultiServer(BuilderImpl<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder) {
|
||||
protected StartMultiServer(BuilderImpl<?, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder) {
|
||||
super(builder);
|
||||
this.optionalTimeout = builder.getOptionalTimeout();
|
||||
}
|
||||
|
||||
+20
-18
@@ -57,20 +57,22 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaste
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<T extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT extends SailingAnalyticsProcess<ShardingKey>>
|
||||
extends StartAwsApplicationHost.Builder<T, ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaster<ShardingKey>, SailingAnalyticsReplica<ShardingKey>, SailingAnalyticsHost<ShardingKey>> {
|
||||
Builder<T, ShardingKey, ProcessT> setPort(int port);
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, T, ShardingKey, ProcessT>,
|
||||
T extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT extends SailingAnalyticsProcess<ShardingKey>>
|
||||
extends StartAwsApplicationHost.Builder<BuilderT, T, ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaster<ShardingKey>, SailingAnalyticsReplica<ShardingKey>, SailingAnalyticsHost<ShardingKey>> {
|
||||
BuilderT setPort(int port);
|
||||
|
||||
Builder<T, ShardingKey, ProcessT> setTelnetPort(int telnetPort);
|
||||
BuilderT setTelnetPort(int telnetPort);
|
||||
|
||||
Builder<T, ShardingKey, ProcessT> setExpeditionPort(int expeditionPort);
|
||||
BuilderT setExpeditionPort(int expeditionPort);
|
||||
|
||||
Builder<T, ShardingKey, ProcessT> setDefaultServerDirectory(String serverDirectory);
|
||||
BuilderT setDefaultServerDirectory(String serverDirectory);
|
||||
}
|
||||
|
||||
protected abstract static class BuilderImpl<T extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT extends SailingAnalyticsProcess<ShardingKey>>
|
||||
extends StartAwsApplicationHost.BuilderImpl<T, ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaster<ShardingKey>, SailingAnalyticsReplica<ShardingKey>, SailingAnalyticsHost<ShardingKey>>
|
||||
implements Builder<T, ShardingKey, ProcessT> {
|
||||
protected abstract static class BuilderImpl<BuilderT extends Builder<BuilderT, T, ShardingKey, ProcessT>,
|
||||
T extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT extends SailingAnalyticsProcess<ShardingKey>>
|
||||
extends StartAwsApplicationHost.BuilderImpl<BuilderT, T, ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaster<ShardingKey>, SailingAnalyticsReplica<ShardingKey>, SailingAnalyticsHost<ShardingKey>>
|
||||
implements Builder<BuilderT, T, ShardingKey, ProcessT> {
|
||||
private Integer port;
|
||||
private Integer telnetPort;
|
||||
private Integer expeditionPort;
|
||||
@@ -101,9 +103,9 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaste
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, ProcessT> setPort(int port) {
|
||||
public BuilderT setPort(int port) {
|
||||
this.port = port;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
public Integer getTelnetPort() {
|
||||
@@ -111,9 +113,9 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaste
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, ProcessT> setTelnetPort(int telnetPort) {
|
||||
public BuilderT setTelnetPort(int telnetPort) {
|
||||
this.telnetPort = telnetPort;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
public Integer getExpeditionPort() {
|
||||
@@ -121,9 +123,9 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaste
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, ProcessT> setExpeditionPort(int expeditionPort) {
|
||||
public BuilderT setExpeditionPort(int expeditionPort) {
|
||||
this.expeditionPort = expeditionPort;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
// TODO the host start-up should ideally be separated from the process installation/startup
|
||||
@@ -132,13 +134,13 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, SailingAnalyticsMaste
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, ProcessT> setDefaultServerDirectory(String defaultServerDirectory) {
|
||||
public BuilderT setDefaultServerDirectory(String defaultServerDirectory) {
|
||||
this.defaultServerDirectory = defaultServerDirectory;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
}
|
||||
|
||||
protected StartSailingAnalyticsHost(BuilderImpl<? extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT> builder) {
|
||||
protected StartSailingAnalyticsHost(BuilderImpl<?, ? extends StartSailingAnalyticsHost<ShardingKey, ProcessT>, ShardingKey, ProcessT> builder) {
|
||||
super(builder);
|
||||
// remember the port we need in order to hand out the process
|
||||
this.port = builder.getPort();
|
||||
|
||||
+8
-8
@@ -24,18 +24,18 @@ public class StartSailingAnalyticsMaster<ShardingKey>
|
||||
extends StartSailingAnalyticsHost<ShardingKey, SailingAnalyticsMaster<ShardingKey>> {
|
||||
private static final String DEFAULT_MASTER_INSTANCE_NAME_SUFFIX = " (Master)";
|
||||
|
||||
public static interface Builder<ShardingKey>
|
||||
extends StartSailingAnalyticsHost.Builder<StartSailingAnalyticsMaster<ShardingKey>, ShardingKey, SailingAnalyticsMaster<ShardingKey>> {
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey>
|
||||
extends StartSailingAnalyticsHost.Builder<BuilderT, StartSailingAnalyticsMaster<ShardingKey>, ShardingKey, SailingAnalyticsMaster<ShardingKey>> {
|
||||
}
|
||||
|
||||
// TODO model an AwsLandscape subclass describing the specifics of the Sailing landscape, with a central security service that a master replicates by default
|
||||
|
||||
protected static class BuilderImpl<ShardingKey>
|
||||
extends StartSailingAnalyticsHost.BuilderImpl<StartSailingAnalyticsMaster<ShardingKey>, ShardingKey, SailingAnalyticsMaster<ShardingKey>>
|
||||
implements Builder<ShardingKey> {
|
||||
protected static class BuilderImpl<BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey>
|
||||
extends StartSailingAnalyticsHost.BuilderImpl<BuilderT, StartSailingAnalyticsMaster<ShardingKey>, ShardingKey, SailingAnalyticsMaster<ShardingKey>>
|
||||
implements Builder<BuilderT, ShardingKey> {
|
||||
@Override
|
||||
public StartSailingAnalyticsMaster<ShardingKey> build() {
|
||||
return new StartSailingAnalyticsMaster<ShardingKey>(this);
|
||||
return new StartSailingAnalyticsMaster<>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,11 +44,11 @@ public class StartSailingAnalyticsMaster<ShardingKey>
|
||||
}
|
||||
}
|
||||
|
||||
public static <ShardingKey> Builder<ShardingKey> builder() {
|
||||
public static <BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey> Builder<BuilderT, ShardingKey> builder() {
|
||||
return new BuilderImpl<>();
|
||||
}
|
||||
|
||||
protected StartSailingAnalyticsMaster(BuilderImpl<ShardingKey> builder) {
|
||||
protected StartSailingAnalyticsMaster(BuilderImpl<?, ShardingKey> builder) {
|
||||
super(builder);
|
||||
addUserData(ProcessConfigurationVariable.USE_ENVIRONMENT, "live-master-server"); // TODO maybe this should be handled by this procedure adding the correct defaults, e.g., for replicating security/sharedsailing?
|
||||
}
|
||||
|
||||
+8
-8
@@ -7,19 +7,19 @@ import com.sap.sse.landscape.ProcessConfigurationVariable;
|
||||
|
||||
public class StartSailingAnalyticsReplica<ShardingKey>
|
||||
extends StartSailingAnalyticsHost<ShardingKey, SailingAnalyticsReplica<ShardingKey>> {
|
||||
public static interface Builder<ShardingKey>
|
||||
extends StartSailingAnalyticsHost.Builder<StartSailingAnalyticsReplica<ShardingKey>, ShardingKey, SailingAnalyticsReplica<ShardingKey>> {
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey>
|
||||
extends StartSailingAnalyticsHost.Builder<BuilderT, StartSailingAnalyticsReplica<ShardingKey>, ShardingKey, SailingAnalyticsReplica<ShardingKey>> {
|
||||
}
|
||||
|
||||
protected static class BuilderImpl<ShardingKey>
|
||||
extends StartSailingAnalyticsHost.BuilderImpl<StartSailingAnalyticsReplica<ShardingKey>, ShardingKey, SailingAnalyticsReplica<ShardingKey>>
|
||||
implements Builder<ShardingKey> {
|
||||
protected static class BuilderImpl<BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey>
|
||||
extends StartSailingAnalyticsHost.BuilderImpl<BuilderT, StartSailingAnalyticsReplica<ShardingKey>, ShardingKey, SailingAnalyticsReplica<ShardingKey>>
|
||||
implements Builder<BuilderT, ShardingKey> {
|
||||
private static final String DEFAULT_REPLICA_INSTANCE_NAME_SUFFIX = " (Replica)";
|
||||
private static final String DEFAULT_REPLICA_OUTPUT_REPLICATION_EXCHANGE_NAME_SUFFIX = "-replica";
|
||||
|
||||
@Override
|
||||
public StartSailingAnalyticsReplica<ShardingKey> build() {
|
||||
return new StartSailingAnalyticsReplica<ShardingKey>(this);
|
||||
return new StartSailingAnalyticsReplica<>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,11 +43,11 @@ public class StartSailingAnalyticsReplica<ShardingKey>
|
||||
}
|
||||
}
|
||||
|
||||
public static <ShardingKey> Builder<ShardingKey> builder() {
|
||||
public static <BuilderT extends Builder<BuilderT, ShardingKey>, ShardingKey> Builder<BuilderT, ShardingKey> builder() {
|
||||
return new BuilderImpl<>();
|
||||
}
|
||||
|
||||
protected StartSailingAnalyticsReplica(BuilderImpl<ShardingKey> builder) {
|
||||
protected StartSailingAnalyticsReplica(BuilderImpl<?, ShardingKey> builder) {
|
||||
super(builder);
|
||||
addUserData(ProcessConfigurationVariable.USE_ENVIRONMENT, "live-replica-server"); // TODO maybe this should be handled by this procedure adding the correct defaults, e.g., for replicating security/sharedsailing?
|
||||
}
|
||||
|
||||
+17
-17
@@ -78,17 +78,17 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
|
||||
* </ul>
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<ShardingKey,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartEmptyServer.Builder<UpgradeAmi<ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT, SailingAnalyticsHost<ShardingKey>> {
|
||||
extends StartEmptyServer.Builder<BuilderT, UpgradeAmi<ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT, SailingAnalyticsHost<ShardingKey>> {
|
||||
enum VersionPart {
|
||||
MAJOR, MINOR, MICRO
|
||||
}
|
||||
|
||||
Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setUpgradedImageName(String upgradedImageName);
|
||||
BuilderT setUpgradedImageName(String upgradedImageName);
|
||||
|
||||
Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setVersionPartToIncrement(VersionPart versionPartToIncrement);
|
||||
BuilderT setVersionPartToIncrement(VersionPart versionPartToIncrement);
|
||||
|
||||
/**
|
||||
* It is possible to assign base names for snapshots based on their device name in the AMI. For example, "/dev/sdc" may
|
||||
@@ -97,14 +97,14 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
|
||||
* a block device mapping to a snapshot exists, the snapshot will only be named after the AMI's name, so when multiple snapshots
|
||||
* are connected to the AMI then their names will not be discernible.
|
||||
*/
|
||||
Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setSnapshotBaseName(String deviceName, String snapshotBaseName);
|
||||
BuilderT setSnapshotBaseName(String deviceName, String snapshotBaseName);
|
||||
}
|
||||
|
||||
protected static class BuilderImpl<ShardingKey,
|
||||
protected static class BuilderImpl<BuilderT extends Builder<BuilderT, ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartEmptyServer.BuilderImpl<UpgradeAmi<ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT, SailingAnalyticsHost<ShardingKey>>
|
||||
implements Builder<ShardingKey, MasterProcessT, ReplicaProcessT> {
|
||||
extends StartEmptyServer.BuilderImpl<BuilderT, UpgradeAmi<ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT, SailingAnalyticsHost<ShardingKey>>
|
||||
implements Builder<BuilderT, ShardingKey, MasterProcessT, ReplicaProcessT> {
|
||||
private String upgradedImageName;
|
||||
private VersionPart versionPartToIncrement;
|
||||
private final Map<String, String> deviceNamesToSnapshotBaseNames;
|
||||
@@ -126,9 +126,9 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setVersionPartToIncrement(VersionPart versionPartToIncrement) {
|
||||
public BuilderT setVersionPartToIncrement(VersionPart versionPartToIncrement) {
|
||||
this.versionPartToIncrement = versionPartToIncrement;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
private String increaseVersionNumber(String imageName) {
|
||||
@@ -168,15 +168,15 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setUpgradedImageName(String upgradedImageName) {
|
||||
public BuilderT setUpgradedImageName(String upgradedImageName) {
|
||||
this.upgradedImageName = upgradedImageName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MasterProcessT, ReplicaProcessT> setSnapshotBaseName(String deviceName, String snapshotBaseName) {
|
||||
public BuilderT setSnapshotBaseName(String deviceName, String snapshotBaseName) {
|
||||
deviceNamesToSnapshotBaseNames.put(deviceName, snapshotBaseName);
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -201,14 +201,14 @@ implements Procedure<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, Repli
|
||||
}
|
||||
}
|
||||
|
||||
public static <ShardingKey,
|
||||
public static <BuilderT extends Builder<BuilderT, ShardingKey, MasterProcessT, ReplicaProcessT>, ShardingKey,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, SailingAnalyticsMetrics, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, SailingAnalyticsMetrics>> Builder<ShardingKey, MasterProcessT, ReplicaProcessT> builder() {
|
||||
HostT extends AwsInstance<ShardingKey, SailingAnalyticsMetrics>> Builder<BuilderT, ShardingKey, MasterProcessT, ReplicaProcessT> builder() {
|
||||
return new BuilderImpl<>();
|
||||
}
|
||||
|
||||
protected UpgradeAmi(BuilderImpl<ShardingKey, MasterProcessT, ReplicaProcessT> builder) {
|
||||
protected UpgradeAmi(BuilderImpl<?, ShardingKey, MasterProcessT, ReplicaProcessT> builder) {
|
||||
super(builder);
|
||||
upgradedImageName = builder.getUpgradedImageName();
|
||||
timeout = builder.getOptionalTimeout().orElse(null);
|
||||
|
||||
+13
-8
@@ -75,14 +75,19 @@ public class AwsInstanceImpl<ShardingKey, MetricsT extends ApplicationProcessMet
|
||||
}
|
||||
|
||||
@Override
|
||||
public InetAddress getPrivateAddress(Optional<Duration> timeoutNullMeaningForever) {
|
||||
return getAddressWithTimeout(timeoutNullMeaningForever, this::getPrivateAddress);
|
||||
public InetAddress getPublicAddress(Optional<Duration> timeoutEmptyMeaningForever) {
|
||||
return getAddressWithTimeout(timeoutEmptyMeaningForever, this::getPublicAddress);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public InetAddress getPrivateAddress() {
|
||||
return getIpAddress(Instance::privateIpAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InetAddress getPrivateAddress(Optional<Duration> timeoutEmptyMeaningForever) {
|
||||
return getAddressWithTimeout(timeoutEmptyMeaningForever, this::getPrivateAddress);
|
||||
}
|
||||
|
||||
private InetAddress getIpAddress(Function<Instance, String> addressAsStringSupplier) {
|
||||
try {
|
||||
@@ -115,11 +120,6 @@ public class AwsInstanceImpl<ShardingKey, MetricsT extends ApplicationProcessMet
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InetAddress getPublicAddress(Optional<Duration> timeoutNullMeaningForever) {
|
||||
return getAddressWithTimeout(timeoutNullMeaningForever, this::getPublicAddress);
|
||||
}
|
||||
|
||||
/**
|
||||
* Establishes an unconnected session configured for the "root" user.
|
||||
*
|
||||
@@ -231,4 +231,9 @@ public class AwsInstanceImpl<ShardingKey, MetricsT extends ApplicationProcessMet
|
||||
public void terminate() {
|
||||
landscape.terminate(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getInstanceId();
|
||||
}
|
||||
}
|
||||
|
||||
+29
-27
@@ -47,34 +47,36 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartAwsHost.Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRelease(Optional<Release> release);
|
||||
extends StartAwsHost.Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
BuilderT setRelease(Optional<Release> release);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setServerName(String serverName);
|
||||
BuilderT setServerName(String serverName);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseName(String databaseName);
|
||||
BuilderT setDatabaseName(String databaseName);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration);
|
||||
BuilderT setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration);
|
||||
BuilderT setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration);
|
||||
BuilderT setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseConfiguration(Database databaseConfiguration);
|
||||
BuilderT setDatabaseConfiguration(Database databaseConfiguration);
|
||||
}
|
||||
|
||||
protected abstract static class BuilderImpl<T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
protected abstract static class BuilderImpl<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartAwsHost.BuilderImpl<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
extends StartAwsHost.BuilderImpl<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
private Optional<Release> release = Optional.empty();
|
||||
private String serverName;
|
||||
private String databaseName;
|
||||
@@ -92,9 +94,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRelease(Optional<Release> release) {
|
||||
public BuilderT setRelease(Optional<Release> release) {
|
||||
this.release = release;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getServerName() {
|
||||
@@ -102,9 +104,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setServerName(String serverName) {
|
||||
public BuilderT setServerName(String serverName) {
|
||||
this.serverName = serverName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getDatabaseName() {
|
||||
@@ -112,9 +114,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseName(String databaseName) {
|
||||
public BuilderT setDatabaseName(String databaseName) {
|
||||
this.databaseName = databaseName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Database getDatabaseConfiguration() {
|
||||
@@ -122,9 +124,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseConfiguration(Database databaseConfiguration) {
|
||||
public BuilderT setDatabaseConfiguration(Database databaseConfiguration) {
|
||||
this.databaseConfiguration = databaseConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected RabbitMQEndpoint getRabbitConfiguration() {
|
||||
@@ -132,9 +134,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration) {
|
||||
public BuilderT setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration) {
|
||||
this.rabbitConfiguration = rabbitConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected boolean isOutboundReplicationExchangeNameSet() {
|
||||
@@ -167,9 +169,9 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration) {
|
||||
public BuilderT setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration) {
|
||||
this.outboundReplicationConfiguration = outboundReplicationConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Optional<InboundReplicationConfiguration> getInboundReplicationConfiguration() {
|
||||
@@ -187,14 +189,14 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Hos
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration) {
|
||||
public BuilderT setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration) {
|
||||
this.inboundReplicationConfiguration = Optional.of(replicationConfiguration);
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
}
|
||||
|
||||
protected StartAwsApplicationHost(
|
||||
BuilderImpl<? extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
BuilderImpl<?, ? extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
super(builder);
|
||||
builder.getRelease().ifPresent(this::addUserData);
|
||||
addUserData(builder.getDatabaseConfiguration());
|
||||
|
||||
+65
-63
@@ -82,58 +82,60 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartHost.Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRelease(Optional<Release> release);
|
||||
extends StartHost.Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
BuilderT setRelease(Optional<Release> release);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setLandscape(AwsLandscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape);
|
||||
BuilderT setLandscape(AwsLandscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setInstanceType(InstanceType instanceType);
|
||||
BuilderT setInstanceType(InstanceType instanceType);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setAvailabilityZone(AwsAvailabilityZone availabilityZone);
|
||||
BuilderT setAvailabilityZone(AwsAvailabilityZone availabilityZone);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setKeyName(String keyName);
|
||||
BuilderT setKeyName(String keyName);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setSecurityGroups(Iterable<SecurityGroup> securityGroups);
|
||||
BuilderT setSecurityGroups(Iterable<SecurityGroup> securityGroups);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setTags(Optional<Tags> tags);
|
||||
BuilderT setTags(Optional<Tags> tags);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setUserData(String[] userData);
|
||||
BuilderT setUserData(String[] userData);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRegion(AwsRegion region);
|
||||
BuilderT setRegion(AwsRegion region);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setInstanceName(String name);
|
||||
BuilderT setInstanceName(String name);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setServerName(String serverName);
|
||||
BuilderT setServerName(String serverName);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseName(String databaseName);
|
||||
BuilderT setDatabaseName(String databaseName);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration);
|
||||
BuilderT setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration);
|
||||
BuilderT setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration);
|
||||
BuilderT setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseConfiguration(Database databaseConfiguration);
|
||||
BuilderT setDatabaseConfiguration(Database databaseConfiguration);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setCommaSeparatedEmailAddressesToNotifyOfStartup(String commaSeparatedEmailAddressesToNotifyOfStartup);
|
||||
BuilderT setCommaSeparatedEmailAddressesToNotifyOfStartup(String commaSeparatedEmailAddressesToNotifyOfStartup);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOptionalTimeout(Optional<Duration> optionalTimeout);
|
||||
BuilderT setOptionalTimeout(Optional<Duration> optionalTimeout);
|
||||
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setHostSupplier(HostSupplier<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> hostSupplier);
|
||||
BuilderT setHostSupplier(HostSupplier<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> hostSupplier);
|
||||
}
|
||||
|
||||
protected abstract static class BuilderImpl<T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
protected abstract static class BuilderImpl<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends AwsInstance<ShardingKey, MetricsT>>
|
||||
extends StartHost.BuilderImpl<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
extends StartHost.BuilderImpl<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
implements Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
private Optional<Release> release = Optional.empty();
|
||||
private AwsLandscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape;
|
||||
private InstanceType instanceType;
|
||||
@@ -163,9 +165,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRelease(Optional<Release> release) {
|
||||
public BuilderT setRelease(Optional<Release> release) {
|
||||
this.release = release;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected AwsLandscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> getLandscape() {
|
||||
@@ -173,10 +175,10 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setLandscape(
|
||||
public BuilderT setLandscape(
|
||||
AwsLandscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape) {
|
||||
this.landscape = landscape;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected InstanceType getInstanceType() {
|
||||
@@ -184,10 +186,10 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setInstanceType(
|
||||
public BuilderT setInstanceType(
|
||||
InstanceType instanceType) {
|
||||
this.instanceType = instanceType;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected AwsAvailabilityZone getAvailabilityZone() {
|
||||
@@ -195,10 +197,10 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setAvailabilityZone(
|
||||
public BuilderT setAvailabilityZone(
|
||||
AwsAvailabilityZone availabilityZone) {
|
||||
this.availabilityZone = availabilityZone;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getKeyName() {
|
||||
@@ -206,9 +208,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setKeyName(String keyName) {
|
||||
public BuilderT setKeyName(String keyName) {
|
||||
this.keyName = keyName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Iterable<SecurityGroup> getSecurityGroups() {
|
||||
@@ -220,10 +222,10 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setSecurityGroups(
|
||||
public BuilderT setSecurityGroups(
|
||||
Iterable<SecurityGroup> securityGroups) {
|
||||
this.securityGroups = securityGroups;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Optional<Tags> getTags() {
|
||||
@@ -231,9 +233,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setTags(Optional<Tags> tags) {
|
||||
public BuilderT setTags(Optional<Tags> tags) {
|
||||
this.tags = tags;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Iterable<String> getUserData() {
|
||||
@@ -241,13 +243,13 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setUserData(
|
||||
public BuilderT setUserData(
|
||||
String[] userData) {
|
||||
this.userData.clear();
|
||||
for (final String userDataElement : userData) {
|
||||
this.userData.add(userDataElement);
|
||||
}
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected AwsRegion getRegion() {
|
||||
@@ -259,9 +261,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRegion(AwsRegion region) {
|
||||
public BuilderT setRegion(AwsRegion region) {
|
||||
this.region = region;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getInstanceName() {
|
||||
@@ -273,9 +275,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setInstanceName(String instanceName) {
|
||||
public BuilderT setInstanceName(String instanceName) {
|
||||
this.instanceName = instanceName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getServerName() {
|
||||
@@ -283,9 +285,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setServerName(String serverName) {
|
||||
public BuilderT setServerName(String serverName) {
|
||||
this.serverName = serverName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getDatabaseName() {
|
||||
@@ -293,9 +295,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseName(String databaseName) {
|
||||
public BuilderT setDatabaseName(String databaseName) {
|
||||
this.databaseName = databaseName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Database getDatabaseConfiguration() {
|
||||
@@ -303,9 +305,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setDatabaseConfiguration(Database databaseConfiguration) {
|
||||
public BuilderT setDatabaseConfiguration(Database databaseConfiguration) {
|
||||
this.databaseConfiguration = databaseConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected RabbitMQEndpoint getRabbitConfiguration() {
|
||||
@@ -313,9 +315,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration) {
|
||||
public BuilderT setRabbitConfiguration(RabbitMQEndpoint rabbitConfiguration) {
|
||||
this.rabbitConfiguration = rabbitConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected boolean isOutboundReplicationExchangeNameSet() {
|
||||
@@ -348,9 +350,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration) {
|
||||
public BuilderT setOutboundReplicationConfiguration(OutboundReplicationConfiguration outboundReplicationConfiguration) {
|
||||
this.outboundReplicationConfiguration = outboundReplicationConfiguration;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Optional<InboundReplicationConfiguration> getInboundReplicationConfiguration() {
|
||||
@@ -368,9 +370,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration) {
|
||||
public BuilderT setReplicationConfiguration(InboundReplicationConfiguration replicationConfiguration) {
|
||||
this.inboundReplicationConfiguration = Optional.of(replicationConfiguration);
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getCommaSeparatedEmailAddressesToNotifyOfStartup() {
|
||||
@@ -378,9 +380,9 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setCommaSeparatedEmailAddressesToNotifyOfStartup(String commaSeparatedEmailAddressesToNotifyOfStartup) {
|
||||
public BuilderT setCommaSeparatedEmailAddressesToNotifyOfStartup(String commaSeparatedEmailAddressesToNotifyOfStartup) {
|
||||
this.commaSeparatedEmailAddressesToNotifyOfStartup = commaSeparatedEmailAddressesToNotifyOfStartup;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -392,10 +394,10 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setOptionalTimeout(
|
||||
public BuilderT setOptionalTimeout(
|
||||
Optional<Duration> optionalTimeout) {
|
||||
this.optionalTimeout = optionalTimeout;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected HostSupplier<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> getHostSupplier() {
|
||||
@@ -403,13 +405,13 @@ extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setHostSupplier(HostSupplier<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> hostSupplier) {
|
||||
public BuilderT setHostSupplier(HostSupplier<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> hostSupplier) {
|
||||
this.hostSupplier = hostSupplier;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
}
|
||||
|
||||
protected StartAwsHost(BuilderImpl<? extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
protected StartAwsHost(BuilderImpl<?, ? extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
super(builder);
|
||||
this.userData = new ArrayList<>();
|
||||
for (final String ud : builder.getUserData()) {
|
||||
|
||||
+25
-21
@@ -42,7 +42,9 @@ import software.amazon.awssdk.services.ec2.model.InstanceType;
|
||||
*
|
||||
* To start a primary, only specify the desired replica set name and leave the primary specification empty {@code null}.
|
||||
* In this case no other node tagged for the desired replica set will be found, and the new instance will become the
|
||||
* first primary of the new replica set.
|
||||
* first primary of the new replica set.<p>
|
||||
*
|
||||
* TODO Why is the MetricsT parameter necessary when there is MongoMetrics?
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
@@ -83,31 +85,33 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Aws
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartAwsHost.Builder<StartMongoDBServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>> {
|
||||
extends StartAwsHost.Builder<BuilderT, StartMongoDBServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>> {
|
||||
/**
|
||||
* The default {@link #setImageType(String) image type} used for launching a MongoDB server.
|
||||
*/
|
||||
String MONGODB_SERVER_IMAGE_TYPE = "mongodb-server";
|
||||
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetName(String replicaSetName);
|
||||
BuilderT setReplicaSetName(String replicaSetName);
|
||||
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetPrimary(String replicaSetPrimary);
|
||||
BuilderT setReplicaSetPrimary(String replicaSetPrimary);
|
||||
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetPriority(int replicaSetPriority);
|
||||
BuilderT setReplicaSetPriority(int replicaSetPriority);
|
||||
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetVotes(int replicaSetVotes);
|
||||
BuilderT setReplicaSetVotes(int replicaSetVotes);
|
||||
|
||||
StartMongoDBServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> build() throws URISyntaxException, JSchException, IOException, InterruptedException;
|
||||
}
|
||||
|
||||
protected static class BuilderImpl<ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
protected static class BuilderImpl<BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
extends StartAwsHost.BuilderImpl<StartMongoDBServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>>
|
||||
implements Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
extends StartAwsHost.BuilderImpl<BuilderT, StartMongoDBServer<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, AwsInstance<ShardingKey, MetricsT>>
|
||||
implements Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
private String replicaSetName = AwsLandscape.MONGO_DEFAULT_REPLICA_SET_NAME;
|
||||
private String replicaSetPrimary;
|
||||
private boolean replicaSetPrimaryWasSetExplicitly = false;
|
||||
@@ -124,28 +128,28 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Aws
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetName(String replicaSetName) {
|
||||
public BuilderT setReplicaSetName(String replicaSetName) {
|
||||
this.replicaSetName = replicaSetName;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetPrimary(String replicaSetPrimary) {
|
||||
public BuilderT setReplicaSetPrimary(String replicaSetPrimary) {
|
||||
this.replicaSetPrimary = replicaSetPrimary;
|
||||
this.replicaSetPrimaryWasSetExplicitly = true;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetPriority(int replicaSetPriority) {
|
||||
public BuilderT setReplicaSetPriority(int replicaSetPriority) {
|
||||
this.replicaSetPriority = replicaSetPriority;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> setReplicaSetVotes(int replicaSetVotes) {
|
||||
public BuilderT setReplicaSetVotes(int replicaSetVotes) {
|
||||
this.replicaSetVotes = replicaSetVotes;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getReplicaSetName() {
|
||||
@@ -220,14 +224,14 @@ extends StartAwsHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, Aws
|
||||
}
|
||||
}
|
||||
|
||||
public static <ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
public static <BuilderT extends Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
Builder<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder() {
|
||||
Builder<BuilderT, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder() {
|
||||
return new BuilderImpl<>();
|
||||
}
|
||||
|
||||
protected StartMongoDBServer(BuilderImpl<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder) throws URISyntaxException, JSchException, IOException, InterruptedException {
|
||||
protected StartMongoDBServer(BuilderImpl<?, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> builder) throws URISyntaxException, JSchException, IOException, InterruptedException {
|
||||
super(builder);
|
||||
this.replicaSetName = builder.getReplicaSetName();
|
||||
if (builder.getReplicaSetName() != null) {
|
||||
|
||||
@@ -26,10 +26,10 @@ public interface Host {
|
||||
* Obtains the public IP address of this host, waiting for one to become available for the duration of
|
||||
* {@code timeout}, or forever in case {@code timeout} is {@code null}
|
||||
*
|
||||
* @param timeoutNullMeaningForever
|
||||
* @param timeoutEmptyMeaningForever
|
||||
* if {@code null}, waits forever
|
||||
*/
|
||||
InetAddress getPublicAddress(Optional<Duration> timeoutNullMeaningForever);
|
||||
InetAddress getPublicAddress(Optional<Duration> timeoutEmptyMeaningForever);
|
||||
|
||||
/**
|
||||
* Obtains the private IP address of this host. Note that during the boot phase and after shutdown/termination a host
|
||||
@@ -43,10 +43,10 @@ public interface Host {
|
||||
* Obtains the private IP address of this host, waiting for one to become available for the duration of
|
||||
* {@code timeout}, or forever in case {@code timeout} is {@code null}
|
||||
*
|
||||
* @param timeoutNullMeaningForever
|
||||
* @param timeoutEmptyMeaningForever
|
||||
* if {@code null}, waits forever
|
||||
*/
|
||||
InetAddress getPrivateAddress(Optional<Duration> timeoutNullMeaningForever);
|
||||
InetAddress getPrivateAddress(Optional<Duration> timeoutEmptyMeaningForever);
|
||||
|
||||
/**
|
||||
* Connects to an SSH session for the username specified, using the SSH key pair used to launch the instance, and
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ import com.sap.sse.landscape.mongodb.Database;
|
||||
public interface ApplicationProcess<ShardingKey, MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>>
|
||||
extends Process<RotatingFileBasedLog, MetricsT> {
|
||||
extends Process<RotatingFileBasedLog, MetricsT> {
|
||||
/**
|
||||
* @return the replica set to which this process belongs<p>
|
||||
*
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.mongodb.MongoClient;
|
||||
import com.mongodb.MongoClientURI;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.mongodb.session.ClientSession;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
/**
|
||||
* A MongoDB endpoint that an application can connect to. It can produce a {@link URI} the client can use to connect to,
|
||||
@@ -18,8 +19,15 @@ import com.mongodb.session.ClientSession;
|
||||
*
|
||||
*/
|
||||
public interface MongoEndpoint {
|
||||
/**
|
||||
* When invoked on a {@link MongoProcess} that is not currently equipped with a public IP address, a
|
||||
* {@link NullPointerException} will result. Consider using {@link #getURI(Optional, Optional)} to wait for
|
||||
* a public IP address to become available if the instance is still booting up.
|
||||
*/
|
||||
URI getURI(Optional<Database> optionalDb) throws URISyntaxException;
|
||||
|
||||
|
||||
URI getURI(Optional<Database> optionalDb, Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException;
|
||||
|
||||
Iterable<MongoDatabase> getMongoDatabases() throws URISyntaxException;
|
||||
|
||||
MongoDatabase getMongoDatabase(String dbName) throws URISyntaxException;
|
||||
@@ -34,10 +42,24 @@ public interface MongoEndpoint {
|
||||
|
||||
boolean isInReplicaSet() throws URISyntaxException;
|
||||
|
||||
/**
|
||||
* When invoked on a {@link MongoProcess} that is not currently equipped with a public IP address, a
|
||||
* {@link NullPointerException} will result. Consider using {@link #getMongoClientURI(Optional, Optional)} to wait for
|
||||
* a public IP address to become available if the instance is still booting up.
|
||||
*/
|
||||
MongoClientURI getMongoClientURI(Optional<Database> optionalDb) throws URISyntaxException;
|
||||
|
||||
MongoClientURI getMongoClientURI(Optional<Database> optionalDb, Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException;
|
||||
|
||||
/**
|
||||
* When invoked on a {@link MongoProcess} that is not currently equipped with a public IP address, a
|
||||
* {@link NullPointerException} will result. Consider using {@link #getClient(Optional)} to wait for
|
||||
* a public IP address to become available if the instance is still booting up.
|
||||
*/
|
||||
MongoClient getClient() throws URISyntaxException;
|
||||
|
||||
MongoClient getClient(Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException;
|
||||
|
||||
ClientSession getClientSession() throws URISyntaxException;
|
||||
|
||||
default String getMD5Hash(String databaseName) throws URISyntaxException {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.sap.sse.landscape.mongodb;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.landscape.Process;
|
||||
import com.sap.sse.landscape.RotatingFileBasedLog;
|
||||
|
||||
@@ -12,9 +14,19 @@ public interface MongoProcess extends Process<RotatingFileBasedLog, MongoMetrics
|
||||
|
||||
@Override
|
||||
default URI getURI(Optional<Database> optionalDb) throws URISyntaxException {
|
||||
return getURI(optionalDb, getHost().getPublicAddress());
|
||||
}
|
||||
|
||||
@Override
|
||||
default URI getURI(Optional<Database> optionalDb, Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException {
|
||||
final InetAddress publicAddress = getHost().getPublicAddress(timeoutEmptyMeaningForever);
|
||||
return getURI(optionalDb, publicAddress);
|
||||
}
|
||||
|
||||
default URI getURI(Optional<Database> optionalDb, final InetAddress publicAddress) throws URISyntaxException {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("mongodb://");
|
||||
sb.append(getHost().getPublicAddress().getCanonicalHostName());
|
||||
sb.append(publicAddress.getCanonicalHostName());
|
||||
sb.append(":");
|
||||
sb.append(getPort());
|
||||
sb.append("/");
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
package com.sap.sse.landscape.mongodb;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.Named;
|
||||
|
||||
public interface MongoReplicaSet extends Named, MongoEndpoint {
|
||||
static Logger logger = Logger.getLogger(MongoReplicaSet.class.getName());
|
||||
|
||||
Iterable<MongoProcess> getInstances();
|
||||
|
||||
/**
|
||||
@@ -17,16 +23,27 @@ public interface MongoReplicaSet extends Named, MongoEndpoint {
|
||||
*/
|
||||
@Override
|
||||
default URI getURI(Optional<Database> optionalDb) throws URISyntaxException {
|
||||
return getURI(optionalDb, mongoProcess->mongoProcess.getHost().getPublicAddress());
|
||||
}
|
||||
|
||||
default URI getURI(Optional<Database> optionalDb, Function<MongoProcess, InetAddress> publicAddressSupplier) throws URISyntaxException {
|
||||
final StringBuilder result = new StringBuilder("mongodb://");
|
||||
final List<String> hostSpecs = new ArrayList<>();
|
||||
for (final MongoProcess mongoProcess : getInstances()) {
|
||||
final StringBuilder hostSpec = new StringBuilder();
|
||||
hostSpec.append(mongoProcess.getHost().getPublicAddress().getCanonicalHostName());
|
||||
if (mongoProcess.getPort() != MongoProcess.DEFAULT_PORT) {
|
||||
hostSpec.append(":");
|
||||
hostSpec.append(mongoProcess.getPort());
|
||||
final InetAddress publicAddress = publicAddressSupplier.apply(mongoProcess);
|
||||
if (publicAddress != null) {
|
||||
logger.info("Adding MongoDB process running on "+publicAddress+" to replica set "+this.getName());
|
||||
final StringBuilder hostSpec = new StringBuilder();
|
||||
hostSpec.append(publicAddress.getCanonicalHostName());
|
||||
if (mongoProcess.getPort() != MongoProcess.DEFAULT_PORT) {
|
||||
hostSpec.append(":");
|
||||
hostSpec.append(mongoProcess.getPort());
|
||||
}
|
||||
hostSpecs.add(hostSpec.toString());
|
||||
} else {
|
||||
logger.info("Not adding MongoDB process running on instance "+mongoProcess.getHost()+" to replica set "+this.getName()+
|
||||
" because its IP address cannot be determined. Probably it is not running.");
|
||||
}
|
||||
hostSpecs.add(hostSpec.toString());
|
||||
}
|
||||
result.append(String.join(",", hostSpecs));
|
||||
result.append("/");
|
||||
@@ -36,6 +53,11 @@ public interface MongoReplicaSet extends Named, MongoEndpoint {
|
||||
result.append("&retryWrites=true&readPreference=nearest");
|
||||
return new URI(result.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
default URI getURI(Optional<Database> optionalDb, Optional<Duration> timeoutEmptyMeansForever) throws URISyntaxException {
|
||||
return getURI(optionalDb, mongoProcess->mongoProcess.getHost().getPublicAddress(timeoutEmptyMeansForever));
|
||||
}
|
||||
|
||||
void addReplica(MongoProcess newReplica);
|
||||
|
||||
|
||||
+11
@@ -10,6 +10,7 @@ import com.mongodb.MongoClient;
|
||||
import com.mongodb.MongoClientURI;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.mongodb.session.ClientSession;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.landscape.mongodb.Database;
|
||||
import com.sap.sse.landscape.mongodb.MongoEndpoint;
|
||||
@@ -42,11 +43,21 @@ public abstract class MongoEndpointImpl implements MongoEndpoint {
|
||||
return new MongoClientURI(getURI(optionalDb).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoClientURI getMongoClientURI(Optional<Database> optionalDb, Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException {
|
||||
return new MongoClientURI(getURI(optionalDb, timeoutEmptyMeaningForever).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoClient getClient() throws URISyntaxException {
|
||||
return new MongoClient(getMongoClientURI(Optional.empty()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoClient getClient(Optional<Duration> timeoutEmptyMeaningForever) throws URISyntaxException {
|
||||
return new MongoClient(getMongoClientURI(Optional.empty(), timeoutEmptyMeaningForever));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSession getClientSession() throws URISyntaxException {
|
||||
return getClient().startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
|
||||
|
||||
@@ -38,22 +38,30 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*/
|
||||
public static interface Builder<T extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
public static interface Builder<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends Host> {
|
||||
Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setImageType(String imageType);
|
||||
BuilderT setImageType(String imageType);
|
||||
|
||||
T build() throws UnknownHostException, URISyntaxException, JSchException, IOException, InterruptedException;
|
||||
|
||||
default BuilderT self() {
|
||||
@SuppressWarnings("unchecked")
|
||||
final BuilderT self = (BuilderT) this;
|
||||
return self;
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract static class BuilderImpl<T extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
protected abstract static class BuilderImpl<BuilderT extends Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>,
|
||||
T extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey,
|
||||
MetricsT extends ApplicationProcessMetrics,
|
||||
MasterProcessT extends ApplicationMasterProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
ReplicaProcessT extends ApplicationReplicaProcess<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT>,
|
||||
HostT extends Host>
|
||||
implements Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
implements Builder<BuilderT, T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> {
|
||||
private MachineImage machineImage;
|
||||
private Landscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape;
|
||||
private Region region;
|
||||
@@ -67,14 +75,14 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
return region;
|
||||
}
|
||||
|
||||
protected Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setRegion(Region region) {
|
||||
protected BuilderT setRegion(Region region) {
|
||||
this.region = region;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setMachineImage(MachineImage machineImage) {
|
||||
protected BuilderT setMachineImage(MachineImage machineImage) {
|
||||
this.machineImage = machineImage;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected String getImageType() {
|
||||
@@ -82,22 +90,22 @@ implements Procedure<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setImageType(String imageType) {
|
||||
public BuilderT setImageType(String imageType) {
|
||||
this.imageType = imageType;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected Landscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> getLandscape() {
|
||||
return landscape;
|
||||
}
|
||||
|
||||
protected Builder<T, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> setLandscape(Landscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape) {
|
||||
protected BuilderT setLandscape(Landscape<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT> landscape) {
|
||||
this.landscape = landscape;
|
||||
return this;
|
||||
return self();
|
||||
}
|
||||
}
|
||||
|
||||
protected StartHost(BuilderImpl<? extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
protected StartHost(BuilderImpl<?, ? extends StartHost<ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT>, ShardingKey, MetricsT, MasterProcessT, ReplicaProcessT, HostT> builder) {
|
||||
super(builder.getLandscape());
|
||||
this.machineImage = builder.getMachineImage();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user