Skip to content

Commit c94d250

Browse files
committed
Inlined timeoutOrAlternative
Removed the timeoutOrAlternative method JAVA-5412
1 parent aea251f commit c94d250

3 files changed

Lines changed: 35 additions & 37 deletions

File tree

driver-core/src/main/com/mongodb/internal/TimeoutContext.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -174,24 +174,6 @@ public Timeout timeoutIncludingRoundTrip() {
174174
return timeout == null ? null : timeout.shortenBy(minRoundTripTimeMS, MILLISECONDS);
175175
}
176176

177-
/**
178-
* Returns the remaining {@code timeoutMS} if set or the {@code alternativeTimeoutMS}.
179-
* zero means infinite timeout.
180-
*
181-
* @param alternativeTimeoutMS the alternative timeout.
182-
* @return timeout to use.
183-
*/
184-
public long timeoutOrAlternative(final long alternativeTimeoutMS) {
185-
if (timeout == null) {
186-
return alternativeTimeoutMS;
187-
} else {
188-
return timeout.call(MILLISECONDS,
189-
() -> 0L,
190-
(ms) -> ms,
191-
() -> throwMongoTimeoutException("The operation exceeded the timeout limit."));
192-
}
193-
}
194-
195177
public TimeoutSettings getTimeoutSettings() {
196178
return timeoutSettings;
197179
}
@@ -211,16 +193,34 @@ public long getMaxAwaitTimeMS() {
211193

212194
@VisibleForTesting(otherwise = PRIVATE)
213195
public long getMaxCommitTimeMS() {
214-
Long maxCommitTimeMS = timeoutSettings.getMaxCommitTimeMS();
215-
return timeoutOrAlternative(maxCommitTimeMS != null ? maxCommitTimeMS : 0);
196+
if (timeout == null) {
197+
Long maxCommitTimeMS = timeoutSettings.getMaxCommitTimeMS();
198+
return maxCommitTimeMS != null ? maxCommitTimeMS : 0;
199+
}
200+
return timeout.call(MILLISECONDS,
201+
() -> 0L,
202+
(ms) -> ms,
203+
() -> throwMongoTimeoutException("The operation exceeded the timeout limit."));
216204
}
217205

218206
public long getReadTimeoutMS() {
219-
return timeoutOrAlternative(timeoutSettings.getReadTimeoutMS());
207+
if (timeout == null) {
208+
return timeoutSettings.getReadTimeoutMS();
209+
}
210+
return timeout.call(MILLISECONDS,
211+
() -> 0L,
212+
(ms) -> ms,
213+
() -> throwMongoTimeoutException("The operation exceeded the timeout limit."));
220214
}
221215

222216
public long getWriteTimeoutMS() {
223-
return timeoutOrAlternative(0);
217+
if (timeout == null) {
218+
return 0;
219+
}
220+
return timeout.call(MILLISECONDS,
221+
() -> 0L,
222+
(ms) -> ms,
223+
() -> throwMongoTimeoutException("The operation exceeded the timeout limit."));
224224
}
225225

226226
public int getConnectTimeoutMs() {

driver-core/src/test/functional/com/mongodb/internal/binding/AsyncSingleConnectionBinding.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ public AsyncSingleConnectionBinding(final Cluster cluster, final ReadPreference
110110

111111
private void awaitLatch(final CountDownLatch latch) {
112112
try {
113-
if (!latch.await(operationContext.getTimeoutContext().timeoutOrAlternative(10000), TimeUnit.MILLISECONDS)) {
113+
long readTimeoutMS = operationContext.getTimeoutContext().getReadTimeoutMS();
114+
if (!latch.await(readTimeoutMS > 0 ? readTimeoutMS : 10000, TimeUnit.MILLISECONDS)) {
114115
throw new MongoTimeoutException("Failed to get servers");
115116
}
116117
} catch (InterruptedException e) {

driver-core/src/test/unit/com/mongodb/internal/TimeoutContextTest.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,22 @@ void testAllDeprecatedOptionsSet() {
140140
@Test
141141
@DisplayName("Use timeout if available or the alternative")
142142
void testUseTimeoutIfAvailableOrTheAlternative() {
143+
// No CSOT: returns alternative values
143144
TimeoutContext timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS);
144-
assertEquals(99L, timeoutContext.timeoutOrAlternative(99));
145+
assertEquals(TIMEOUT_SETTINGS.getReadTimeoutMS(), timeoutContext.getReadTimeoutMS());
146+
assertEquals(0, timeoutContext.getWriteTimeoutMS());
147+
assertEquals(0, timeoutContext.getMaxCommitTimeMS());
145148

149+
// CSOT with infinite timeout (0): returns 0
146150
timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS.withTimeoutMS(0L));
147-
assertEquals(0L, timeoutContext.timeoutOrAlternative(99));
148-
149-
timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS.withTimeoutMS(999L));
150-
assertTrue(timeoutContext.timeoutOrAlternative(0) <= 999);
151-
152-
timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS.withTimeoutMS(999L));
153-
assertTrue(timeoutContext.timeoutOrAlternative(999999) <= 999);
154-
155-
timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS);
156-
assertEquals(0, timeoutContext.getMaxCommitTimeMS());
151+
assertEquals(0L, timeoutContext.getReadTimeoutMS());
152+
assertEquals(0L, timeoutContext.getWriteTimeoutMS());
153+
assertEquals(0L, timeoutContext.getMaxCommitTimeMS());
157154

155+
// CSOT with finite timeout: returns remaining time
158156
timeoutContext = new TimeoutContext(TIMEOUT_SETTINGS.withTimeoutMS(999L));
157+
assertTrue(timeoutContext.getReadTimeoutMS() <= 999);
158+
assertTrue(timeoutContext.getWriteTimeoutMS() <= 999);
159159
assertTrue(timeoutContext.getMaxCommitTimeMS() <= 999);
160160
}
161161

@@ -207,19 +207,16 @@ void testThrowsWhenExpired() {
207207
assertThrows(MongoOperationTimeoutException.class, smallTimeout::getConnectTimeoutMs);
208208
assertThrows(MongoOperationTimeoutException.class, () -> getMaxTimeMS(smallTimeout));
209209
assertThrows(MongoOperationTimeoutException.class, smallTimeout::getMaxCommitTimeMS);
210-
assertThrows(MongoOperationTimeoutException.class, () -> smallTimeout.timeoutOrAlternative(1));
211210
assertDoesNotThrow(longTimeout::getReadTimeoutMS);
212211
assertDoesNotThrow(longTimeout::getWriteTimeoutMS);
213212
assertDoesNotThrow(longTimeout::getConnectTimeoutMs);
214213
assertDoesNotThrow(() -> getMaxTimeMS(longTimeout));
215214
assertDoesNotThrow(longTimeout::getMaxCommitTimeMS);
216-
assertDoesNotThrow(() -> longTimeout.timeoutOrAlternative(1));
217215
assertDoesNotThrow(noTimeout::getReadTimeoutMS);
218216
assertDoesNotThrow(noTimeout::getWriteTimeoutMS);
219217
assertDoesNotThrow(noTimeout::getConnectTimeoutMs);
220218
assertDoesNotThrow(() -> getMaxTimeMS(noTimeout));
221219
assertDoesNotThrow(noTimeout::getMaxCommitTimeMS);
222-
assertDoesNotThrow(() -> noTimeout.timeoutOrAlternative(1));
223220
}
224221

225222
@Test

0 commit comments

Comments
 (0)