use of com.mongodb.Block in project mongo-java-driver by mongodb.
the class ServerDiscoveryAndMonitoringProseTests method testHeartbeatFrequency.
@Test
@SuppressWarnings("try")
public void testHeartbeatFrequency() throws InterruptedException {
assumeFalse(isServerlessTest());
CountDownLatch latch = new CountDownLatch(5);
MongoClientSettings settings = getMongoClientSettingsBuilder().applyToServerSettings(new Block<ServerSettings.Builder>() {
@Override
public void apply(final ServerSettings.Builder builder) {
builder.heartbeatFrequency(50, TimeUnit.MILLISECONDS);
builder.addServerMonitorListener(new ServerMonitorListener() {
@Override
public void serverHeartbeatSucceeded(final ServerHeartbeatSucceededEvent event) {
latch.countDown();
}
});
}
}).build();
try (MongoClient ignored = MongoClients.create(settings)) {
assertTrue("Took longer than expected to reach expected number of hearbeats", latch.await(500, TimeUnit.MILLISECONDS));
}
}
use of com.mongodb.Block in project mongo-java-driver by mongodb.
the class ServerDiscoveryAndMonitoringProseTests method testRTTUpdates.
@Test
public void testRTTUpdates() throws InterruptedException {
assumeTrue(isStandalone());
assumeTrue(serverVersionAtLeast(4, 4));
List<ServerDescriptionChangedEvent> events = synchronizedList(new ArrayList<>());
MongoClientSettings settings = getMongoClientSettingsBuilder().applicationName("streamingRttTest").applyToServerSettings(new Block<ServerSettings.Builder>() {
@Override
public void apply(final ServerSettings.Builder builder) {
builder.heartbeatFrequency(50, TimeUnit.MILLISECONDS);
builder.addServerListener(new ServerListener() {
@Override
public void serverDescriptionChanged(final ServerDescriptionChangedEvent event) {
events.add(event);
}
});
}
}).build();
try (MongoClient client = MongoClients.create(settings)) {
client.getDatabase("admin").runCommand(new Document("ping", 1));
Thread.sleep(250);
assertTrue(events.size() >= 1);
events.forEach(event -> assertTrue(event.getNewDescription().getRoundTripTimeNanos() > 0));
configureFailPoint(parse(format("{" + "configureFailPoint: \"failCommand\"," + "mode: {times: 1000}," + " data: {" + " failCommands: [\"%s\", \"%s\"]," + " blockConnection: true," + " blockTimeMS: 100," + " appName: \"streamingRttTest\"" + " }" + "}", LEGACY_HELLO, HELLO)));
long startTime = System.currentTimeMillis();
while (true) {
long rttMillis = NANOSECONDS.toMillis(client.getClusterDescription().getServerDescriptions().get(0).getRoundTripTimeNanos());
if (rttMillis > 50) {
break;
}
assertFalse(System.currentTimeMillis() - startTime > 1000);
// noinspection BusyWait
Thread.sleep(50);
}
} finally {
disableFailPoint("failCommand");
}
}
use of com.mongodb.Block in project mongo-java-driver by mongodb.
the class InitialDnsSeedlistDiscoveryTest method shouldDiscoverSrvRecord.
@Test
public void shouldDiscoverSrvRecord() throws InterruptedException {
assumeFalse(isServerlessTest());
assumeFalse(isError);
final CountDownLatch seedsLatch = new CountDownLatch(1);
final CountDownLatch hostsLatch = new CountDownLatch(1);
final ConnectionString connectionString = new ConnectionString(uri);
final SslSettings sslSettings = getSslSettings(connectionString);
assumeTrue("SSL settings don't match", getSslSettings().isEnabled() == sslSettings.isEnabled());
MongoClientSettings settings = MongoClientSettings.builder().applyToClusterSettings(new Block<ClusterSettings.Builder>() {
@Override
public void apply(final ClusterSettings.Builder builder) {
builder.applyConnectionString(connectionString).addClusterListener(new ClusterListener() {
@Override
public void clusterOpening(final ClusterOpeningEvent event) {
}
@Override
public void clusterClosed(final ClusterClosedEvent event) {
}
@Override
public void clusterDescriptionChanged(final ClusterDescriptionChangedEvent event) {
List<String> seedsList = event.getNewDescription().getServerDescriptions().stream().map(ServerDescription::getAddress).map(ServerAddress::toString).collect(Collectors.toList());
List<String> okHostsList = event.getNewDescription().getServerDescriptions().stream().filter(ServerDescription::isOk).map(ServerDescription::getAddress).map(ServerAddress::toString).collect(Collectors.toList());
hostsCheck(seedsList, seeds, numSeeds, seedsLatch);
hostsCheck(okHostsList, hosts, numHosts, hostsLatch);
}
});
}
private void hostsCheck(final List<String> actual, @Nullable final List<String> expected, @Nullable final Integer expectedSize, final CountDownLatch latch) {
if (expected == null && expectedSize == null) {
latch.countDown();
} else if (expected != null && actual.size() == expected.size() && actual.containsAll(expected)) {
latch.countDown();
} else if (expectedSize != null && actual.size() == expectedSize) {
latch.countDown();
}
}
}).applyToSslSettings(new Block<SslSettings.Builder>() {
@Override
public void apply(final SslSettings.Builder builder) {
builder.applySettings(sslSettings);
builder.invalidHostNameAllowed(true);
}
}).build();
try (MongoClient client = createMongoClient(settings)) {
assertTrue(seedsLatch.await(ClusterFixture.TIMEOUT, TimeUnit.SECONDS));
assertTrue(hostsLatch.await(ClusterFixture.TIMEOUT, TimeUnit.SECONDS));
assertTrue(client.getDatabase("admin").runCommand(new Document("ping", 1)).containsKey("ok"));
}
}
use of com.mongodb.Block in project mongo-java-driver by mongodb.
the class ReadConcernTest method setUp.
@Before
public void setUp() {
assumeTrue(canRunTests());
commandListener = new TestCommandListener();
mongoClient = MongoClients.create(getMongoClientSettingsBuilder().addCommandListener(commandListener).applyToSocketSettings(new Block<SocketSettings.Builder>() {
@Override
public void apply(final SocketSettings.Builder builder) {
builder.readTimeout(5, TimeUnit.SECONDS);
}
}).build());
}
use of com.mongodb.Block in project mongo-java-driver by mongodb.
the class AbstractUnifiedTest method setUp.
@Before
public void setUp() {
assumeFalse(skipTest);
assumeTrue("Skipping test: " + definition.getString("skipReason", new BsonString("")).getValue(), !definition.containsKey("skipReason"));
assumeFalse("Skipping test of count", filename.equals("count.json"));
collectionHelper = new CollectionHelper<Document>(new DocumentCodec(), new MongoNamespace(databaseName, collectionName));
collectionHelper.killAllSessions();
if (!isDataLakeTest()) {
collectionHelper.create(collectionName, new CreateCollectionOptions(), WriteConcern.MAJORITY);
}
if (!data.isEmpty()) {
List<BsonDocument> documents = new ArrayList<BsonDocument>();
for (BsonValue document : data) {
documents.add(document.asDocument());
}
collectionHelper.insertDocuments(documents, WriteConcern.MAJORITY);
}
if (definition.containsKey("failPoint")) {
collectionHelper.runAdminCommand(definition.getDocument("failPoint"));
}
final BsonDocument clientOptions = definition.getDocument("clientOptions", new BsonDocument());
connectionString = getConnectionString();
useMultipleMongoses = definition.getBoolean("useMultipleMongoses", BsonBoolean.FALSE).getValue();
if (useMultipleMongoses) {
assumeTrue(isSharded());
connectionString = getMultiMongosConnectionString();
assumeTrue("The system property org.mongodb.test.transaction.uri is not set.", connectionString != null);
}
MongoClientSettings.Builder builder = getMongoClientSettingsBuilder().applyConnectionString(connectionString).addCommandListener(commandListener).applyToClusterSettings(clusterSettingsBuilder -> {
if (clientOptions.containsKey("serverSelectionTimeoutMS")) {
clusterSettingsBuilder.serverSelectionTimeout(clientOptions.getNumber("serverSelectionTimeoutMS").longValue(), MILLISECONDS);
}
if (clientOptions.containsKey("directConnection")) {
setDirectConnection(clusterSettingsBuilder);
}
}).applyToSocketSettings(new Block<SocketSettings.Builder>() {
@Override
public void apply(final SocketSettings.Builder builder) {
builder.readTimeout(clientOptions.getInt32("socketTimeoutMS", new BsonInt32(toIntExact(SECONDS.toMillis(5)))).getValue(), MILLISECONDS);
if (clientOptions.containsKey("connectTimeoutMS")) {
builder.connectTimeout(clientOptions.getNumber("connectTimeoutMS").intValue(), MILLISECONDS);
}
}
}).writeConcern(getWriteConcern(clientOptions)).readConcern(getReadConcern(clientOptions)).readPreference(getReadPreference(clientOptions)).retryWrites(clientOptions.getBoolean("retryWrites", BsonBoolean.FALSE).getValue()).retryReads(false).applyToConnectionPoolSettings(poolSettingsBuilder -> {
poolSettingsBuilder.addConnectionPoolListener(connectionPoolListener);
if (clientOptions.containsKey("minPoolSize")) {
poolSettingsBuilder.minSize(clientOptions.getInt32("minPoolSize").getValue());
}
}).applyToServerSettings(new Block<ServerSettings.Builder>() {
@Override
public void apply(final ServerSettings.Builder builder) {
builder.heartbeatFrequency(50, MILLISECONDS);
builder.minHeartbeatFrequency(MIN_HEARTBEAT_FREQUENCY_MS, MILLISECONDS);
builder.addServerListener(serverListener);
}
});
if (clientOptions.containsKey("heartbeatFrequencyMS")) {
builder.applyToServerSettings(new Block<ServerSettings.Builder>() {
@Override
public void apply(final ServerSettings.Builder builder) {
builder.heartbeatFrequency(clientOptions.getInt32("heartbeatFrequencyMS").intValue(), MILLISECONDS);
}
});
}
if (clientOptions.containsKey("appname")) {
builder.applicationName(clientOptions.getString("appname").getValue());
}
if (clientOptions.containsKey("w")) {
if (clientOptions.isString("w")) {
builder.writeConcern(new WriteConcern(clientOptions.getString("w").getValue()));
} else if (clientOptions.isNumber("w")) {
builder.writeConcern(new WriteConcern(clientOptions.getNumber("w").intValue()));
}
}
StreamFactoryFactory streamFactoryFactory = getStreamFactoryFactory();
if (streamFactoryFactory != null) {
builder.streamFactoryFactory(streamFactoryFactory);
}
mongoClient = createMongoClient(builder.build());
database = mongoClient.getDatabase(databaseName);
if (useMultipleMongoses) {
// non-transactional distinct operation to avoid StaleDbVersion error
runDistinctOnEachNode();
}
helper = new JsonPoweredCrudTestHelper(description, database, database.getCollection(collectionName, BsonDocument.class), null, mongoClient);
sessionsMap = new HashMap<>();
lsidMap = new HashMap<>();
if (createSessions && serverVersionAtLeast(3, 6)) {
ClientSession sessionZero = createSession("session0");
ClientSession sessionOne = createSession("session1");
sessionsMap.put("session0", sessionZero);
sessionsMap.put("session1", sessionOne);
lsidMap.put("session0", sessionZero.getServerSession().getIdentifier());
lsidMap.put("session1", sessionOne.getServerSession().getIdentifier());
}
}
Aggregations