Skip to content

Commit 8a7d533

Browse files
feat: introduce java.time variables and methods (#3495)
This PR introduces `java.time` alternatives to existing `org.threeten.bp.*` methods, as well as switching internal variables (if any) to `java.time` The main constraint is to keep the changes backwards compatible, so for each existing threeten method "`method1(org.threeten.bp.Duration)`" we will add an alternative with a _Duration_ (or _Timestamp_ when applicable) suffix: "`method1Duration(java.time.Duration)`". For most cases, the implementation will be held in the `java.time` method and the old threeten method will just delegate the call to it. However, for the case of abstract classes, the implementation will be kept in the threeten method to avoid breaking changes (i.e. users that already overloaded the method in their user code).
1 parent 4ed455a commit 8a7d533

File tree

64 files changed

+577
-396
lines changed

Some content is hidden

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

64 files changed

+577
-396
lines changed

google-cloud-spanner-executor/pom.xml

-4
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,6 @@
145145
<groupId>com.google.api</groupId>
146146
<artifactId>gax-grpc</artifactId>
147147
</dependency>
148-
<dependency>
149-
<groupId>org.threeten</groupId>
150-
<artifactId>threetenbp</artifactId>
151-
</dependency>
152148
<dependency>
153149
<groupId>com.google.code.findbugs</groupId>
154150
<artifactId>jsr305</artifactId>

google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@
170170
import java.io.Serializable;
171171
import java.math.BigDecimal;
172172
import java.text.ParseException;
173+
import java.time.Duration;
174+
import java.time.LocalDate;
173175
import java.util.ArrayList;
174176
import java.util.List;
175177
import java.util.Map;
@@ -186,8 +188,6 @@
186188
import javax.annotation.Nonnull;
187189
import javax.annotation.Nullable;
188190
import org.apache.commons.io.FileUtils;
189-
import org.threeten.bp.Duration;
190-
import org.threeten.bp.LocalDate;
191191

192192
/**
193193
* Implementation of the SpannerExecutorProxy gRPC service that proxies action request through the
@@ -818,13 +818,13 @@ private synchronized Spanner getClient(long timeoutSeconds, boolean useMultiplex
818818
}
819819
RetrySettings retrySettings =
820820
RetrySettings.newBuilder()
821-
.setInitialRetryDelay(Duration.ofSeconds(1))
821+
.setInitialRetryDelayDuration(Duration.ofSeconds(1))
822822
.setRetryDelayMultiplier(1.3)
823-
.setMaxRetryDelay(Duration.ofSeconds(32))
824-
.setInitialRpcTimeout(rpcTimeout)
823+
.setMaxRetryDelayDuration(Duration.ofSeconds(32))
824+
.setInitialRpcTimeoutDuration(rpcTimeout)
825825
.setRpcTimeoutMultiplier(1.0)
826-
.setMaxRpcTimeout(rpcTimeout)
827-
.setTotalTimeout(rpcTimeout)
826+
.setMaxRpcTimeoutDuration(rpcTimeout)
827+
.setTotalTimeoutDuration(rpcTimeout)
828828
.build();
829829

830830
com.google.cloud.spanner.SessionPoolOptions.Builder poolOptionsBuilder =

google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.google.cloud.spanner;
1818

19-
import org.threeten.bp.Instant;
19+
import java.time.Instant;
2020

2121
/**
2222
* Wrapper around current time so that we can fake it in tests. TODO(user): Replace with Java 8

google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,17 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration;
20+
1921
import com.google.api.core.InternalApi;
2022
import com.google.api.gax.tracing.ApiTracer;
2123
import com.google.api.gax.tracing.BaseApiTracer;
2224
import com.google.api.gax.tracing.MetricsTracer;
2325
import com.google.common.collect.ImmutableList;
26+
import java.time.Duration;
2427
import java.util.ArrayList;
2528
import java.util.List;
2629
import java.util.Map;
27-
import org.threeten.bp.Duration;
2830

2931
@InternalApi
3032
public class CompositeTracer extends BaseApiTracer {
@@ -109,14 +111,14 @@ public void attemptCancelled() {
109111
}
110112

111113
@Override
112-
public void attemptFailed(Throwable error, Duration delay) {
114+
public void attemptFailed(Throwable error, org.threeten.bp.Duration delay) {
113115
for (ApiTracer child : children) {
114-
child.attemptFailed(error, delay);
116+
child.attemptFailedDuration(error, toJavaTimeDuration(delay));
115117
}
116118
}
117119

118120
@Override
119-
public void attemptFailedDuration(Throwable error, java.time.Duration delay) {
121+
public void attemptFailedDuration(Throwable error, Duration delay) {
120122
for (ApiTracer child : children) {
121123
child.attemptFailedDuration(error, delay);
122124
}

google-cloud-spanner/src/main/java/com/google/cloud/spanner/GrpcStreamIterator.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424
import com.google.common.collect.AbstractIterator;
2525
import com.google.common.util.concurrent.Uninterruptibles;
2626
import com.google.spanner.v1.PartialResultSet;
27+
import java.time.Duration;
2728
import java.util.Optional;
2829
import java.util.concurrent.BlockingQueue;
2930
import java.util.concurrent.LinkedBlockingQueue;
3031
import java.util.concurrent.TimeUnit;
3132
import java.util.logging.Level;
3233
import java.util.logging.Logger;
3334
import javax.annotation.Nullable;
34-
import org.threeten.bp.Duration;
3535

3636
/** Adapts a streaming read/query call into an iterator over partial result sets. */
3737
@VisibleForTesting
@@ -77,7 +77,8 @@ public void setCall(SpannerRpc.StreamingCall call, boolean withBeginTransaction)
7777
this.call = call;
7878
this.withBeginTransaction = withBeginTransaction;
7979
ApiCallContext callContext = call.getCallContext();
80-
Duration streamWaitTimeout = callContext == null ? null : callContext.getStreamWaitTimeout();
80+
Duration streamWaitTimeout =
81+
callContext == null ? null : callContext.getStreamWaitTimeoutDuration();
8182
if (streamWaitTimeout != null) {
8283
// Determine the timeout unit to use. This reduces the precision to seconds if the timeout
8384
// value is more than 1 second, which is lower than the precision that would normally be

google-cloud-spanner/src/main/java/com/google/cloud/spanner/LatencyTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import com.google.cloud.spanner.SpannerOptions.FixedCloseableExecutorProvider;
2020
import java.nio.file.Files;
2121
import java.nio.file.Paths;
22+
import java.time.Duration;
2223
import java.util.concurrent.Executors;
2324
import java.util.concurrent.ScheduledExecutorService;
2425
import java.util.concurrent.ThreadFactory;
2526
import java.util.concurrent.ThreadLocalRandom;
26-
import org.threeten.bp.Duration;
2727

2828
public class LatencyTest {
2929

@@ -42,7 +42,7 @@ public static void main(String[] args) throws Exception {
4242
Paths.get("/Users/loite/Downloads/appdev-soda-spanner-staging.json"))))
4343
.setSessionPoolOption(
4444
SessionPoolOptions.newBuilder()
45-
.setWaitForMinSessions(Duration.ofSeconds(5L))
45+
.setWaitForMinSessionsDuration(Duration.ofSeconds(5L))
4646
// .setUseMultiplexedSession(true)
4747
.build())
4848
.setUseVirtualThreads(true)

google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount
275275

276276
private static void maybeWaitForSessionCreation(
277277
SessionPoolOptions sessionPoolOptions, ApiFuture<SessionReference> future) {
278-
org.threeten.bp.Duration waitDuration = sessionPoolOptions.getWaitForMinSessions();
278+
Duration waitDuration = sessionPoolOptions.getWaitForMinSessions();
279279
if (waitDuration != null && !waitDuration.isZero()) {
280280
long timeoutMillis = waitDuration.toMillis();
281281
try {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/OpenTelemetryApiTracer.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration;
20+
21+
import com.google.api.core.ObsoleteApi;
1922
import com.google.api.gax.tracing.ApiTracer;
2023
import com.google.api.gax.tracing.ApiTracerFactory.OperationType;
2124
import com.google.common.base.Preconditions;
@@ -24,10 +27,10 @@
2427
import io.opentelemetry.api.common.AttributesBuilder;
2528
import io.opentelemetry.api.trace.Span;
2629
import io.opentelemetry.api.trace.StatusCode;
30+
import java.time.Duration;
2731
import java.util.concurrent.atomic.AtomicLong;
2832
import javax.annotation.Nonnull;
2933
import javax.annotation.Nullable;
30-
import org.threeten.bp.Duration;
3134

3235
/**
3336
* {@link com.google.api.gax.tracing.ApiTracer} for use with OpenTelemetry. Based on {@link
@@ -163,8 +166,15 @@ public void attemptCancelled() {
163166
lastConnectionId = null;
164167
}
165168

169+
/** This method is obsolete. Use {@link #attemptFailedDuration(Throwable, Duration)} instead. */
170+
@Override
171+
@ObsoleteApi("Use attemptFailedDuration(Throwable, Duration) instead")
172+
public void attemptFailed(Throwable error, org.threeten.bp.Duration delay) {
173+
attemptFailedDuration(error, toJavaTimeDuration(delay));
174+
}
175+
166176
@Override
167-
public void attemptFailed(Throwable error, Duration delay) {
177+
public void attemptFailedDuration(Throwable error, Duration delay) {
168178
AttributesBuilder builder = baseAttemptAttributesBuilder();
169179
if (delay != null) {
170180
builder.put(RETRY_DELAY_KEY, delay.toMillis());

google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import com.google.longrunning.Operation.ResultCase;
2929
import com.google.protobuf.Any;
3030
import com.google.rpc.Status;
31+
import java.time.Duration;
3132
import java.util.concurrent.ExecutionException;
3233
import javax.annotation.Nullable;
33-
import org.threeten.bp.Duration;
3434

3535
/**
3636
* Represents a long-running operation.
@@ -43,11 +43,11 @@ public class Operation<R, M> {
4343

4444
private final RetrySettings DEFAULT_OPERATION_WAIT_SETTINGS =
4545
RetrySettings.newBuilder()
46-
.setTotalTimeout(Duration.ofHours(12L))
47-
.setInitialRetryDelay(Duration.ofMillis(500L))
46+
.setTotalTimeoutDuration(Duration.ofHours(12L))
47+
.setInitialRetryDelayDuration(Duration.ofMillis(500L))
4848
.setRetryDelayMultiplier(1.0)
4949
.setJittered(false)
50-
.setMaxRetryDelay(Duration.ofMinutes(500L))
50+
.setMaxRetryDelayDuration(Duration.ofMinutes(500L))
5151
.build();
5252

5353
interface Parser<R, M> {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/PartitionedDmlTransaction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
import com.google.spanner.v1.TransactionOptions;
4040
import com.google.spanner.v1.TransactionSelector;
4141
import io.grpc.Status;
42+
import java.time.Duration;
43+
import java.time.temporal.ChronoUnit;
4244
import java.util.Map;
4345
import java.util.concurrent.TimeUnit;
4446
import java.util.logging.Level;
4547
import java.util.logging.Logger;
46-
import org.threeten.bp.Duration;
47-
import org.threeten.bp.temporal.ChronoUnit;
4848

4949
@InternalApi
5050
public class PartitionedDmlTransaction implements SessionImpl.SessionTransaction {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@
4545
import com.google.spanner.v1.RequestOptions;
4646
import com.google.spanner.v1.Transaction;
4747
import com.google.spanner.v1.TransactionOptions;
48+
import java.time.Instant;
4849
import java.util.ArrayList;
4950
import java.util.Collection;
5051
import java.util.List;
5152
import java.util.Map;
5253
import java.util.concurrent.ExecutionException;
5354
import javax.annotation.Nullable;
54-
import org.threeten.bp.Instant;
5555

5656
/**
5757
* Implementation of {@link Session}. Sessions are managed internally by the client library, and
@@ -203,7 +203,7 @@ public long executePartitionedUpdate(Statement stmt, UpdateOption... options) {
203203
PartitionedDmlTransaction txn =
204204
new PartitionedDmlTransaction(this, spanner.getRpc(), Ticker.systemTicker());
205205
return txn.executeStreamingPartitionedUpdate(
206-
stmt, spanner.getOptions().getPartitionedDmlTimeout(), options);
206+
stmt, spanner.getOptions().getPartitionedDmlTimeoutDuration(), options);
207207
}
208208

209209
@Override

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@
9191
import io.opentelemetry.api.metrics.Meter;
9292
import java.io.PrintWriter;
9393
import java.io.StringWriter;
94+
import java.time.Duration;
95+
import java.time.Instant;
9496
import java.util.ArrayList;
9597
import java.util.HashSet;
9698
import java.util.Iterator;
@@ -115,8 +117,6 @@
115117
import javax.annotation.Nonnull;
116118
import javax.annotation.Nullable;
117119
import javax.annotation.concurrent.GuardedBy;
118-
import org.threeten.bp.Duration;
119-
import org.threeten.bp.Instant;
120120

121121
/**
122122
* Maintains a pool of sessions. This class itself is thread safe and is meant to be used
@@ -2079,7 +2079,7 @@ private void removeIdleSessions(Instant currTime) {
20792079
// Determine the minimum last use time for a session to be deemed to still be alive. Remove
20802080
// all sessions that have a lastUseTime before that time, unless it would cause us to go
20812081
// below MinSessions.
2082-
Instant minLastUseTime = currTime.minus(options.getRemoveInactiveSessionAfter());
2082+
Instant minLastUseTime = currTime.minus(options.getRemoveInactiveSessionAfterDuration());
20832083
Iterator<PooledSession> iterator = sessions.descendingIterator();
20842084
while (iterator.hasNext()) {
20852085
PooledSession session = iterator.next();

0 commit comments

Comments
 (0)