Skip to content

Commit 594f54f

Browse files
committed
Drop support for MongoDB wire protocol version 2
1 parent d6b013c commit 594f54f

70 files changed

Lines changed: 448 additions & 1263 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,14 @@ public @interface EnableMongoTestServer {
114114

115115
public class MongoTestServerConfiguration {
116116
@Bean
117-
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory) {
117+
public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDbFactory) {
118118
return new MongoTemplate(mongoDbFactory);
119119
}
120120

121121
@Bean
122-
public MongoDbFactory mongoDbFactory(MongoServer mongoServer) {
122+
public MongoDatabaseFactory mongoDbFactory(MongoServer mongoServer) {
123123
String connectionString = mongoServer.getConnectionString();
124-
return new SimpleMongoClientDbFactory(connectionString + "/test");
124+
return new SimpleMongoClientDatabaseFactory(connectionString + "/test");
125125
}
126126

127127
@Bean(destroyMethod = "shutdown")

‎core/gradle.lockfile‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ io.netty:netty-tcnative-classes:2.0.48.Final=default
1717
io.netty:netty-transport-native-unix-common:4.1.80.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
1818
io.netty:netty-transport:4.1.74.Final=default
1919
io.netty:netty-transport:4.1.80.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
20-
net.bytebuddy:byte-buddy-agent:1.12.13=testCompileClasspath,testRuntimeClasspath
21-
net.bytebuddy:byte-buddy:1.12.13=testCompileClasspath,testRuntimeClasspath
20+
net.bytebuddy:byte-buddy-agent:1.12.14=testCompileClasspath,testRuntimeClasspath
21+
net.bytebuddy:byte-buddy:1.12.14=testCompileClasspath,testRuntimeClasspath
2222
nl.jqno.equalsverifier:equalsverifier:3.10.1=testCompileClasspath,testRuntimeClasspath
2323
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath
2424
org.assertj:assertj-core:3.23.1=testCompileClasspath,testRuntimeClasspath
@@ -32,8 +32,8 @@ org.junit.jupiter:junit-jupiter-params:5.9.0=testCompileClasspath,testRuntimeCla
3232
org.junit.platform:junit-platform-commons:1.9.0=testCompileClasspath,testRuntimeClasspath
3333
org.junit.platform:junit-platform-engine:1.9.0=testRuntimeClasspath
3434
org.junit:junit-bom:5.9.0=testCompileClasspath,testRuntimeClasspath
35-
org.mockito:mockito-core:4.7.0=testCompileClasspath,testRuntimeClasspath
36-
org.mockito:mockito-junit-jupiter:4.7.0=testCompileClasspath,testRuntimeClasspath
35+
org.mockito:mockito-core:4.8.0=testCompileClasspath,testRuntimeClasspath
36+
org.mockito:mockito-junit-jupiter:4.8.0=testCompileClasspath,testRuntimeClasspath
3737
org.mongodb:mongo-java-driver:3.12.11=testCompileClasspath,testRuntimeClasspath
3838
org.objenesis:objenesis:3.2=testCompileClasspath,testRuntimeClasspath
3939
org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath

‎core/src/main/java/de/bwaldvogel/mongo/AsyncMongoBackend.java‎

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,8 @@
44

55
import de.bwaldvogel.mongo.backend.QueryResult;
66
import de.bwaldvogel.mongo.bson.Document;
7-
import de.bwaldvogel.mongo.wire.message.MongoDelete;
8-
import de.bwaldvogel.mongo.wire.message.MongoGetMore;
9-
import de.bwaldvogel.mongo.wire.message.MongoInsert;
10-
import de.bwaldvogel.mongo.wire.message.MongoKillCursors;
117
import de.bwaldvogel.mongo.wire.message.MongoMessage;
128
import de.bwaldvogel.mongo.wire.message.MongoQuery;
13-
import de.bwaldvogel.mongo.wire.message.MongoUpdate;
149
import io.netty.channel.Channel;
1510

1611
public interface AsyncMongoBackend {
@@ -21,19 +16,8 @@ public interface AsyncMongoBackend {
2116

2217
CompletionStage<QueryResult> handleQueryAsync(MongoQuery query);
2318

24-
CompletionStage<QueryResult> handleGetMoreAsync(MongoGetMore getMore);
25-
26-
CompletionStage<Void> handleInsertAsync(MongoInsert insert);
27-
28-
CompletionStage<Void> handleDeleteAsync(MongoDelete delete);
29-
30-
CompletionStage<Void> handleUpdateAsync(MongoUpdate update);
31-
32-
CompletionStage<Void> handleKillCursorsAsync(MongoKillCursors mongoKillCursors);
33-
3419
CompletionStage<Document> handleMessageAsync(MongoMessage message);
3520

3621
CompletionStage<Void> dropDatabaseAsync(String database);
3722

38-
CompletionStage<Void> closeAsync();
3923
}

‎core/src/main/java/de/bwaldvogel/mongo/AsyncMongoDatabase.java‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import de.bwaldvogel.mongo.backend.QueryResult;
66
import de.bwaldvogel.mongo.bson.Document;
77
import de.bwaldvogel.mongo.oplog.Oplog;
8-
import de.bwaldvogel.mongo.wire.message.MongoDelete;
9-
import de.bwaldvogel.mongo.wire.message.MongoInsert;
108
import de.bwaldvogel.mongo.wire.message.MongoQuery;
11-
import de.bwaldvogel.mongo.wire.message.MongoUpdate;
129
import io.netty.channel.Channel;
1310

1411
public interface AsyncMongoDatabase {
@@ -17,9 +14,4 @@ public interface AsyncMongoDatabase {
1714

1815
CompletionStage<QueryResult> handleQueryAsync(MongoQuery query);
1916

20-
CompletionStage<Void> handleInsertAsync(MongoInsert insert, Oplog oplog);
21-
22-
CompletionStage<Void> handleDeleteAsync(MongoDelete delete, Oplog oplog);
23-
24-
CompletionStage<Void> handleUpdateAsync(MongoUpdate update, Oplog oplog);
2517
}

‎core/src/main/java/de/bwaldvogel/mongo/MongoBackend.java‎

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22

33
import java.time.Clock;
44
import java.util.Collection;
5+
import java.util.List;
56
import java.util.concurrent.CompletionStage;
67

78
import de.bwaldvogel.mongo.backend.QueryResult;
89
import de.bwaldvogel.mongo.bson.Document;
910
import de.bwaldvogel.mongo.util.FutureUtils;
10-
import de.bwaldvogel.mongo.wire.message.MongoDelete;
11-
import de.bwaldvogel.mongo.wire.message.MongoGetMore;
12-
import de.bwaldvogel.mongo.wire.message.MongoInsert;
13-
import de.bwaldvogel.mongo.wire.message.MongoKillCursors;
1411
import de.bwaldvogel.mongo.wire.message.MongoMessage;
1512
import de.bwaldvogel.mongo.wire.message.MongoQuery;
16-
import de.bwaldvogel.mongo.wire.message.MongoUpdate;
1713
import io.netty.channel.Channel;
1814

1915
public interface MongoBackend extends AsyncMongoBackend {
@@ -42,55 +38,6 @@ default CompletionStage<QueryResult> handleQueryAsync(MongoQuery query) {
4238
return FutureUtils.wrap(() -> handleQuery(query));
4339
}
4440

45-
QueryResult handleGetMore(long cursorId, int numberToReturn);
46-
47-
QueryResult handleGetMore(MongoGetMore getMore);
48-
49-
@Override
50-
default CompletionStage<QueryResult> handleGetMoreAsync(MongoGetMore getMore) {
51-
return FutureUtils.wrap(() -> handleGetMore(getMore));
52-
}
53-
54-
void handleInsert(MongoInsert insert);
55-
56-
@Override
57-
default CompletionStage<Void> handleInsertAsync(MongoInsert insert) {
58-
return FutureUtils.wrap(() -> {
59-
handleInsert(insert);
60-
return null;
61-
});
62-
}
63-
64-
void handleDelete(MongoDelete delete);
65-
66-
@Override
67-
default CompletionStage<Void> handleDeleteAsync(MongoDelete delete) {
68-
return FutureUtils.wrap(() -> {
69-
handleDelete(delete);
70-
return null;
71-
});
72-
}
73-
74-
void handleUpdate(MongoUpdate update);
75-
76-
@Override
77-
default CompletionStage<Void> handleUpdateAsync(MongoUpdate update) {
78-
return FutureUtils.wrap(() -> {
79-
handleUpdate(update);
80-
return null;
81-
});
82-
}
83-
84-
void handleKillCursors(MongoKillCursors mongoKillCursors);
85-
86-
@Override
87-
default CompletionStage<Void> handleKillCursorsAsync(MongoKillCursors mongoKillCursors) {
88-
return FutureUtils.wrap(() -> {
89-
handleKillCursors(mongoKillCursors);
90-
return null;
91-
});
92-
}
93-
9441
Document handleMessage(MongoMessage message);
9542

9643
@Override
@@ -114,13 +61,7 @@ default CompletionStage<Void> dropDatabaseAsync(String database) {
11461

11562
void close();
11663

117-
@Override
118-
default CompletionStage<Void> closeAsync() {
119-
return FutureUtils.wrap(() -> {
120-
close();
121-
return null;
122-
});
123-
}
64+
void closeCursors(List<Long> cursorIds);
12465

12566
Clock getClock();
12667

‎core/src/main/java/de/bwaldvogel/mongo/MongoDatabase.java‎

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
import de.bwaldvogel.mongo.bson.Document;
88
import de.bwaldvogel.mongo.oplog.Oplog;
99
import de.bwaldvogel.mongo.util.FutureUtils;
10-
import de.bwaldvogel.mongo.wire.message.MongoDelete;
11-
import de.bwaldvogel.mongo.wire.message.MongoInsert;
1210
import de.bwaldvogel.mongo.wire.message.MongoQuery;
13-
import de.bwaldvogel.mongo.wire.message.MongoUpdate;
1411
import io.netty.channel.Channel;
1512

1613
public interface MongoDatabase extends AsyncMongoDatabase {
@@ -33,36 +30,6 @@ default CompletionStage<QueryResult> handleQueryAsync(MongoQuery query) {
3330
return FutureUtils.wrap(() -> handleQuery(query));
3431
}
3532

36-
void handleInsert(MongoInsert insert, Oplog oplog);
37-
38-
@Override
39-
default CompletionStage<Void> handleInsertAsync(MongoInsert insert, Oplog oplog) {
40-
return FutureUtils.wrap(() -> {
41-
handleInsert(insert, oplog);
42-
return null;
43-
});
44-
}
45-
46-
void handleDelete(MongoDelete delete, Oplog oplog);
47-
48-
@Override
49-
default CompletionStage<Void> handleDeleteAsync(MongoDelete delete, Oplog oplog) {
50-
return FutureUtils.wrap(() -> {
51-
handleDelete(delete, oplog);
52-
return null;
53-
});
54-
}
55-
56-
void handleUpdate(MongoUpdate update, Oplog oplog);
57-
58-
@Override
59-
default CompletionStage<Void> handleUpdateAsync(MongoUpdate update, Oplog oplog) {
60-
return FutureUtils.wrap(() -> {
61-
handleUpdate(update, oplog);
62-
return null;
63-
});
64-
}
65-
6633
boolean isEmpty();
6734

6835
MongoCollection<?> createCollectionOrThrowIfExists(String collectionName, CollectionOptions options);

‎core/src/main/java/de/bwaldvogel/mongo/MongoServer.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.net.SocketAddress;
55
import java.security.PrivateKey;
66
import java.security.cert.X509Certificate;
7+
import java.util.List;
78
import java.util.concurrent.TimeUnit;
89

910
import javax.net.ssl.SSLException;
@@ -17,7 +18,6 @@
1718
import de.bwaldvogel.mongo.wire.MongoWireMessageEncoder;
1819
import de.bwaldvogel.mongo.wire.MongoWireProtocolHandler;
1920
import de.bwaldvogel.mongo.wire.MongoWireReplyEncoder;
20-
import de.bwaldvogel.mongo.wire.message.MongoKillCursors;
2121
import io.netty.bootstrap.ServerBootstrap;
2222
import io.netty.channel.Channel;
2323
import io.netty.channel.ChannelInitializer;
@@ -234,7 +234,7 @@ public String toString() {
234234
/**
235235
* Use this method to simulate closing of cursors by the server, for instance due to timeout.
236236
*/
237-
public void closeCursors(MongoKillCursors killCursors) {
238-
backend.handleKillCursors(killCursors);
237+
public void closeCursors(List<Long> cursorIds) {
238+
backend.closeCursors(cursorIds);
239239
}
240240
}

‎core/src/main/java/de/bwaldvogel/mongo/ServerVersion.java‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import de.bwaldvogel.mongo.backend.Utils;
88

99
public enum ServerVersion {
10-
MONGO_3_0(Arrays.asList(3, 0, 0), 2),
1110
MONGO_3_6(Arrays.asList(3, 6, 0), 6);
1211

1312
private final List<Integer> versionArray;

‎core/src/main/java/de/bwaldvogel/mongo/backend/AbstractMongoBackend.java‎

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,8 @@
3737
import de.bwaldvogel.mongo.wire.BsonConstants;
3838
import de.bwaldvogel.mongo.wire.MongoWireProtocolHandler;
3939
import de.bwaldvogel.mongo.wire.message.Message;
40-
import de.bwaldvogel.mongo.wire.message.MongoDelete;
41-
import de.bwaldvogel.mongo.wire.message.MongoGetMore;
42-
import de.bwaldvogel.mongo.wire.message.MongoInsert;
43-
import de.bwaldvogel.mongo.wire.message.MongoKillCursors;
4440
import de.bwaldvogel.mongo.wire.message.MongoMessage;
4541
import de.bwaldvogel.mongo.wire.message.MongoQuery;
46-
import de.bwaldvogel.mongo.wire.message.MongoUpdate;
4742
import io.netty.channel.Channel;
4843

4944
public abstract class AbstractMongoBackend implements MongoBackend {
@@ -56,7 +51,7 @@ public abstract class AbstractMongoBackend implements MongoBackend {
5651

5752
private final Map<String, MongoDatabase> databases = new ConcurrentHashMap<>();
5853

59-
private ServerVersion version = ServerVersion.MONGO_3_0;
54+
private ServerVersion version = ServerVersion.MONGO_3_6;
6055

6156
private final Clock clock;
6257
private final Instant started;
@@ -292,9 +287,9 @@ private Document handleRenameCollection(String command, Document query) {
292287
return response;
293288
}
294289

295-
private MongoCollection<?> resolveCollection(final String namespace) {
296-
final String databaseName = Utils.getDatabaseNameFromFullName(namespace);
297-
final String collectionName = Utils.getCollectionNameFromFullName(namespace);
290+
private MongoCollection<?> resolveCollection(String namespace) {
291+
String databaseName = Utils.getDatabaseNameFromFullName(namespace);
292+
String collectionName = Utils.getCollectionNameFromFullName(namespace);
298293

299294
MongoDatabase database = databases.get(databaseName);
300295
if (database == null) {
@@ -401,54 +396,8 @@ public CompletionStage<QueryResult> handleQueryAsync(MongoQuery query) {
401396
}
402397

403398
@Override
404-
public QueryResult handleGetMore(long cursorId, int numberToReturn) {
405-
Cursor cursor = cursorRegistry.getCursor(cursorId);
406-
List<Document> documents = cursor.takeDocuments(numberToReturn);
407-
if (cursor.isEmpty()) {
408-
log.debug("Removing empty {}", cursor);
409-
cursorRegistry.remove(cursor);
410-
}
411-
return new QueryResult(documents, cursor.isEmpty() ? EmptyCursor.get().getId() : cursorId);
412-
}
413-
414-
@Override
415-
public QueryResult handleGetMore(MongoGetMore getMore) {
416-
return handleGetMore(getMore.getCursorId(), getMore.getNumberToReturn());
417-
}
418-
419-
@Override
420-
public void handleInsert(MongoInsert insert) {
421-
resolveDatabase(insert).handleInsert(insert, oplog);
422-
}
423-
424-
@Override
425-
public CompletionStage<Void> handleInsertAsync(MongoInsert insert) {
426-
return resolveDatabase(insert).handleInsertAsync(insert, oplog);
427-
}
428-
429-
@Override
430-
public void handleDelete(MongoDelete delete) {
431-
resolveDatabase(delete).handleDelete(delete, oplog);
432-
}
433-
434-
@Override
435-
public CompletionStage<Void> handleDeleteAsync(MongoDelete delete) {
436-
return resolveDatabase(delete).handleDeleteAsync(delete, oplog);
437-
}
438-
439-
@Override
440-
public void handleUpdate(MongoUpdate update) {
441-
resolveDatabase(update).handleUpdate(update, oplog);
442-
}
443-
444-
@Override
445-
public CompletionStage<Void> handleUpdateAsync(MongoUpdate update) {
446-
return resolveDatabase(update).handleUpdateAsync(update, oplog);
447-
}
448-
449-
@Override
450-
public void handleKillCursors(MongoKillCursors killCursors) {
451-
killCursors.getCursorIds().forEach(cursorRegistry::remove);
399+
public void closeCursors(List<Long> cursorIds) {
400+
cursorIds.forEach(cursorRegistry::remove);
452401
}
453402

454403
protected Document handleKillCursors(Document query) {
@@ -474,12 +423,22 @@ protected Document handleKillCursors(Document query) {
474423
protected Document handleGetMore(String databaseName, String command, Document query) {
475424
MongoDatabase mongoDatabase = resolveDatabase(databaseName);
476425
String collectionName = (String) query.get("collection");
477-
MongoCollection<?> collection = mongoDatabase.resolveCollection(collectionName, true);
478426
long cursorId = ((Number) query.get(command)).longValue();
479-
int batchSize = ((Number) query.get("batchSize")).intValue();
427+
int batchSize = ((Number) query.getOrDefault("batchSize", 0)).intValue();
480428
QueryResult queryResult = handleGetMore(cursorId, batchSize);
481429
List<Document> nextBatch = queryResult.collectDocuments();
482-
return Utils.nextBatchCursorResponse(collection.getFullName(), nextBatch, queryResult.getCursorId());
430+
String fullCollectionName = databaseName + "." + collectionName;
431+
return Utils.nextBatchCursorResponse(fullCollectionName, nextBatch, queryResult.getCursorId());
432+
}
433+
434+
private QueryResult handleGetMore(long cursorId, int numberToReturn) {
435+
Cursor cursor = cursorRegistry.getCursor(cursorId);
436+
List<Document> documents = cursor.takeDocuments(numberToReturn);
437+
if (cursor.isEmpty()) {
438+
log.debug("Removing empty {}", cursor);
439+
cursorRegistry.remove(cursor);
440+
}
441+
return new QueryResult(documents, cursor.isEmpty() ? EmptyCursor.get().getId() : cursorId);
483442
}
484443

485444
protected Document handleDropDatabase(String databaseName) {

‎core/src/main/java/de/bwaldvogel/mongo/backend/AbstractMongoCollection.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ private static Document toErrorDocument(MongoServerError e, int index) {
483483
public Document handleDistinct(Document query) {
484484
String key = (String) query.get("key");
485485
Document filter = (Document) query.getOrDefault("query", new Document());
486-
Set<Object> values = new TreeSet<>(ValueComparator.ascWithoutListHandling().withDefaultComparatorForUuids());
486+
Set<Object> values = new TreeSet<>(ValueComparator.ascWithoutListHandling());
487487

488488
for (Document document : queryDocuments(filter, null, 0, 0, 0, null)) {
489489
Object value = Utils.getSubdocumentValueCollectionAware(document, key);

0 commit comments

Comments
 (0)