Upgrade to Flapdoodle 3.0

This commit is contained in:
Mark Paluch
2021-03-22 12:04:42 +01:00
parent 9e442b766c
commit 006e61a341
3 changed files with 47 additions and 54 deletions

View File

@@ -37,10 +37,6 @@
<module>util</module>
</modules>
<properties>
<embedded-mongo.version>2.1.1</embedded-mongo.version>
</properties>
<dependencies>
<dependency>

View File

@@ -16,19 +16,18 @@
package example.springdata.mongodb.util;
import de.flapdoodle.embed.mongo.Command;
import de.flapdoodle.embed.mongo.config.IMongoCmdOptions;
import de.flapdoodle.embed.mongo.config.IMongodConfig;
import de.flapdoodle.embed.mongo.config.IMongosConfig;
import de.flapdoodle.embed.mongo.config.MongoCmdOptionsBuilder;
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
import de.flapdoodle.embed.mongo.config.MongosConfigBuilder;
import de.flapdoodle.embed.mongo.config.ImmutableMongodConfig;
import de.flapdoodle.embed.mongo.config.ImmutableMongosConfig;
import de.flapdoodle.embed.mongo.config.MongoCmdOptions;
import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.config.MongosConfig;
import de.flapdoodle.embed.mongo.config.Net;
import de.flapdoodle.embed.mongo.config.Storage;
import de.flapdoodle.embed.mongo.distribution.Feature;
import de.flapdoodle.embed.mongo.distribution.IFeatureAwareVersion;
import de.flapdoodle.embed.mongo.distribution.Versions;
import de.flapdoodle.embed.process.config.io.ProcessOutput;
import de.flapdoodle.embed.process.distribution.GenericVersion;
import de.flapdoodle.embed.process.distribution.Version;
import de.flapdoodle.embed.process.io.Processors;
import de.flapdoodle.embed.process.runtime.Network;
@@ -68,7 +67,7 @@ public class EmbeddedMongo extends ExternalResource {
private static final String STORAGE_ENGINE = "wiredTiger";
private static final IFeatureAwareVersion VERSION = Versions.withFeatures(new GenericVersion("3.7.9"),
private static final IFeatureAwareVersion VERSION = Versions.withFeatures(Version.of("3.7.9"),
Feature.ONLY_WITH_SSL, Feature.ONLY_64BIT, Feature.NO_HTTP_INTERFACE_ARG, Feature.STORAGE_ENGINE,
Feature.MONGOS_CONFIGDB_SET_STYLE, Feature.NO_CHUNKSIZE_ARG);
@@ -302,12 +301,12 @@ public class EmbeddedMongo extends ExternalResource {
private void doStart() {
Map<String, List<IMongodConfig>> replicaSets = new LinkedHashMap<>();
Map<String, List<MongodConfig>> replicaSets = new LinkedHashMap<>();
replicaSets.put(configServerReplicaSetName, initConfigServers());
replicaSets.put(replicaSetName, initReplicaSet());
// create mongos
IMongosConfig mongosConfig = defaultMongosConfig(serverVersion, mongosPort, defaultCommandOptions(),
MongosConfig mongosConfig = defaultMongosConfig(serverVersion, mongosPort, defaultCommandOptions(),
configServerReplicaSetName, configServerPorts[0]);
mongosTestFactory = new MongosSystemForTestFactory(mongosConfig, replicaSets, Collections.emptyList(),
@@ -328,9 +327,9 @@ public class EmbeddedMongo extends ExternalResource {
}
}
private List<IMongodConfig> initReplicaSet() {
private List<MongodConfig> initReplicaSet() {
List<IMongodConfig> rs = new ArrayList<>();
List<MongodConfig> rs = new ArrayList<>();
for (int port : serverPorts) {
rs.add(defaultMongodConfig(serverVersion, port, defaultCommandOptions(), false, true, replicaSetName));
@@ -338,9 +337,9 @@ public class EmbeddedMongo extends ExternalResource {
return rs;
}
private List<IMongodConfig> initConfigServers() {
private List<MongodConfig> initConfigServers() {
List<IMongodConfig> configServers = new ArrayList<>(configServerPorts.length);
List<MongodConfig> configServers = new ArrayList<>(configServerPorts.length);
for (Integer port : configServerPorts) {
configServers.add(
@@ -370,14 +369,14 @@ public class EmbeddedMongo extends ExternalResource {
/**
* @return Default {@link IMongoCmdOptions command options}.
*/
private static IMongoCmdOptions defaultCommandOptions() {
private static MongoCmdOptions defaultCommandOptions() {
return new MongoCmdOptionsBuilder() //
return MongoCmdOptions.builder() //
.useNoPrealloc(false) //
.useSmallFiles(false) //
.useNoJournal(false) //
.useStorageEngine(STORAGE_ENGINE) //
.verbose(false) //
.storageEngine(STORAGE_ENGINE) //
.isVerbose(false) //
.build();
}
@@ -392,16 +391,16 @@ public class EmbeddedMongo extends ExternalResource {
* @param replicaSet
* @return
*/
private static IMongodConfig defaultMongodConfig(IFeatureAwareVersion version, int port, IMongoCmdOptions cmdOptions,
private static MongodConfig defaultMongodConfig(IFeatureAwareVersion version, int port, MongoCmdOptions cmdOptions,
boolean configServer, boolean shardServer, String replicaSet) {
try {
MongodConfigBuilder builder = new MongodConfigBuilder() //
ImmutableMongodConfig.Builder builder = MongodConfig.builder() //
.version(version) //
.withLaunchArgument("--quiet") //
.putArgs("--quiet", null) //
.net(new Net(LOCALHOST, port, Network.localhostIsIPv6())) //
.configServer(configServer).cmdOptions(cmdOptions); //
.isConfigServer(configServer).cmdOptions(cmdOptions); //
if (StringUtils.hasText(replicaSet)) {
@@ -409,9 +408,9 @@ public class EmbeddedMongo extends ExternalResource {
.replication(new Storage(null, replicaSet, 0));
if (!configServer) {
builder = builder.shardServer(shardServer);
builder = builder.isShardServer(shardServer);
} else {
builder = builder.shardServer(false);
builder = builder.isShardServer(false);
}
}
@@ -431,14 +430,14 @@ public class EmbeddedMongo extends ExternalResource {
* @param configServerPort
* @return
*/
private static IMongosConfig defaultMongosConfig(IFeatureAwareVersion version, int port, IMongoCmdOptions cmdOptions,
private static MongosConfig defaultMongosConfig(IFeatureAwareVersion version, int port, MongoCmdOptions cmdOptions,
String configServerReplicaSet, int configServerPort) {
try {
MongosConfigBuilder builder = new MongosConfigBuilder() //
ImmutableMongosConfig.Builder builder = MongosConfig.builder() //
.version(version) //
.withLaunchArgument("--quiet", null) //
.putArgs("--quiet", null) //
.net(new Net(LOCALHOST, port, Network.localhostIsIPv6())) //
.cmdOptions(cmdOptions);

View File

@@ -22,11 +22,10 @@ import de.flapdoodle.embed.mongo.MongodStarter;
import de.flapdoodle.embed.mongo.MongosExecutable;
import de.flapdoodle.embed.mongo.MongosProcess;
import de.flapdoodle.embed.mongo.MongosStarter;
import de.flapdoodle.embed.mongo.config.IMongodConfig;
import de.flapdoodle.embed.mongo.config.IMongosConfig;
import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.config.MongosConfig;
import de.flapdoodle.embed.mongo.config.Net;
import de.flapdoodle.embed.mongo.config.RuntimeConfigBuilder;
import de.flapdoodle.embed.process.config.IRuntimeConfig;
import de.flapdoodle.embed.process.config.RuntimeConfig;
import de.flapdoodle.embed.process.config.io.ProcessOutput;
import lombok.SneakyThrows;
@@ -63,9 +62,9 @@ class MongosSystemForTestFactory {
public static final String REPLICA_SET_NAME = "rep1";
public static final String OPLOG_COLLECTION = "oplog.rs";
private final IMongosConfig config;
private final Map<String, List<IMongodConfig>> replicaSets;
private final List<IMongodConfig> configServers;
private final MongosConfig config;
private final Map<String, List<MongodConfig>> replicaSets;
private final List<MongodConfig> configServers;
private final String shardDatabase;
private final String shardCollection;
private final String shardKey;
@@ -76,9 +75,8 @@ class MongosSystemForTestFactory {
private List<MongodProcess> mongodProcessList;
private List<MongodProcess> mongodConfigProcessList;
public MongosSystemForTestFactory(IMongosConfig config,
Map<String, List<IMongodConfig>> replicaSets,
List<IMongodConfig> configServers, String shardDatabase,
public MongosSystemForTestFactory(MongosConfig config, Map<String, List<MongodConfig>> replicaSets,
List<MongodConfig> configServers, String shardDatabase,
String shardCollection, String shardKey, Function<Command, ProcessOutput> outputFunction) {
this.config = config;
this.replicaSets = replicaSets;
@@ -92,33 +90,33 @@ class MongosSystemForTestFactory {
public void start() throws Throwable {
this.mongodProcessList = new ArrayList<>();
this.mongodConfigProcessList = new ArrayList<>();
for (Entry<String, List<IMongodConfig>> entry : replicaSets.entrySet()) {
for (Entry<String, List<MongodConfig>> entry : replicaSets.entrySet()) {
initializeReplicaSet(entry);
}
for (IMongodConfig config : configServers) {
for (MongodConfig config : configServers) {
initializeConfigServer(config);
}
initializeMongos();
configureMongos();
}
private void initializeReplicaSet(Entry<String, List<IMongodConfig>> entry)
private void initializeReplicaSet(Entry<String, List<MongodConfig>> entry)
throws Exception {
String replicaName = entry.getKey();
List<IMongodConfig> mongoConfigList = entry.getValue();
List<MongodConfig> mongoConfigList = entry.getValue();
if (mongoConfigList.size() < 3) {
throw new Exception(
"A replica set must contain at least 3 members.");
}
// Create 3 mongod processes
for (IMongodConfig mongoConfig : mongoConfigList) {
for (MongodConfig mongoConfig : mongoConfigList) {
if (!mongoConfig.replication().getReplSetName().equals(replicaName)) {
throw new Exception(
"Replica set name must match in mongo configuration");
}
IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder()
.defaultsWithLogger(Command.MongoD,logger)
RuntimeConfig runtimeConfig = RuntimeConfig.builder()
// .defaultsWithLogger(Command.MongoD,logger)
.processOutput(outputFunction.apply(Command.MongoD))
.build();
MongodStarter starter = MongodStarter.getInstance(runtimeConfig);
@@ -142,7 +140,7 @@ class MongosSystemForTestFactory {
replicaSetSetting.put("_id", replicaName);
BasicDBList members = new BasicDBList();
int i = 0;
for (IMongodConfig mongoConfig : mongoConfigList) {
for (MongodConfig mongoConfig : mongoConfigList) {
DBObject host = new BasicDBObject();
host.put("_id", i++);
host.put("host", mongoConfig.net().getServerAddress().getHostName()
@@ -192,7 +190,7 @@ class MongosSystemForTestFactory {
return true;
}
private void initializeConfigServer(IMongodConfig config) throws Exception {
private void initializeConfigServer(MongodConfig config) throws Exception {
if (!config.isConfigServer()) {
throw new Exception(
"Mongo configuration is not a defined for a config server.");
@@ -204,8 +202,8 @@ class MongosSystemForTestFactory {
}
private void initializeMongos() throws Exception {
MongosStarter runtime = MongosStarter.getInstance(new RuntimeConfigBuilder()
.defaultsWithLogger(Command.MongoS,logger)
MongosStarter runtime = MongosStarter.getInstance(RuntimeConfig.builder()
// .defaultsWithLogger(Command.MongoS,logger)
.processOutput(outputFunction.apply(Command.MongoS))
.build());
@@ -223,11 +221,11 @@ class MongosSystemForTestFactory {
MongoDatabase mongoAdminDB = mongo.getDatabase(ADMIN_DATABASE_NAME);
// Add shard from the replica set list
for (Entry<String, List<IMongodConfig>> entry : this.replicaSets
for (Entry<String, List<MongodConfig>> entry : this.replicaSets
.entrySet()) {
String replicaName = entry.getKey();
String command = "";
for (IMongodConfig mongodConfig : entry.getValue()) {
for (MongodConfig mongodConfig : entry.getValue()) {
if (command.isEmpty()) {
command = replicaName + "/";
} else {