Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: demo new Timestamp test usign threeten in java-core #3339

Draft
wants to merge 16 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions java-core/google-cloud-core/clirr-ignored-differences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@
<className>com/google/cloud/ReadChannel</className>
<method>long limit()</method>
</difference>
<difference>
<!-- Default method added to interface -->
<differenceType>7012</differenceType>
<className>com/google/cloud/testing/BaseEmulatorHelper$EmulatorRunner</className>
<method>int waitForDuration(java.time.Duration)</method>
</difference>
</differences>
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@

package com.google.cloud;

import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration;
import static com.google.common.base.Preconditions.checkNotNull;

import com.google.api.core.BetaApi;
import com.google.api.core.ObsoleteApi;
import com.google.api.gax.retrying.RetrySettings;
import java.io.Serializable;
import org.threeten.bp.Duration;

/**
* This class represents an options wrapper around the {@link RetrySettings} class and is an
Expand Down Expand Up @@ -51,13 +52,25 @@ private RetryOption(OptionType type, Object value) {
this.value = checkNotNull(value);
}

/** See {@link RetrySettings#getTotalTimeout()}. */
public static RetryOption totalTimeout(Duration totalTimeout) {
/** This method is obsolete. Use {@link #totalTimeoutDuration(java.time.Duration)} instead */
@ObsoleteApi("Use totalTimeouDuration() instead")
public static RetryOption totalTimeout(org.threeten.bp.Duration totalTimeout) {
return totalTimeoutDuration(toJavaTimeDuration(totalTimeout));
}

/** See {@link RetrySettings#getTotalTimeoutDuration()}. */
public static RetryOption totalTimeoutDuration(java.time.Duration totalTimeout) {
return new RetryOption(OptionType.TOTAL_TIMEOUT, totalTimeout);
}

/** See {@link RetrySettings#getInitialRetryDelay()}. */
public static RetryOption initialRetryDelay(Duration initialRetryDelay) {
/** This method is obsolete. Use {@link #initialRetryDelayDuration(java.time.Duration)} instead */
@ObsoleteApi("Use initialRetryDelayDuration() instead")
public static RetryOption initialRetryDelay(org.threeten.bp.Duration initialRetryDelay) {
return initialRetryDelayDuration(toJavaTimeDuration(initialRetryDelay));
}

/** See {@link RetrySettings#getInitialRetryDelayDuration()}. */
public static RetryOption initialRetryDelayDuration(java.time.Duration initialRetryDelay) {
return new RetryOption(OptionType.INITIAL_RETRY_DELAY, initialRetryDelay);
}

Expand All @@ -66,8 +79,14 @@ public static RetryOption retryDelayMultiplier(double retryDelayMultiplier) {
return new RetryOption(OptionType.RETRY_DELAY_MULTIPLIER, retryDelayMultiplier);
}

/** See {@link RetrySettings#getMaxRetryDelay()}. */
public static RetryOption maxRetryDelay(Duration maxRetryDelay) {
/** This method is obsolete. Use {@link #maxRetryDelayDuration(java.time.Duration)} instead */
@ObsoleteApi("Use maxRetryDelayDuration() instead")
public static RetryOption maxRetryDelay(org.threeten.bp.Duration maxRetryDelay) {
return maxRetryDelayDuration(toJavaTimeDuration(maxRetryDelay));
}

/** See {@link RetrySettings#getMaxRetryDelayDuration()}. */
public static RetryOption maxRetryDelayDuration(java.time.Duration maxRetryDelay) {
return new RetryOption(OptionType.MAX_RETRY_DELAY, maxRetryDelay);
}

Expand Down Expand Up @@ -124,16 +143,16 @@ public static RetrySettings mergeToSettings(RetrySettings settings, RetryOption.
for (RetryOption option : options) {
switch (option.type) {
case TOTAL_TIMEOUT:
builder.setTotalTimeout((Duration) option.value);
builder.setTotalTimeoutDuration((java.time.Duration) option.value);
break;
case INITIAL_RETRY_DELAY:
builder.setInitialRetryDelay((Duration) option.value);
builder.setInitialRetryDelayDuration((java.time.Duration) option.value);
break;
case RETRY_DELAY_MULTIPLIER:
builder.setRetryDelayMultiplier((Double) option.value);
break;
case MAX_RETRY_DELAY:
builder.setMaxRetryDelay((Duration) option.value);
builder.setMaxRetryDelayDuration((java.time.Duration) option.value);
break;
case MAX_ATTEMPTS:
builder.setMaxAttempts((Integer) option.value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,14 @@
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.threeten.bp.Duration;

/**
* Abstract class representing service options.
Expand Down Expand Up @@ -787,13 +787,13 @@ public static RetrySettings getNoRetrySettings() {
private static RetrySettings.Builder getDefaultRetrySettingsBuilder() {
return RetrySettings.newBuilder()
.setMaxAttempts(6)
.setInitialRetryDelay(Duration.ofMillis(1000L))
.setMaxRetryDelay(Duration.ofMillis(32_000L))
.setInitialRetryDelayDuration(Duration.ofMillis(1000L))
.setMaxRetryDelayDuration(Duration.ofMillis(32_000L))
.setRetryDelayMultiplier(2.0)
.setTotalTimeout(Duration.ofMillis(50_000L))
.setInitialRpcTimeout(Duration.ofMillis(50_000L))
.setTotalTimeoutDuration(Duration.ofMillis(50_000L))
.setInitialRpcTimeoutDuration(Duration.ofMillis(50_000L))
.setRpcTimeoutMultiplier(1.0)
.setMaxRpcTimeout(Duration.ofMillis(50_000L));
.setMaxRpcTimeoutDuration(Duration.ofMillis(50_000L));
}

protected abstract Set<String> getScopes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,26 @@

import static com.google.common.base.Preconditions.checkArgument;

import com.google.api.core.ObsoleteApi;
import com.google.protobuf.util.Timestamps;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
//import java.time.Instant;
//import java.time.LocalDateTime;
//import java.time.ZoneOffset;
//import java.time.format.DateTimeFormatter;
//import java.time.format.DateTimeFormatterBuilder;
//import java.time.format.DateTimeParseException;
//import java.time.temporal.TemporalAccessor;
import org.threeten.bp.Instant;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.ZoneOffset;
import org.threeten.bp.format.DateTimeFormatter;
import org.threeten.bp.format.DateTimeFormatterBuilder;
import org.threeten.bp.format.DateTimeParseException;
import org.threeten.bp.temporal.TemporalAccessor;
import java.util.Date;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
* Represents a timestamp with nanosecond precision. Timestamps cover the range [0001-01-01,
Expand All @@ -54,7 +62,7 @@ public final class Timestamp implements Comparable<Timestamp>, Serializable {
new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.optionalStart()
.appendOffsetId()
.appendZoneOrOffsetId()
.optionalEnd()
.toFormatter()
.withZone(ZoneOffset.UTC);
Expand Down Expand Up @@ -189,6 +197,17 @@ public com.google.protobuf.Timestamp toProto() {
return com.google.protobuf.Timestamp.newBuilder().setSeconds(seconds).setNanos(nanos).build();
}

/** This method is obsolete. Use {@link #parseTimestampDuration(String)} instead */
@ObsoleteApi("Use parseTimestampDuration(String) instead")
public static Timestamp parseTimestamp(String timestamp) {
try {
return parseTimestampDuration(timestamp);
} catch (DateTimeParseException ex) {
throw new org.threeten.bp.format.DateTimeParseException(
ex.getMessage(), ex.getParsedString(), ex.getErrorIndex());
}
}

/**
* Creates a Timestamp instance from the given string. Input string should be in the RFC 3339
* format, like '2020-12-01T10:15:30.000Z' or with the timezone offset, such as
Expand All @@ -198,7 +217,7 @@ public com.google.protobuf.Timestamp toProto() {
* @return created Timestamp
* @throws DateTimeParseException if unable to parse
*/
public static Timestamp parseTimestamp(String timestamp) {
public static Timestamp parseTimestampDuration(String timestamp) {
TemporalAccessor temporalAccessor = timestampParser.parse(timestamp);
Instant instant = Instant.from(temporalAccessor);
return ofTimeSecondsAndNanos(instant.getEpochSecond(), instant.getNano());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@

package com.google.cloud.testing;

import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration;
import static com.google.api.gax.util.TimeConversionUtils.toThreetenDuration;

import com.google.api.core.CurrentMillisClock;
import com.google.api.core.InternalApi;
import com.google.api.core.ObsoleteApi;
import com.google.cloud.ExceptionHandler;
import com.google.cloud.RetryHelper;
import com.google.cloud.ServiceOptions;
Expand Down Expand Up @@ -56,7 +60,6 @@
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.threeten.bp.Duration;

/** Utility class to start and stop a local service which is used by unit testing. */
@InternalApi
Expand Down Expand Up @@ -112,14 +115,21 @@ protected final void startProcess(String blockUntilOutput)
}
}

/** This method is obsolete. Use {@link #waitForProcessDuration(java.time.Duration)} instead */
@ObsoleteApi("Use waitForProcessDuration(java.time.Duration) instead")
protected final int waitForProcess(org.threeten.bp.Duration timeout)
throws IOException, InterruptedException, TimeoutException {
return waitForProcessDuration(toJavaTimeDuration(timeout));
}

/**
* Waits for the local service's subprocess to terminate, and stop any possible thread listening
* for its output.
*/
protected final int waitForProcess(Duration timeout)
protected final int waitForProcessDuration(java.time.Duration timeout)
throws IOException, InterruptedException, TimeoutException {
if (activeRunner != null) {
int exitCode = activeRunner.waitFor(timeout);
int exitCode = activeRunner.waitForDuration(timeout);
activeRunner = null;
return exitCode;
}
Expand All @@ -130,7 +140,7 @@ protected final int waitForProcess(Duration timeout)
return 0;
}

private static int waitForProcess(final Process process, Duration timeout)
private static int waitForProcess(final Process process, java.time.Duration timeout)
throws InterruptedException, TimeoutException {
if (process == null) {
return 0;
Expand Down Expand Up @@ -180,10 +190,17 @@ public String getProjectId() {
/** Starts the local emulator. */
public abstract void start() throws IOException, InterruptedException;

/** Stops the local emulator. */
public abstract void stop(Duration timeout)
/** This method is obsolete. Use {@link #stopDuration(java.time.Duration)} instead */
@ObsoleteApi("Use stopDuration() instead")
public abstract void stop(org.threeten.bp.Duration timeout)
throws IOException, InterruptedException, TimeoutException;

/** Stops the local emulator. */
public void stopDuration(java.time.Duration timeout)
throws IOException, InterruptedException, TimeoutException {
stop(toThreetenDuration(timeout));
}

/** Resets the internal state of the emulator. */
public abstract void reset() throws IOException;

Expand Down Expand Up @@ -226,8 +243,15 @@ protected interface EmulatorRunner {
/** Starts the emulator associated to this runner. */
void start() throws IOException;

/** This method is obsolete. Use {@link #waitForDuration(java.time.Duration)} instead */
@ObsoleteApi("Use waitForDuration() instead")
int waitFor(org.threeten.bp.Duration timeout) throws InterruptedException, TimeoutException;

/** Wait for the emulator associated to this runner to terminate, returning the exit status. */
int waitFor(Duration timeout) throws InterruptedException, TimeoutException;
default int waitForDuration(java.time.Duration timeout)
throws InterruptedException, TimeoutException {
return waitFor(toThreetenDuration(timeout));
}

/** Returns the process associated to the emulator, if any. */
Process getProcess();
Expand Down Expand Up @@ -263,9 +287,17 @@ public void start() throws IOException {
log.fine("Starting emulator via Google Cloud SDK");
process = CommandWrapper.create().setCommand(commandText).setRedirectErrorStream().start();
}
/** This method is obsolete. Use {@link #waitForDuration(java.time.Duration)} instead */
@ObsoleteApi("Use waitForDuration() instead")
@Override
public int waitFor(org.threeten.bp.Duration timeout)
throws InterruptedException, TimeoutException {
return waitForDuration(toJavaTimeDuration(timeout));
}

@Override
public int waitFor(Duration timeout) throws InterruptedException, TimeoutException {
public int waitForDuration(java.time.Duration timeout)
throws InterruptedException, TimeoutException {
return waitForProcess(process, timeout);
}

Expand Down Expand Up @@ -374,8 +406,16 @@ public Path call() throws IOException {
.start();
}

/** This method is obsolete. Use {@link #waitForDuration(java.time.Duration)} instead */
@ObsoleteApi("Use waitForDuration() instead")
@Override
public int waitFor(Duration timeout) throws InterruptedException, TimeoutException {
public int waitFor(org.threeten.bp.Duration timeout)
throws InterruptedException, TimeoutException {
return waitForDuration(toJavaTimeDuration(timeout));
}

public int waitForDuration(java.time.Duration timeout)
throws InterruptedException, TimeoutException {
return waitForProcess(process, timeout);
}

Expand Down
Loading
Loading