From 707302d76ecb8bfdb40f4927baa8a61c83b857b7 Mon Sep 17 00:00:00 2001 From: Carl Mastrangelo Date: Mon, 21 Dec 2015 13:45:44 -0800 Subject: [PATCH] Update type and comment in Timeoutmarshaller --- .../main/java/io/grpc/internal/GrpcUtil.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/io/grpc/internal/GrpcUtil.java b/core/src/main/java/io/grpc/internal/GrpcUtil.java index 7f6fd61577..d1ef46c7da 100644 --- a/core/src/main/java/io/grpc/internal/GrpcUtil.java +++ b/core/src/main/java/io/grpc/internal/GrpcUtil.java @@ -39,8 +39,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; -import com.google.common.collect.BiMap; -import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.grpc.Metadata; @@ -436,14 +435,16 @@ public final class GrpcUtil { */ @VisibleForTesting static class TimeoutMarshaller implements Metadata.AsciiMarshaller { - private static final BiMap UNITS = - ImmutableBiMap.builder() - .put(TimeUnit.NANOSECONDS, 'n') - .put(TimeUnit.MICROSECONDS, 'u') - .put(TimeUnit.MILLISECONDS, 'm') - .put(TimeUnit.SECONDS, 'S') - .put(TimeUnit.MINUTES, 'M') - .put(TimeUnit.HOURS, 'H') + + // ImmutableMap's have consistent iteration order. + private static final ImmutableMap UNITS = + ImmutableMap.builder() + .put('n', TimeUnit.NANOSECONDS) + .put('u', TimeUnit.MICROSECONDS) + .put('m', TimeUnit.MILLISECONDS) + .put('S', TimeUnit.SECONDS) + .put('M', TimeUnit.MINUTES) + .put('H', TimeUnit.HOURS) .build(); @Override @@ -451,10 +452,10 @@ public final class GrpcUtil { checkArgument(timeoutNanos >= 0, "Negative timeout"); // the smallest integer with 9 digits int cutoff = 100000000; - for (Entry unit : UNITS.entrySet()) { - long timeout = unit.getKey().convert(timeoutNanos, TimeUnit.NANOSECONDS); + for (Entry unit : UNITS.entrySet()) { + long timeout = unit.getValue().convert(timeoutNanos, TimeUnit.NANOSECONDS); if (timeout < cutoff) { - return Long.toString(timeout) + unit.getValue(); + return Long.toString(timeout) + unit.getKey(); } } throw new IllegalArgumentException("Timeout too large"); @@ -466,7 +467,7 @@ public final class GrpcUtil { checkArgument(serialized.length() <= 9, "bad timeout format"); String valuePart = serialized.substring(0, serialized.length() - 1); char unit = serialized.charAt(serialized.length() - 1); - TimeUnit timeUnit = UNITS.inverse().get(unit); + TimeUnit timeUnit = UNITS.get(unit); if (timeUnit != null) { return timeUnit.toNanos(Long.parseLong(valuePart)); }