From 49bfa7c7ca24d3d0737261ddae1c5cb69f65688c Mon Sep 17 00:00:00 2001 From: Kanchi Pardhi Date: Thu, 9 Jul 2026 09:33:12 +0000 Subject: [PATCH 1/5] feat: enable microsecond timestamps in client - Enable microsecond timestamp flag in stub settings - Plumb timestamp origin to Mutation setCell - Skip emulator in mutation-based integration tests to prevent failures Change-Id: Ifd8824a5934f17c9d6a5e0e8cf8b0a0a7343ccb1 --- .../bigtable/data/v2/models/Mutation.java | 19 +++++++++++++++++-- .../v2/stub/EnhancedBigtableStubSettings.java | 4 +++- .../bigtable/data/v2/it/BulkMutateIT.java | 5 +++++ .../bigtable/data/v2/it/CheckAndMutateIT.java | 5 +++++ .../bigtable/data/v2/it/MutateRowIT.java | 5 +++++ .../bigtable/data/v2/models/MutationTest.java | 15 +++++++++++++-- 6 files changed, 48 insertions(+), 5 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java index dc55756241e9..2949a424086e 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java @@ -23,6 +23,7 @@ import com.google.bigtable.v2.Mutation.DeleteFromRow; import com.google.bigtable.v2.Mutation.MergeToCell; import com.google.bigtable.v2.Mutation.SetCell; +import com.google.bigtable.v2.Mutation.TimestampOrigin; import com.google.cloud.bigtable.data.v2.models.Range.TimestampRange; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -32,6 +33,8 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; import javax.annotation.Nonnull; @@ -154,9 +157,10 @@ public Mutation setCell( @Override public Mutation setCell( @Nonnull String familyName, @Nonnull ByteString qualifier, @Nonnull ByteString value) { - long timestamp = System.currentTimeMillis() * 1_000; + long timestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); - return setCell(familyName, qualifier, timestamp, value); + return setCell( + familyName, qualifier, timestamp, value, TimestampOrigin.CLIENT_AUTO_GENERATED); } @Override @@ -165,6 +169,16 @@ public Mutation setCell( @Nonnull ByteString qualifier, long timestamp, @Nonnull ByteString value) { + return setCell( + familyName, qualifier, timestamp, value, TimestampOrigin.USER_SPECIFIED); + } + + private Mutation setCell( + @Nonnull String familyName, + @Nonnull ByteString qualifier, + long timestamp, + @Nonnull ByteString value, + TimestampOrigin timestampOrigin) { Validations.validateFamily(familyName); Preconditions.checkNotNull(qualifier, "qualifier can't be null."); Preconditions.checkNotNull(value, "value can't be null."); @@ -182,6 +196,7 @@ public Mutation setCell( .setTimestampMicros(timestamp) .setValue(value) .build()) + .setTimestampOrigin(timestampOrigin) .build()); return this; diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java index 1b3d4f2dee14..4b0e91724777 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java @@ -660,7 +660,8 @@ private Builder() { .setDirectAccessRequested(isDirectPathRequested) .setTrafficDirectorEnabled(isDirectPathRequested) .setPeerInfo(true) - .setSessionsCompatible(true); + .setSessionsCompatible(true) + .setMicrosecondTimestamp(true); } private Builder(EnhancedBigtableStubSettings settings) { @@ -1008,6 +1009,7 @@ public EnhancedBigtableStubSettings build() { featureFlags.setRoutingCookie(true); featureFlags.setRetryInfo(true); + featureFlags.setMicrosecondTimestamp(true); // client_Side_metrics_enabled feature flag is only set when a user is running with a // DefaultMetricsProvider. This may cause false negatives when a user registered the // metrics on their CustomOpenTelemetryMetricsProvider. diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BulkMutateIT.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BulkMutateIT.java index aaf32decfe17..6b9d320486eb 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BulkMutateIT.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BulkMutateIT.java @@ -53,6 +53,11 @@ public class BulkMutateIT { @Test(timeout = 60 * 1000) public void test() throws IOException, InterruptedException { + assume() + .withMessage("Emulator does not support microsecond timestamp granularity") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + BigtableDataSettings settings = testEnvRule.env().getDataClientSettings(); String rowPrefix = UUID.randomUUID().toString(); // Set target latency really low so it'll trigger adjusting thresholds diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/CheckAndMutateIT.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/CheckAndMutateIT.java index a3570f5e5bfb..1ca62c7db5bc 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/CheckAndMutateIT.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/CheckAndMutateIT.java @@ -49,6 +49,11 @@ public class CheckAndMutateIT { @Test public void test() throws Exception { + assume() + .withMessage("Emulator does not support microsecond timestamp granularity") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + TableId tableId = testEnvRule.env().getTableId(); String familyId = testEnvRule.env().getFamilyId(); String rowKey = UUID.randomUUID().toString(); diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/MutateRowIT.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/MutateRowIT.java index a54c7268276f..ac96a10f72e0 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/MutateRowIT.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/MutateRowIT.java @@ -44,6 +44,11 @@ public class MutateRowIT { @Test public void test() throws Exception { + assume() + .withMessage("Emulator does not support microsecond timestamp granularity") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + String rowKey = UUID.randomUUID().toString(); String familyId = testEnvRule.env().getFamilyId(); diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java index 3ba1de67011e..d6c481d5f58d 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java @@ -22,9 +22,12 @@ import com.google.bigtable.v2.Mutation.DeleteFromFamily; import com.google.bigtable.v2.Mutation.DeleteFromRow; import com.google.bigtable.v2.Mutation.MergeToCell; +import com.google.bigtable.v2.Mutation.TimestampOrigin; import com.google.cloud.bigtable.data.v2.models.Range.TimestampRange; import com.google.common.primitives.Longs; import com.google.protobuf.ByteString; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -48,7 +51,7 @@ public void setUp() { @Test public void setCellTest() { - long minTimestamp = System.currentTimeMillis() * 1_000; + long minTimestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); mutation .setCell( @@ -65,7 +68,7 @@ public void setCellTest() { List actual = mutation.getMutations(); - long maxTimestamp = System.currentTimeMillis() * 1_000; + long maxTimestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); com.google.common.collect.Range expectedTimestampRange = com.google.common.collect.Range.closed(minTimestamp, maxTimestamp); @@ -77,6 +80,7 @@ public void setCellTest() { assertThat(actual.get(0).getSetCell().getValue()) .isEqualTo(ByteString.copyFromUtf8("fake-value")); assertThat(actual.get(0).getSetCell().getTimestampMicros()).isEqualTo(1_000); + assertThat(actual.get(0).getTimestampOrigin()).isEqualTo(TimestampOrigin.USER_SPECIFIED); assertThat(actual.get(1).getSetCell().getFamilyName()).isEqualTo("fake-family"); assertThat(actual.get(1).getSetCell().getColumnQualifier()) @@ -84,6 +88,7 @@ public void setCellTest() { assertThat(actual.get(1).getSetCell().getValue()) .isEqualTo(ByteString.copyFromUtf8("fake-value")); assertThat(actual.get(1).getSetCell().getTimestampMicros()).isIn(expectedTimestampRange); + assertThat(actual.get(1).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); assertThat(actual.get(2).getSetCell().getFamilyName()).isEqualTo("fake-family2"); assertThat(actual.get(2).getSetCell().getColumnQualifier()) @@ -91,6 +96,7 @@ public void setCellTest() { assertThat(actual.get(2).getSetCell().getValue()) .isEqualTo(ByteString.copyFromUtf8("fake-value2")); assertThat(actual.get(2).getSetCell().getTimestampMicros()).isEqualTo(1_000); + assertThat(actual.get(2).getTimestampOrigin()).isEqualTo(TimestampOrigin.USER_SPECIFIED); assertThat(actual.get(3).getSetCell().getFamilyName()).isEqualTo("fake-family2"); assertThat(actual.get(3).getSetCell().getColumnQualifier()) @@ -98,6 +104,7 @@ public void setCellTest() { assertThat(actual.get(3).getSetCell().getValue()) .isEqualTo(ByteString.copyFromUtf8("fake-value2")); assertThat(actual.get(3).getSetCell().getTimestampMicros()).isIn(expectedTimestampRange); + assertThat(actual.get(3).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); assertThat(Mutation.fromProtoUnsafe(actual).getMutations()).isEqualTo(actual); } @@ -113,6 +120,7 @@ public void setCellWithServerSideTimestamp() { List actual = mutation.getMutations(); assertThat(actual.get(0).getSetCell().getTimestampMicros()) .isEqualTo(Mutation.SERVER_SIDE_TIMESTAMP); + assertThat(actual.get(0).getTimestampOrigin()).isEqualTo(TimestampOrigin.USER_SPECIFIED); } @Test @@ -276,6 +284,8 @@ public void testWithLongValue() { assertThat(actualMutation.getSetCell().getValue()) .isEqualTo(ByteString.copyFrom(Longs.toByteArray(100_000L))); + assertThat(mutations.get(0).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); + assertThat(mutations.get(1).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); assertThat(mutations.get(2).getSetCell()) .isEqualTo( @@ -285,6 +295,7 @@ public void testWithLongValue() { .setTimestampMicros(30_000L) .setValue(ByteString.copyFrom(Longs.toByteArray(20_000L))) .build()); + assertThat(mutations.get(2).getTimestampOrigin()).isEqualTo(TimestampOrigin.USER_SPECIFIED); } @Test From 90b454437f34302e9692bd9701d1292edc15b74c Mon Sep 17 00:00:00 2001 From: Kanchi Pardhi Date: Thu, 13 Aug 2026 16:41:39 +0000 Subject: [PATCH 2/5] style: apply google-java-format Change-Id: I42a732ca9a82884ccf97afcb734e317b4384455a --- .../google/cloud/bigtable/data/v2/models/Mutation.java | 6 ++---- .../cloud/bigtable/data/v2/models/MutationTest.java | 10 ++++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java index 2949a424086e..a1866189c688 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java @@ -159,8 +159,7 @@ public Mutation setCell( @Nonnull String familyName, @Nonnull ByteString qualifier, @Nonnull ByteString value) { long timestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); - return setCell( - familyName, qualifier, timestamp, value, TimestampOrigin.CLIENT_AUTO_GENERATED); + return setCell(familyName, qualifier, timestamp, value, TimestampOrigin.CLIENT_AUTO_GENERATED); } @Override @@ -169,8 +168,7 @@ public Mutation setCell( @Nonnull ByteString qualifier, long timestamp, @Nonnull ByteString value) { - return setCell( - familyName, qualifier, timestamp, value, TimestampOrigin.USER_SPECIFIED); + return setCell(familyName, qualifier, timestamp, value, TimestampOrigin.USER_SPECIFIED); } private Mutation setCell( diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java index d6c481d5f58d..347066d3815b 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java @@ -26,13 +26,13 @@ import com.google.cloud.bigtable.data.v2.models.Range.TimestampRange; import com.google.common.primitives.Longs; import com.google.protobuf.ByteString; -import java.time.Instant; -import java.time.temporal.ChronoUnit; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; import org.junit.Before; import org.junit.Test; @@ -284,8 +284,10 @@ public void testWithLongValue() { assertThat(actualMutation.getSetCell().getValue()) .isEqualTo(ByteString.copyFrom(Longs.toByteArray(100_000L))); - assertThat(mutations.get(0).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); - assertThat(mutations.get(1).getTimestampOrigin()).isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); + assertThat(mutations.get(0).getTimestampOrigin()) + .isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); + assertThat(mutations.get(1).getTimestampOrigin()) + .isEqualTo(TimestampOrigin.CLIENT_AUTO_GENERATED); assertThat(mutations.get(2).getSetCell()) .isEqualTo( From 5b1bd5a976d356b87ec4bc040e218034c74e7d59 Mon Sep 17 00:00:00 2001 From: Kanchi Pardhi Date: Thu, 13 Aug 2026 19:50:46 +0000 Subject: [PATCH 3/5] chore: generated java protobufs for microsecond_timestamp Change-Id: I1af4392152d52509174d39d308375feaba4deeee --- .../com/google/bigtable/v2/FeatureFlags.java | 42 +++++++++++++++++++ .../bigtable/v2/FeatureFlagsOrBuilder.java | 6 +++ .../google/bigtable/v2/feature_flags.proto | 6 ++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java index 2b8765cf13bb..4d922aec711c 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java @@ -1560,9 +1560,51 @@ public Builder clearSessionsRequired() { return this; } + + private boolean microsecondTimestamp_ ; + /** + * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; + * @return The microsecondTimestamp. + */ + @java.lang.Override + public boolean getMicrosecondTimestamp() { + return microsecondTimestamp_; + } + /** + * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; + * @param value The microsecondTimestamp to set. + * @return This builder for chaining. + */ + public Builder setMicrosecondTimestamp(boolean value) { + microsecondTimestamp_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + /** + * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; + * @return This builder for chaining. + */ + public Builder clearMicrosecondTimestamp() { + bitField0_ = (bitField0_ & ~0x00001000); + microsecondTimestamp_ = false; + onChanged(); + return this; + } // @@protoc_insertion_point(builder_scope:google.bigtable.v2.FeatureFlags) } + + public static final int MICROSECOND_TIMESTAMP_FIELD_NUMBER = 14; + private boolean microsecondTimestamp_ = false; + /** + * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; + * @return The microsecondTimestamp. + */ + @java.lang.Override + public boolean getMicrosecondTimestamp() { + return microsecondTimestamp_; + } // @@protoc_insertion_point(class_scope:google.bigtable.v2.FeatureFlags) private static final com.google.bigtable.v2.FeatureFlags DEFAULT_INSTANCE; diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java index a967bd990564..eebdc23a1391 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java @@ -189,4 +189,10 @@ public interface FeatureFlagsOrBuilder * @return The sessionsRequired. */ boolean getSessionsRequired(); + + /** + * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; + * @return The microsecondTimestamp. + */ + boolean getMicrosecondTimestamp(); } diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto index 6cf9ca5b81ac..b21fcd4391b5 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto @@ -75,5 +75,9 @@ message FeatureFlags { bool sessions_compatible = 12; // Internal flag to force sessions for internal projects. - bool sessions_required = 13; + bool sessions_required = 13;\n + // Optional. Indicates whether the client supports microsecond precision + // timestamps. + bool microsecond_timestamp = 14 [(google.api.field_behavior) = OPTIONAL]; + } From 94f96f03988fad60209c34ce623e2975b5a54e76 Mon Sep 17 00:00:00 2001 From: Kanchi Pardhi Date: Fri, 14 Aug 2026 06:36:24 +0000 Subject: [PATCH 4/5] fix: apply AI bot suggestion for year 2262 overflow Change-Id: Iade245d7881798735bfb10598d9d1b4b4db0f4a1 --- .../com/google/cloud/bigtable/data/v2/models/Mutation.java | 5 +++-- .../google/cloud/bigtable/data/v2/models/MutationTest.java | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java index a1866189c688..e1f56fad5a50 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Mutation.java @@ -157,7 +157,8 @@ public Mutation setCell( @Override public Mutation setCell( @Nonnull String familyName, @Nonnull ByteString qualifier, @Nonnull ByteString value) { - long timestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); + Instant maxInstant = Instant.now(); + long timestamp = maxInstant.getEpochSecond() * 1_000_000L + maxInstant.getNano() / 1_000; return setCell(familyName, qualifier, timestamp, value, TimestampOrigin.CLIENT_AUTO_GENERATED); } @@ -176,7 +177,7 @@ private Mutation setCell( @Nonnull ByteString qualifier, long timestamp, @Nonnull ByteString value, - TimestampOrigin timestampOrigin) { + @Nonnull TimestampOrigin timestampOrigin) { Validations.validateFamily(familyName); Preconditions.checkNotNull(qualifier, "qualifier can't be null."); Preconditions.checkNotNull(value, "value can't be null."); diff --git a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java index 347066d3815b..9908503c537d 100644 --- a/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java +++ b/java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/MutationTest.java @@ -51,7 +51,8 @@ public void setUp() { @Test public void setCellTest() { - long minTimestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); + Instant minInstant = Instant.now(); + long minTimestamp = minInstant.getEpochSecond() * 1_000_000L + minInstant.getNano() / 1_000; mutation .setCell( @@ -68,7 +69,8 @@ public void setCellTest() { List actual = mutation.getMutations(); - long maxTimestamp = Instant.EPOCH.until(Instant.now(), ChronoUnit.MICROS); + Instant maxInstant = Instant.now(); + long maxTimestamp = maxInstant.getEpochSecond() * 1_000_000L + maxInstant.getNano() / 1_000; com.google.common.collect.Range expectedTimestampRange = com.google.common.collect.Range.closed(minTimestamp, maxTimestamp); From e209c89725e70e38bec009568a45ceb87204e48d Mon Sep 17 00:00:00 2001 From: Kanchi Pardhi Date: Fri, 14 Aug 2026 10:25:46 +0000 Subject: [PATCH 5/5] chore: remove manually synced protos to wait for OwlBot Change-Id: I77f10651ca952c11b238ba2b7190339ede6e1715 --- .../com/google/bigtable/v2/FeatureFlags.java | 42 ------------------- .../bigtable/v2/FeatureFlagsOrBuilder.java | 6 --- .../google/bigtable/v2/feature_flags.proto | 6 +-- 3 files changed, 1 insertion(+), 53 deletions(-) diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java index 4d922aec711c..2b8765cf13bb 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlags.java @@ -1560,51 +1560,9 @@ public Builder clearSessionsRequired() { return this; } - - private boolean microsecondTimestamp_ ; - /** - * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; - * @return The microsecondTimestamp. - */ - @java.lang.Override - public boolean getMicrosecondTimestamp() { - return microsecondTimestamp_; - } - /** - * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; - * @param value The microsecondTimestamp to set. - * @return This builder for chaining. - */ - public Builder setMicrosecondTimestamp(boolean value) { - microsecondTimestamp_ = value; - bitField0_ |= 0x00001000; - onChanged(); - return this; - } - /** - * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; - * @return This builder for chaining. - */ - public Builder clearMicrosecondTimestamp() { - bitField0_ = (bitField0_ & ~0x00001000); - microsecondTimestamp_ = false; - onChanged(); - return this; - } // @@protoc_insertion_point(builder_scope:google.bigtable.v2.FeatureFlags) } - - public static final int MICROSECOND_TIMESTAMP_FIELD_NUMBER = 14; - private boolean microsecondTimestamp_ = false; - /** - * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; - * @return The microsecondTimestamp. - */ - @java.lang.Override - public boolean getMicrosecondTimestamp() { - return microsecondTimestamp_; - } // @@protoc_insertion_point(class_scope:google.bigtable.v2.FeatureFlags) private static final com.google.bigtable.v2.FeatureFlags DEFAULT_INSTANCE; diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java index eebdc23a1391..a967bd990564 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/FeatureFlagsOrBuilder.java @@ -189,10 +189,4 @@ public interface FeatureFlagsOrBuilder * @return The sessionsRequired. */ boolean getSessionsRequired(); - - /** - * bool microsecond_timestamp = 14 [(.google.api.field_behavior) = OPTIONAL]; - * @return The microsecondTimestamp. - */ - boolean getMicrosecondTimestamp(); } diff --git a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto index b21fcd4391b5..6cf9ca5b81ac 100644 --- a/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto +++ b/java-bigtable/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/feature_flags.proto @@ -75,9 +75,5 @@ message FeatureFlags { bool sessions_compatible = 12; // Internal flag to force sessions for internal projects. - bool sessions_required = 13;\n - // Optional. Indicates whether the client supports microsecond precision - // timestamps. - bool microsecond_timestamp = 14 [(google.api.field_behavior) = OPTIONAL]; - + bool sessions_required = 13; }