Skip to content

Commit 954f52c

Browse files
committed
Apply AggregationOptions.maxTime to MongoTemplate.aggregateStream().
Closes #4644
1 parent 5cb61ea commit 954f52c

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

+4
Original file line numberDiff line numberDiff line change
@@ -2268,6 +2268,10 @@ protected <O> Stream<O> aggregateStream(Aggregation aggregation, String collecti
22682268
cursor = hintFunction.apply(mongoDbFactory, cursor::hintString, cursor::hint);
22692269
}
22702270

2271+
if (options.hasExecutionTimeLimit()) {
2272+
cursor = cursor.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS);
2273+
}
2274+
22712275
Class<?> domainType = aggregation instanceof TypedAggregation typedAggregation ? typedAggregation.getInputType()
22722276
: null;
22732277

Diff for: spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java

+26-5
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.mockito.Mockito;
4949
import org.mockito.junit.jupiter.MockitoSettings;
5050
import org.mockito.quality.Strictness;
51+
5152
import org.springframework.beans.factory.annotation.Value;
5253
import org.springframework.context.ApplicationContext;
5354
import org.springframework.context.ApplicationListener;
@@ -118,7 +119,15 @@
118119
import com.mongodb.client.MongoCollection;
119120
import com.mongodb.client.MongoCursor;
120121
import com.mongodb.client.MongoDatabase;
121-
import com.mongodb.client.model.*;
122+
import com.mongodb.client.model.CountOptions;
123+
import com.mongodb.client.model.CreateCollectionOptions;
124+
import com.mongodb.client.model.DeleteOptions;
125+
import com.mongodb.client.model.FindOneAndDeleteOptions;
126+
import com.mongodb.client.model.FindOneAndReplaceOptions;
127+
import com.mongodb.client.model.FindOneAndUpdateOptions;
128+
import com.mongodb.client.model.MapReduceAction;
129+
import com.mongodb.client.model.TimeSeriesGranularity;
130+
import com.mongodb.client.model.UpdateOptions;
122131
import com.mongodb.client.result.DeleteResult;
123132
import com.mongodb.client.result.UpdateResult;
124133

@@ -498,6 +507,17 @@ void aggregateStreamShouldHonorOptionsReadPreferenceWhenSet() {
498507
verify(collection).withReadPreference(ReadPreference.secondary());
499508
}
500509

510+
@Test // GH-4644
511+
void aggregateStreamShouldHonorMaxTimeIfSet() {
512+
513+
AggregationOptions options = AggregationOptions.builder().maxTime(Duration.ofSeconds(20)).build();
514+
515+
template.aggregateStream(newAggregation(Aggregation.unwind("foo")).withOptions(options), "collection-1",
516+
Wrapper.class);
517+
518+
verify(aggregateIterable).maxTime(20000, TimeUnit.MILLISECONDS);
519+
}
520+
501521
@Test // DATAMONGO-2153
502522
void aggregateShouldHonorOptionsComment() {
503523

@@ -2489,7 +2509,8 @@ void replaceShouldUseDefaultCollationWhenPresent() {
24892509
@Test // GH-4462
24902510
void replaceShouldUseHintIfPresent() {
24912511

2492-
template.replace(new BasicQuery("{}").withHint("index-to-use"), new Sith(), ReplaceOptions.replaceOptions().upsert());
2512+
template.replace(new BasicQuery("{}").withHint("index-to-use"), new Sith(),
2513+
ReplaceOptions.replaceOptions().upsert());
24932514

24942515
ArgumentCaptor<com.mongodb.client.model.ReplaceOptions> options = ArgumentCaptor
24952516
.forClass(com.mongodb.client.model.ReplaceOptions.class);
@@ -2509,7 +2530,8 @@ public WriteConcern resolve(MongoAction action) {
25092530
}
25102531
});
25112532

2512-
template.replace(new BasicQuery("{}").withHint("index-to-use"), new Sith(), ReplaceOptions.replaceOptions().upsert());
2533+
template.replace(new BasicQuery("{}").withHint("index-to-use"), new Sith(),
2534+
ReplaceOptions.replaceOptions().upsert());
25132535

25142536
verify(collection).withWriteConcern(eq(WriteConcern.UNACKNOWLEDGED));
25152537
}
@@ -2551,8 +2573,7 @@ static class Person {
25512573
@Id String id;
25522574
String firstname;
25532575

2554-
public Person() {
2555-
}
2576+
public Person() {}
25562577

25572578
public Person(String id, String firstname) {
25582579
this.id = id;

0 commit comments

Comments
 (0)