newBuilder()
@@ -1820,6 +1848,7 @@ protected HttpJsonFirestoreAdminStub(
}
return builder.build();
})
+ .setResourceNameExtractor(request -> request.getParent())
.build();
this.createIndexCallable =
diff --git a/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java b/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
new file mode 100644
index 0000000000..26db2de3c8
--- /dev/null
+++ b/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.firestore.v1.stub;
+
+import com.google.api.core.InternalApi;
+
+@InternalApi("For internal use only")
+final class Version {
+ // {x-version-update-start:google-cloud-firestore:current}
+ static final String VERSION = "0.0.0-SNAPSHOT";
+ // {x-version-update-end}
+
+}
diff --git a/google-cloud-firestore-admin/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json b/google-cloud-firestore-admin/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
index 212fd8e759..08826c7267 100644
--- a/google-cloud-firestore-admin/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
+++ b/google-cloud-firestore-admin/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
@@ -1,4 +1,58 @@
[
+ {
+ "name": "com.google.api.BatchingConfigProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingConfigProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingDescriptorProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingDescriptorProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingSettingsProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingSettingsProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
{
"name": "com.google.api.ClientLibraryDestination",
"queryAllDeclaredConstructors": true,
@@ -116,6 +170,15 @@
"allDeclaredClasses": true,
"allPublicClasses": true
},
+ {
+ "name": "com.google.api.FlowControlLimitExceededBehaviorProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
{
"name": "com.google.api.GoSettings",
"queryAllDeclaredConstructors": true,
diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java
index c12f6a2a50..d56e0bae30 100644
--- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java
+++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java
@@ -563,6 +563,7 @@ protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder()
.setArtifactName("com.google.cloud:google-cloud-firestore")
.setRepository("googleapis/java-firestore")
+ .setVersion(Version.VERSION)
.build();
}
diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
new file mode 100644
index 0000000000..26db2de3c8
--- /dev/null
+++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.firestore.v1.stub;
+
+import com.google.api.core.InternalApi;
+
+@InternalApi("For internal use only")
+final class Version {
+ // {x-version-update-start:google-cloud-firestore:current}
+ static final String VERSION = "0.0.0-SNAPSHOT";
+ // {x-version-update-end}
+
+}
diff --git a/google-cloud-firestore/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json b/google-cloud-firestore/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
index 01d5baceb9..307d5343f9 100644
--- a/google-cloud-firestore/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
+++ b/google-cloud-firestore/src/main/resources/META-INF/native-image/com.google.cloud.firestore.v1/reflect-config.json
@@ -1,4 +1,58 @@
[
+ {
+ "name": "com.google.api.BatchingConfigProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingConfigProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingDescriptorProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingDescriptorProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingSettingsProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "com.google.api.BatchingSettingsProto$Builder",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
{
"name": "com.google.api.ClientLibraryDestination",
"queryAllDeclaredConstructors": true,
@@ -116,6 +170,15 @@
"allDeclaredClasses": true,
"allPublicClasses": true
},
+ {
+ "name": "com.google.api.FlowControlLimitExceededBehaviorProto",
+ "queryAllDeclaredConstructors": true,
+ "queryAllPublicConstructors": true,
+ "queryAllDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
{
"name": "com.google.api.GoSettings",
"queryAllDeclaredConstructors": true,
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/Field.java b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/Field.java
index 74cde456c4..4bd13e9b04 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/Field.java
+++ b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/Field.java
@@ -1561,6 +1561,70 @@ public interface TtlConfigOrBuilder
* @return The state.
*/
com.google.firestore.admin.v1.Field.TtlConfig.State getState();
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ boolean hasExpirationOffset();
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The expirationOffset.
+ */
+ com.google.protobuf.Duration getExpirationOffset();
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder();
}
/**
@@ -1570,12 +1634,14 @@ public interface TtlConfigOrBuilder
* The TTL (time-to-live) configuration for documents that have this `Field`
* set.
*
- * Storing a timestamp value into a TTL-enabled field will be treated as
- * the document's absolute expiration time. For Enterprise edition databases,
- * the timestamp value may also be stored in an array value in the
- * TTL-enabled field.
+ * A timestamp stored in a TTL-enabled field will be used to determine the
+ * expiration time of the document. The expiration time is the sum
+ * of the timestamp value and the `expiration_offset`.
*
- * Timestamp values in the past indicate that the document is eligible for
+ * For Enterprise edition databases, the timestamp value may alternatively be
+ * stored in an array value in the TTL-enabled field.
+ *
+ * An expiration time in the past indicates that the document is eligible for
* immediate expiration. Using any other data type or leaving the field absent
* will disable expiration for the individual document.
*
@@ -1828,6 +1894,7 @@ private State(int value) {
// @@protoc_insertion_point(enum_scope:google.firestore.admin.v1.Field.TtlConfig.State)
}
+ private int bitField0_;
public static final int STATE_FIELD_NUMBER = 1;
private int state_ = 0;
@@ -1871,6 +1938,86 @@ public com.google.firestore.admin.v1.Field.TtlConfig.State getState() {
: result;
}
+ public static final int EXPIRATION_OFFSET_FIELD_NUMBER = 3;
+ private com.google.protobuf.Duration expirationOffset_;
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ @java.lang.Override
+ public boolean hasExpirationOffset() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The expirationOffset.
+ */
+ @java.lang.Override
+ public com.google.protobuf.Duration getExpirationOffset() {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ @java.lang.Override
+ public com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder() {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
@@ -1889,6 +2036,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
!= com.google.firestore.admin.v1.Field.TtlConfig.State.STATE_UNSPECIFIED.getNumber()) {
output.writeEnum(1, state_);
}
+ if (((bitField0_ & 0x00000001) != 0)) {
+ output.writeMessage(3, getExpirationOffset());
+ }
getUnknownFields().writeTo(output);
}
@@ -1902,6 +2052,9 @@ public int getSerializedSize() {
!= com.google.firestore.admin.v1.Field.TtlConfig.State.STATE_UNSPECIFIED.getNumber()) {
size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_);
}
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getExpirationOffset());
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -1919,6 +2072,10 @@ public boolean equals(final java.lang.Object obj) {
(com.google.firestore.admin.v1.Field.TtlConfig) obj;
if (state_ != other.state_) return false;
+ if (hasExpirationOffset() != other.hasExpirationOffset()) return false;
+ if (hasExpirationOffset()) {
+ if (!getExpirationOffset().equals(other.getExpirationOffset())) return false;
+ }
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
}
@@ -1932,6 +2089,10 @@ public int hashCode() {
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + STATE_FIELD_NUMBER;
hash = (53 * hash) + state_;
+ if (hasExpirationOffset()) {
+ hash = (37 * hash) + EXPIRATION_OFFSET_FIELD_NUMBER;
+ hash = (53 * hash) + getExpirationOffset().hashCode();
+ }
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
@@ -2040,12 +2201,14 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.Builder
* The TTL (time-to-live) configuration for documents that have this `Field`
* set.
*
- * Storing a timestamp value into a TTL-enabled field will be treated as
- * the document's absolute expiration time. For Enterprise edition databases,
- * the timestamp value may also be stored in an array value in the
- * TTL-enabled field.
+ * A timestamp stored in a TTL-enabled field will be used to determine the
+ * expiration time of the document. The expiration time is the sum
+ * of the timestamp value and the `expiration_offset`.
+ *
+ * For Enterprise edition databases, the timestamp value may alternatively be
+ * stored in an array value in the TTL-enabled field.
*
- * Timestamp values in the past indicate that the document is eligible for
+ * An expiration time in the past indicates that the document is eligible for
* immediate expiration. Using any other data type or leaving the field absent
* will disable expiration for the individual document.
*
@@ -2072,10 +2235,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
}
// Construct using com.google.firestore.admin.v1.Field.TtlConfig.newBuilder()
- private Builder() {}
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+ internalGetExpirationOffsetFieldBuilder();
+ }
}
@java.lang.Override
@@ -2083,6 +2255,11 @@ public Builder clear() {
super.clear();
bitField0_ = 0;
state_ = 0;
+ expirationOffset_ = null;
+ if (expirationOffsetBuilder_ != null) {
+ expirationOffsetBuilder_.dispose();
+ expirationOffsetBuilder_ = null;
+ }
return this;
}
@@ -2122,6 +2299,15 @@ private void buildPartial0(com.google.firestore.admin.v1.Field.TtlConfig result)
if (((from_bitField0_ & 0x00000001) != 0)) {
result.state_ = state_;
}
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.expirationOffset_ =
+ expirationOffsetBuilder_ == null
+ ? expirationOffset_
+ : expirationOffsetBuilder_.build();
+ to_bitField0_ |= 0x00000001;
+ }
+ result.bitField0_ |= to_bitField0_;
}
@java.lang.Override
@@ -2140,6 +2326,9 @@ public Builder mergeFrom(com.google.firestore.admin.v1.Field.TtlConfig other) {
if (other.state_ != 0) {
setStateValue(other.getStateValue());
}
+ if (other.hasExpirationOffset()) {
+ mergeExpirationOffset(other.getExpirationOffset());
+ }
this.mergeUnknownFields(other.getUnknownFields());
onChanged();
return this;
@@ -2172,6 +2361,13 @@ public Builder mergeFrom(
bitField0_ |= 0x00000001;
break;
} // case 8
+ case 26:
+ {
+ input.readMessage(
+ internalGetExpirationOffsetFieldBuilder().getBuilder(), extensionRegistry);
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 26
default:
{
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -2298,6 +2494,281 @@ public Builder clearState() {
return this;
}
+ private com.google.protobuf.Duration expirationOffset_;
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>
+ expirationOffsetBuilder_;
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ public boolean hasExpirationOffset() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The expirationOffset.
+ */
+ public com.google.protobuf.Duration getExpirationOffset() {
+ if (expirationOffsetBuilder_ == null) {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ } else {
+ return expirationOffsetBuilder_.getMessage();
+ }
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setExpirationOffset(com.google.protobuf.Duration value) {
+ if (expirationOffsetBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ expirationOffset_ = value;
+ } else {
+ expirationOffsetBuilder_.setMessage(value);
+ }
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setExpirationOffset(com.google.protobuf.Duration.Builder builderForValue) {
+ if (expirationOffsetBuilder_ == null) {
+ expirationOffset_ = builderForValue.build();
+ } else {
+ expirationOffsetBuilder_.setMessage(builderForValue.build());
+ }
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder mergeExpirationOffset(com.google.protobuf.Duration value) {
+ if (expirationOffsetBuilder_ == null) {
+ if (((bitField0_ & 0x00000002) != 0)
+ && expirationOffset_ != null
+ && expirationOffset_ != com.google.protobuf.Duration.getDefaultInstance()) {
+ getExpirationOffsetBuilder().mergeFrom(value);
+ } else {
+ expirationOffset_ = value;
+ }
+ } else {
+ expirationOffsetBuilder_.mergeFrom(value);
+ }
+ if (expirationOffset_ != null) {
+ bitField0_ |= 0x00000002;
+ onChanged();
+ }
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder clearExpirationOffset() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ expirationOffset_ = null;
+ if (expirationOffsetBuilder_ != null) {
+ expirationOffsetBuilder_.dispose();
+ expirationOffsetBuilder_ = null;
+ }
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.protobuf.Duration.Builder getExpirationOffsetBuilder() {
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return internalGetExpirationOffsetFieldBuilder().getBuilder();
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder() {
+ if (expirationOffsetBuilder_ != null) {
+ return expirationOffsetBuilder_.getMessageOrBuilder();
+ } else {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. The offset, relative to the timestamp value from the
+ * TTL-enabled field, used to determine the document's expiration time.
+ *
+ * `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ * inclusive. Values more precise than seconds are rejected.
+ *
+ * If unset, defaults to 0, in which case the expiration time is the same
+ * as the timestamp value from the TTL-enabled field.
+ *
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>
+ internalGetExpirationOffsetFieldBuilder() {
+ if (expirationOffsetBuilder_ == null) {
+ expirationOffsetBuilder_ =
+ new com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>(
+ getExpirationOffset(), getParentForChildren(), isClean());
+ expirationOffset_ = null;
+ }
+ return expirationOffsetBuilder_;
+ }
+
// @@protoc_insertion_point(builder_scope:google.firestore.admin.v1.Field.TtlConfig)
}
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldOperationMetadata.java b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldOperationMetadata.java
index 3212dd4187..0242d2c5aa 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldOperationMetadata.java
+++ b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldOperationMetadata.java
@@ -1225,6 +1225,46 @@ public interface TtlConfigDeltaOrBuilder
* @return The changeType.
*/
com.google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta.ChangeType getChangeType();
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ boolean hasExpirationOffset();
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return The expirationOffset.
+ */
+ com.google.protobuf.Duration getExpirationOffset();
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder();
}
/**
@@ -1448,6 +1488,7 @@ private ChangeType(int value) {
// @@protoc_insertion_point(enum_scope:google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta.ChangeType)
}
+ private int bitField0_;
public static final int CHANGE_TYPE_FIELD_NUMBER = 1;
private int changeType_ = 0;
@@ -1494,6 +1535,62 @@ public int getChangeTypeValue() {
: result;
}
+ public static final int EXPIRATION_OFFSET_FIELD_NUMBER = 3;
+ private com.google.protobuf.Duration expirationOffset_;
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ @java.lang.Override
+ public boolean hasExpirationOffset() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return The expirationOffset.
+ */
+ @java.lang.Override
+ public com.google.protobuf.Duration getExpirationOffset() {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ @java.lang.Override
+ public com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder() {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
@@ -1514,6 +1611,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
.getNumber()) {
output.writeEnum(1, changeType_);
}
+ if (((bitField0_ & 0x00000001) != 0)) {
+ output.writeMessage(3, getExpirationOffset());
+ }
getUnknownFields().writeTo(output);
}
@@ -1529,6 +1629,9 @@ public int getSerializedSize() {
.getNumber()) {
size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, changeType_);
}
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getExpirationOffset());
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -1546,6 +1649,10 @@ public boolean equals(final java.lang.Object obj) {
(com.google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta) obj;
if (changeType_ != other.changeType_) return false;
+ if (hasExpirationOffset() != other.hasExpirationOffset()) return false;
+ if (hasExpirationOffset()) {
+ if (!getExpirationOffset().equals(other.getExpirationOffset())) return false;
+ }
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
}
@@ -1559,6 +1666,10 @@ public int hashCode() {
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + CHANGE_TYPE_FIELD_NUMBER;
hash = (53 * hash) + changeType_;
+ if (hasExpirationOffset()) {
+ hash = (37 * hash) + EXPIRATION_OFFSET_FIELD_NUMBER;
+ hash = (53 * hash) + getExpirationOffset().hashCode();
+ }
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
@@ -1692,10 +1803,19 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
// Construct using
// com.google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta.newBuilder()
- private Builder() {}
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+ internalGetExpirationOffsetFieldBuilder();
+ }
}
@java.lang.Override
@@ -1703,6 +1823,11 @@ public Builder clear() {
super.clear();
bitField0_ = 0;
changeType_ = 0;
+ expirationOffset_ = null;
+ if (expirationOffsetBuilder_ != null) {
+ expirationOffsetBuilder_.dispose();
+ expirationOffsetBuilder_ = null;
+ }
return this;
}
@@ -1745,6 +1870,15 @@ private void buildPartial0(
if (((from_bitField0_ & 0x00000001) != 0)) {
result.changeType_ = changeType_;
}
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.expirationOffset_ =
+ expirationOffsetBuilder_ == null
+ ? expirationOffset_
+ : expirationOffsetBuilder_.build();
+ to_bitField0_ |= 0x00000001;
+ }
+ result.bitField0_ |= to_bitField0_;
}
@java.lang.Override
@@ -1766,6 +1900,9 @@ public Builder mergeFrom(
if (other.changeType_ != 0) {
setChangeTypeValue(other.getChangeTypeValue());
}
+ if (other.hasExpirationOffset()) {
+ mergeExpirationOffset(other.getExpirationOffset());
+ }
this.mergeUnknownFields(other.getUnknownFields());
onChanged();
return this;
@@ -1798,6 +1935,13 @@ public Builder mergeFrom(
bitField0_ |= 0x00000001;
break;
} // case 8
+ case 26:
+ {
+ input.readMessage(
+ internalGetExpirationOffsetFieldBuilder().getBuilder(), extensionRegistry);
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 26
default:
{
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -1928,6 +2072,209 @@ public Builder clearChangeType() {
return this;
}
+ private com.google.protobuf.Duration expirationOffset_;
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>
+ expirationOffsetBuilder_;
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return Whether the expirationOffset field is set.
+ */
+ public boolean hasExpirationOffset() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ *
+ * @return The expirationOffset.
+ */
+ public com.google.protobuf.Duration getExpirationOffset() {
+ if (expirationOffsetBuilder_ == null) {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ } else {
+ return expirationOffsetBuilder_.getMessage();
+ }
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public Builder setExpirationOffset(com.google.protobuf.Duration value) {
+ if (expirationOffsetBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ expirationOffset_ = value;
+ } else {
+ expirationOffsetBuilder_.setMessage(value);
+ }
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public Builder setExpirationOffset(com.google.protobuf.Duration.Builder builderForValue) {
+ if (expirationOffsetBuilder_ == null) {
+ expirationOffset_ = builderForValue.build();
+ } else {
+ expirationOffsetBuilder_.setMessage(builderForValue.build());
+ }
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public Builder mergeExpirationOffset(com.google.protobuf.Duration value) {
+ if (expirationOffsetBuilder_ == null) {
+ if (((bitField0_ & 0x00000002) != 0)
+ && expirationOffset_ != null
+ && expirationOffset_ != com.google.protobuf.Duration.getDefaultInstance()) {
+ getExpirationOffsetBuilder().mergeFrom(value);
+ } else {
+ expirationOffset_ = value;
+ }
+ } else {
+ expirationOffsetBuilder_.mergeFrom(value);
+ }
+ if (expirationOffset_ != null) {
+ bitField0_ |= 0x00000002;
+ onChanged();
+ }
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public Builder clearExpirationOffset() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ expirationOffset_ = null;
+ if (expirationOffsetBuilder_ != null) {
+ expirationOffsetBuilder_.dispose();
+ expirationOffsetBuilder_ = null;
+ }
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public com.google.protobuf.Duration.Builder getExpirationOffsetBuilder() {
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return internalGetExpirationOffsetFieldBuilder().getBuilder();
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ public com.google.protobuf.DurationOrBuilder getExpirationOffsetOrBuilder() {
+ if (expirationOffsetBuilder_ != null) {
+ return expirationOffsetBuilder_.getMessageOrBuilder();
+ } else {
+ return expirationOffset_ == null
+ ? com.google.protobuf.Duration.getDefaultInstance()
+ : expirationOffset_;
+ }
+ }
+
+ /**
+ *
+ *
+ *
+ * The offset, relative to the timestamp value in the TTL-enabled field,
+ * used determine the document's expiration time.
+ *
+ *
+ * .google.protobuf.Duration expiration_offset = 3;
+ */
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>
+ internalGetExpirationOffsetFieldBuilder() {
+ if (expirationOffsetBuilder_ == null) {
+ expirationOffsetBuilder_ =
+ new com.google.protobuf.SingleFieldBuilder<
+ com.google.protobuf.Duration,
+ com.google.protobuf.Duration.Builder,
+ com.google.protobuf.DurationOrBuilder>(
+ getExpirationOffset(), getParentForChildren(), isClean());
+ expirationOffset_ = null;
+ }
+ return expirationOffsetBuilder_;
+ }
+
// @@protoc_insertion_point(builder_scope:google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta)
}
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldProto.java b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldProto.java
index a7b3dcd7a1..f40b558ce5 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldProto.java
+++ b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/FieldProto.java
@@ -61,36 +61,33 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
static {
java.lang.String[] descriptorData = {
- "\n"
- + "%google/firestore/admin/v1/field.proto\022"
+ "\n%google/firestore/admin/v1/field.proto\022"
+ "\031google.firestore.admin.v1\032\037google/api/f"
+ "ield_behavior.proto\032\031google/api/resource"
- + ".proto\032%google/firestore/admin/v1/index.proto\"\305\004\n"
- + "\005Field\022\021\n"
- + "\004name\030\001 \001(\tB\003\340A\002\022B\n"
- + "\014index_config\030\002"
- + " \001(\0132,.google.firestore.admin.v1.Field.IndexConfig\022>\n\n"
- + "ttl_config\030\003 \001(\0132*.google.firestore.admin.v1.Field.TtlConfig\032\211\001\n"
- + "\013IndexConfig\0221\n"
- + "\007indexes\030\001 \003(\0132 .google.firestore.admin.v1.Index\022\034\n"
- + "\024uses_ancestor_config\030\002 \001(\010\022\026\n"
- + "\016ancestor_field\030\003 \001(\t\022\021\n"
- + "\treverting\030\004 \001(\010\032\235\001\n"
- + "\tTtlConfig\022D\n"
- + "\005state\030\001"
- + " \001(\01620.google.firestore.admin.v1.Field.TtlConfig.StateB\003\340A\003\"J\n"
- + "\005State\022\025\n"
- + "\021STATE_UNSPECIFIED\020\000\022\014\n"
- + "\010CREATING\020\001\022\n\n"
- + "\006ACTIVE\020\002\022\020\n"
- + "\014NEEDS_REPAIR\020\003:y\352Av\n"
- + "\036firestore.googleapis.com/Field\022Tprojects/{proje"
- + "ct}/databases/{database}/collectionGroups/{collection}/fields/{field}B\331\001\n"
- + "\035com.google.firestore.admin.v1B\n"
- + "FieldProtoP\001Z9cloud.google.com/go/firestore/apiv1/admin"
- + "/adminpb;adminpb\242\002\004GCFS\252\002\037Google.Cloud.F"
- + "irestore.Admin.V1\312\002\037Google\\Cloud\\Firesto"
- + "re\\Admin\\V1\352\002#Google::Cloud::Firestore::Admin::V1b\006proto3"
+ + ".proto\032%google/firestore/admin/v1/index."
+ + "proto\032\036google/protobuf/duration.proto\"\200\005"
+ + "\n\005Field\022\021\n\004name\030\001 \001(\tB\003\340A\002\022B\n\014index_conf"
+ + "ig\030\002 \001(\0132,.google.firestore.admin.v1.Fie"
+ + "ld.IndexConfig\022>\n\nttl_config\030\003 \001(\0132*.goo"
+ + "gle.firestore.admin.v1.Field.TtlConfig\032\211"
+ + "\001\n\013IndexConfig\0221\n\007indexes\030\001 \003(\0132 .google"
+ + ".firestore.admin.v1.Index\022\034\n\024uses_ancest"
+ + "or_config\030\002 \001(\010\022\026\n\016ancestor_field\030\003 \001(\t\022"
+ + "\021\n\treverting\030\004 \001(\010\032\330\001\n\tTtlConfig\022D\n\005stat"
+ + "e\030\001 \001(\01620.google.firestore.admin.v1.Fiel"
+ + "d.TtlConfig.StateB\003\340A\003\0229\n\021expiration_off"
+ + "set\030\003 \001(\0132\031.google.protobuf.DurationB\003\340A"
+ + "\001\"J\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CRE"
+ + "ATING\020\001\022\n\n\006ACTIVE\020\002\022\020\n\014NEEDS_REPAIR\020\003:y\352"
+ + "Av\n\036firestore.googleapis.com/Field\022Tproj"
+ + "ects/{project}/databases/{database}/coll"
+ + "ectionGroups/{collection}/fields/{field}"
+ + "B\331\001\n\035com.google.firestore.admin.v1B\nFiel"
+ + "dProtoP\001Z9cloud.google.com/go/firestore/"
+ + "apiv1/admin/adminpb;adminpb\242\002\004GCFS\252\002\037Goo"
+ + "gle.Cloud.Firestore.Admin.V1\312\002\037Google\\Cl"
+ + "oud\\Firestore\\Admin\\V1\352\002#Google::Cloud::"
+ + "Firestore::Admin::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -99,6 +96,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.api.FieldBehaviorProto.getDescriptor(),
com.google.api.ResourceProto.getDescriptor(),
com.google.firestore.admin.v1.IndexProto.getDescriptor(),
+ com.google.protobuf.DurationProto.getDescriptor(),
});
internal_static_google_firestore_admin_v1_Field_descriptor = getDescriptor().getMessageType(0);
internal_static_google_firestore_admin_v1_Field_fieldAccessorTable =
@@ -121,12 +119,13 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_google_firestore_admin_v1_Field_TtlConfig_descriptor,
new java.lang.String[] {
- "State",
+ "State", "ExpirationOffset",
});
descriptor.resolveAllFeaturesImmutable();
com.google.api.FieldBehaviorProto.getDescriptor();
com.google.api.ResourceProto.getDescriptor();
com.google.firestore.admin.v1.IndexProto.getDescriptor();
+ com.google.protobuf.DurationProto.getDescriptor();
com.google.protobuf.ExtensionRegistry registry =
com.google.protobuf.ExtensionRegistry.newInstance();
registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/OperationProto.java b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/OperationProto.java
index 99fd03f313..7edde73bf7 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/OperationProto.java
+++ b/proto-google-cloud-firestore-admin-v1/src/main/java/com/google/firestore/admin/v1/OperationProto.java
@@ -97,36 +97,39 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ ")google/firestore/admin/v1/operation.pr"
+ "oto\022\031google.firestore.admin.v1\032\031google/a"
+ "pi/resource.proto\032%google/firestore/admin/v1/index.proto\032(google/firestore/admin"
- + "/v1/snapshot.proto\032\037google/protobuf/timestamp.proto\"\275\002\n"
+ + "/v1/snapshot.proto\032\036google/protobuf/dura"
+ + "tion.proto\032\037google/protobuf/timestamp.proto\"\275\002\n"
+ "\026IndexOperationMetadata\022.\n\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022\r\n"
+ "\005index\030\003 \001(\t\0228\n"
+ "\005state\030\004 \001(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ "\022progress_documents\030\005 \001(\0132#.google.firestore.admin.v1.Progress\022;\n"
- + "\016progress_bytes\030\006 \001(\0132#.google.firestore.admin.v1.Progress\"\231\007\n"
+ + "\016progress_bytes\030\006 \001(\0132#.google.firestore.admin.v1.Progress\"\317\007\n"
+ "\026FieldOperationMetadata\022.\n\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022\r\n"
+ "\005field\030\003 \001(\t\022_\n"
- + "\023index_config_deltas\030\004 \003(\0132B.google.firestore.admi"
- + "n.v1.FieldOperationMetadata.IndexConfigDelta\0228\n"
+ + "\023index_config_deltas\030\004"
+ + " \003(\0132B.google.firestore.admin.v1.FieldOperationMetadata.IndexConfigDelta\0228\n"
+ "\005state\030\005 \001(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ "\022progress_documents\030\006 \001(\0132#.google.firestore.admin.v1.Progress\022;\n"
+ "\016progress_bytes\030\007 \001(\0132#.google.firestore.admin.v1.Progress\022Z\n"
- + "\020ttl_config_delta\030\010 \001(\0132@.google.firestore.admin."
- + "v1.FieldOperationMetadata.TtlConfigDelta\032\347\001\n"
+ + "\020ttl_config_delta\030\010"
+ + " \001(\0132@.google.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta\032\347\001\n"
+ "\020IndexConfigDelta\022b\n"
- + "\013change_type\030\001 \001(\0162M.google.firestore.admin.v1.FieldOper"
- + "ationMetadata.IndexConfigDelta.ChangeType\022/\n"
+ + "\013change_type\030\001 \001(\0162M.goo"
+ + "gle.firestore.admin.v1.FieldOperationMetadata.IndexConfigDelta.ChangeType\022/\n"
+ "\005index\030\002 \001(\0132 .google.firestore.admin.v1.Index\">\n\n"
+ "ChangeType\022\033\n"
+ "\027CHANGE_TYPE_UNSPECIFIED\020\000\022\007\n"
+ "\003ADD\020\001\022\n\n"
- + "\006REMOVE\020\002\032\262\001\n"
+ + "\006REMOVE\020\002\032\350\001\n"
+ "\016TtlConfigDelta\022`\n"
- + "\013change_type\030\001 \001(\0162K.goo"
- + "gle.firestore.admin.v1.FieldOperationMetadata.TtlConfigDelta.ChangeType\">\n\n"
+ + "\013change_type\030\001 \001(\0162K.google.fire"
+ + "store.admin.v1.FieldOperationMetadata.TtlConfigDelta.ChangeType\0224\n"
+ + "\021expiration_offset\030\003 \001(\0132\031.google.protobuf.Duration\">\n"
+ + "\n"
+ "ChangeType\022\033\n"
+ "\027CHANGE_TYPE_UNSPECIFIED\020\000\022\007\n"
+ "\003ADD\020\001\022\n\n"
@@ -134,8 +137,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\027ExportDocumentsMetadata\022.\n\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022B\n"
- + "\017operation_state\030\003 \001"
- + "(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ + "\017operation_state\030\003"
+ + " \001(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ "\022progress_documents\030\004 \001(\0132#.google.firestore.admin.v1.Progress\022;\n"
+ "\016progress_bytes\030\005 \001(\0132#.google.firestore.admin.v1.Progress\022\026\n"
+ "\016collection_ids\030\006 \003(\t\022\031\n"
@@ -145,19 +148,18 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\027ImportDocumentsMetadata\022.\n\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022B\n"
- + "\017operation_state\030\003 "
- + "\001(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ + "\017operation_state\030\003"
+ + " \001(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ "\022progress_documents\030\004 \001(\0132#.google.firestore.admin.v1.Progress\022;\n"
+ "\016progress_bytes\030\005 \001(\0132#.google.firestore.admin.v1.Progress\022\026\n"
+ "\016collection_ids\030\006 \003(\t\022\030\n"
+ "\020input_uri_prefix\030\007 \001(\t\022\025\n\r"
+ "namespace_ids\030\010 \003(\t\"\237\003\n"
- + "\033BulkDeleteDocumentsMetadata\022.\n"
- + "\n"
+ + "\033BulkDeleteDocumentsMetadata\022.\n\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022B\n"
- + "\017operation_state\030\003 \001(\0162).g"
- + "oogle.firestore.admin.v1.OperationState\022?\n"
+ + "\017operation_state\030\003 \001"
+ + "(\0162).google.firestore.admin.v1.OperationState\022?\n"
+ "\022progress_documents\030\004 \001(\0132#.google.firestore.admin.v1.Progress\022;\n"
+ "\016progress_bytes\030\005 \001(\0132#.google.firestore.admin.v1.Progress\022\026\n"
+ "\016collection_ids\030\006 \003(\t\022\025\n\r"
@@ -176,11 +178,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\037firestore.googleapis.com/Backup\022@\n"
+ "\023progress_percentage\030\010"
+ " \001(\0132#.google.firestore.admin.v1.Progress\"\365\002\n"
- + "\025CloneDatabaseMetadata\022.\n\n"
+ + "\025CloneDatabaseMetadata\022.\n"
+ + "\n"
+ "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n"
+ "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022B\n"
- + "\017operation_state\030\003"
- + " \001(\0162).google.firestore.admin.v1.OperationState\0228\n"
+ + "\017operation_state\030\003 \001(\0162).g"
+ + "oogle.firestore.admin.v1.OperationState\0228\n"
+ "\010database\030\004 \001(\tB&\372A#\n"
+ "!firestore.googleapis.com/Database\022>\n\r"
+ "pitr_snapshot\030\007 \001(\0132\'.google.firestore.admin.v1.PitrSnapshot\022@\n"
@@ -190,18 +193,19 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\016completed_work\030\002 \001(\003*\236\001\n"
+ "\016OperationState\022\037\n"
+ "\033OPERATION_STATE_UNSPECIFIED\020\000\022\020\n"
- + "\014INITIALIZING\020\001\022\016\n\n"
+ + "\014INITIALIZING\020\001\022\016\n"
+ + "\n"
+ "PROCESSING\020\002\022\016\n\n"
+ "CANCELLING\020\003\022\016\n\n"
+ "FINALIZING\020\004\022\016\n\n"
+ "SUCCESSFUL\020\005\022\n\n"
+ "\006FAILED\020\006\022\r\n"
+ "\tCANCELLED\020\007B\335\001\n"
- + "\035com.google.firestore.admin.v1B\016OperationProtoP\001Z9cloud.google.com/go/fire"
- + "store/apiv1/admin/adminpb;adminpb\242\002\004GCFS"
- + "\252\002\037Google.Cloud.Firestore.Admin.V1\312\002\037Goo"
- + "gle\\Cloud\\Firestore\\Admin\\V1\352\002#Google::C"
- + "loud::Firestore::Admin::V1b\006proto3"
+ + "\035com.google.firestore.admin.v1B\016OperationProtoP\001Z9cloud.google.com/g"
+ + "o/firestore/apiv1/admin/adminpb;adminpb\242"
+ + "\002\004GCFS\252\002\037Google.Cloud.Firestore.Admin.V1"
+ + "\312\002\037Google\\Cloud\\Firestore\\Admin\\V1\352\002#Goo"
+ + "gle::Cloud::Firestore::Admin::V1b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -210,6 +214,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.api.ResourceProto.getDescriptor(),
com.google.firestore.admin.v1.IndexProto.getDescriptor(),
com.google.firestore.admin.v1.PitrSnapshotProto.getDescriptor(),
+ com.google.protobuf.DurationProto.getDescriptor(),
com.google.protobuf.TimestampProto.getDescriptor(),
});
internal_static_google_firestore_admin_v1_IndexOperationMetadata_descriptor =
@@ -251,7 +256,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_google_firestore_admin_v1_FieldOperationMetadata_TtlConfigDelta_descriptor,
new java.lang.String[] {
- "ChangeType",
+ "ChangeType", "ExpirationOffset",
});
internal_static_google_firestore_admin_v1_ExportDocumentsMetadata_descriptor =
getDescriptor().getMessageType(2);
@@ -340,6 +345,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.api.ResourceProto.getDescriptor();
com.google.firestore.admin.v1.IndexProto.getDescriptor();
com.google.firestore.admin.v1.PitrSnapshotProto.getDescriptor();
+ com.google.protobuf.DurationProto.getDescriptor();
com.google.protobuf.TimestampProto.getDescriptor();
com.google.protobuf.ExtensionRegistry registry =
com.google.protobuf.ExtensionRegistry.newInstance();
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/field.proto b/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/field.proto
index cdd1c859ef..239d791c01 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/field.proto
+++ b/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/field.proto
@@ -19,6 +19,7 @@ package google.firestore.admin.v1;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/firestore/admin/v1/index.proto";
+import "google/protobuf/duration.proto";
option csharp_namespace = "Google.Cloud.Firestore.Admin.V1";
option go_package = "cloud.google.com/go/firestore/apiv1/admin/adminpb;adminpb";
@@ -66,12 +67,14 @@ message Field {
// The TTL (time-to-live) configuration for documents that have this `Field`
// set.
//
- // Storing a timestamp value into a TTL-enabled field will be treated as
- // the document's absolute expiration time. For Enterprise edition databases,
- // the timestamp value may also be stored in an array value in the
- // TTL-enabled field.
+ // A timestamp stored in a TTL-enabled field will be used to determine the
+ // expiration time of the document. The expiration time is the sum
+ // of the timestamp value and the `expiration_offset`.
//
- // Timestamp values in the past indicate that the document is eligible for
+ // For Enterprise edition databases, the timestamp value may alternatively be
+ // stored in an array value in the TTL-enabled field.
+ //
+ // An expiration time in the past indicates that the document is eligible for
// immediate expiration. Using any other data type or leaving the field absent
// will disable expiration for the individual document.
message TtlConfig {
@@ -99,6 +102,17 @@ message Field {
// Output only. The state of the TTL configuration.
State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
+
+ // Optional. The offset, relative to the timestamp value from the
+ // TTL-enabled field, used to determine the document's expiration time.
+ //
+ // `expiration_offset.seconds` must be between 0 and 2,147,483,647
+ // inclusive. Values more precise than seconds are rejected.
+ //
+ // If unset, defaults to 0, in which case the expiration time is the same
+ // as the timestamp value from the TTL-enabled field.
+ google.protobuf.Duration expiration_offset = 3
+ [(google.api.field_behavior) = OPTIONAL];
}
// Required. A field name of the form:
diff --git a/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/operation.proto b/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/operation.proto
index eefc3e3384..3d22fdf4a8 100644
--- a/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/operation.proto
+++ b/proto-google-cloud-firestore-admin-v1/src/main/proto/google/firestore/admin/v1/operation.proto
@@ -19,6 +19,7 @@ package google.firestore.admin.v1;
import "google/api/resource.proto";
import "google/firestore/admin/v1/index.proto";
import "google/firestore/admin/v1/snapshot.proto";
+import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.Firestore.Admin.V1";
@@ -96,6 +97,10 @@ message FieldOperationMetadata {
// Specifies how the TTL configuration is changing.
ChangeType change_type = 1;
+
+ // The offset, relative to the timestamp value in the TTL-enabled field,
+ // used determine the document's expiration time.
+ google.protobuf.Duration expiration_offset = 3;
}
// The time this operation started.
From 6acac4b0598891f66174e911ccf55375b587d773 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Tue, 14 Apr 2026 15:44:15 -0400
Subject: [PATCH 5/5] chore(main): release 3.41.0 (#2361)
* chore(main): release 3.41.0
* chore: generate libraries at Tue Apr 14 19:32:31 UTC 2026
* fix: restore Version.java
---------
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot
Co-authored-by: Diego Marquez
---
.github/.OwlBot-hermetic.yaml | 1 +
CHANGELOG.md | 17 +++++++++++++++++
README.md | 6 +++---
google-cloud-firestore-admin/pom.xml | 4 ++--
.../google/cloud/firestore/v1/stub/Version.java | 2 +-
google-cloud-firestore-bom/pom.xml | 16 ++++++++--------
google-cloud-firestore/pom.xml | 4 ++--
.../google/cloud/firestore/v1/stub/Version.java | 2 +-
grpc-google-cloud-firestore-admin-v1/pom.xml | 4 ++--
grpc-google-cloud-firestore-v1/pom.xml | 4 ++--
pom.xml | 14 +++++++-------
proto-google-cloud-firestore-admin-v1/pom.xml | 4 ++--
proto-google-cloud-firestore-bundle-v1/pom.xml | 4 ++--
proto-google-cloud-firestore-v1/pom.xml | 4 ++--
versions.txt | 16 ++++++++--------
15 files changed, 60 insertions(+), 42 deletions(-)
diff --git a/.github/.OwlBot-hermetic.yaml b/.github/.OwlBot-hermetic.yaml
index 847cecc01f..ece2f290bb 100644
--- a/.github/.OwlBot-hermetic.yaml
+++ b/.github/.OwlBot-hermetic.yaml
@@ -5,6 +5,7 @@ deep-remove-regex:
- "/google-cloud-firestore-admin/src"
deep-preserve-regex:
+- "/.*google-.*/src/main/java/.*/stub/Version.java"
- "/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java"
- "/proto-google-cloud-firestore-v1/src/main/java/com/google/firestore/v1/DocumentPathName.java"
- "/proto-google-cloud-firestore-v1/src/main/java/com/google/firestore/v1/AnyPathName.java"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd96d44c0d..5f39beb6da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,22 @@
# Changelog
+## [3.41.0](https://github.com/googleapis/java-firestore/compare/v3.40.0...v3.41.0) (2026-04-14)
+
+
+### Features
+
+* Add `expiration_offset` to `Field` ([c29d25d](https://github.com/googleapis/java-firestore/commit/c29d25db9dcbfbee4eda2db21528f99d63e5cb6e))
+
+
+### Bug Fixes
+
+* **deps:** Update the Java code generator (gapic-generator-java) to 2.71.0 ([c29d25d](https://github.com/googleapis/java-firestore/commit/c29d25db9dcbfbee4eda2db21528f99d63e5cb6e))
+
+
+### Dependencies
+
+* Update sdk-platform-java-config to 3.61.0 ([#2359](https://github.com/googleapis/java-firestore/issues/2359)) ([33e33fa](https://github.com/googleapis/java-firestore/commit/33e33fa0c55c0f210cd148bb0ed0fbeb1a883228))
+
## [3.40.0](https://github.com/googleapis/java-firestore/compare/v3.39.0...v3.40.0) (2026-04-08)
diff --git a/README.md b/README.md
index fac694d84f..c6f7d25329 100644
--- a/README.md
+++ b/README.md
@@ -56,13 +56,13 @@ implementation 'com.google.cloud:google-cloud-firestore'
If you are using Gradle without BOM, add this to your dependencies:
```Groovy
-implementation 'com.google.cloud:google-cloud-firestore:3.40.0'
+implementation 'com.google.cloud:google-cloud-firestore:3.41.0'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-firestore" % "3.40.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-firestore" % "3.41.0"
```
## Authentication
@@ -201,7 +201,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-firestore/latest/history
[stability-image]: https://img.shields.io/badge/stability-stable-green
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-firestore.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-firestore/3.40.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-firestore/3.41.0
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/google-cloud-firestore-admin/pom.xml b/google-cloud-firestore-admin/pom.xml
index 0d79dfd4d8..01a00a4a54 100644
--- a/google-cloud-firestore-admin/pom.xml
+++ b/google-cloud-firestore-admin/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
google-cloud-firestore-admin
- 3.40.1-SNAPSHOT
+ 3.41.0
jar
Google Cloud Firestore Admin Client
https://github.com/googleapis/java-firestore
@@ -14,7 +14,7 @@
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java b/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
index 26db2de3c8..23394dd393 100644
--- a/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
+++ b/google-cloud-firestore-admin/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
@@ -21,7 +21,7 @@
@InternalApi("For internal use only")
final class Version {
// {x-version-update-start:google-cloud-firestore:current}
- static final String VERSION = "0.0.0-SNAPSHOT";
+ static final String VERSION = "3.41.0";
// {x-version-update-end}
}
diff --git a/google-cloud-firestore-bom/pom.xml b/google-cloud-firestore-bom/pom.xml
index 0ef78a8b34..10f39b96df 100644
--- a/google-cloud-firestore-bom/pom.xml
+++ b/google-cloud-firestore-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-firestore-bom
- 3.40.1-SNAPSHOT
+ 3.41.0
pom
com.google.cloud
@@ -52,37 +52,37 @@
com.google.cloud
google-cloud-firestore
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.cloud
google-cloud-firestore-admin
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
grpc-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
grpc-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
proto-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
proto-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.cloud
proto-google-cloud-firestore-bundle-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/google-cloud-firestore/pom.xml b/google-cloud-firestore/pom.xml
index c7dd432414..e175bda0d7 100644
--- a/google-cloud-firestore/pom.xml
+++ b/google-cloud-firestore/pom.xml
@@ -2,7 +2,7 @@
4.0.0
google-cloud-firestore
- 3.40.1-SNAPSHOT
+ 3.41.0
jar
Google Cloud Firestore
https://github.com/googleapis/java-firestore
@@ -12,7 +12,7 @@
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
google-cloud-firestore
diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
index 26db2de3c8..23394dd393 100644
--- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
+++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/Version.java
@@ -21,7 +21,7 @@
@InternalApi("For internal use only")
final class Version {
// {x-version-update-start:google-cloud-firestore:current}
- static final String VERSION = "0.0.0-SNAPSHOT";
+ static final String VERSION = "3.41.0";
// {x-version-update-end}
}
diff --git a/grpc-google-cloud-firestore-admin-v1/pom.xml b/grpc-google-cloud-firestore-admin-v1/pom.xml
index eda476d05b..81b221536e 100644
--- a/grpc-google-cloud-firestore-admin-v1/pom.xml
+++ b/grpc-google-cloud-firestore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
grpc-google-cloud-firestore-admin-v1
GRPC library for grpc-google-cloud-firestore-admin-v1
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/grpc-google-cloud-firestore-v1/pom.xml b/grpc-google-cloud-firestore-v1/pom.xml
index 7166a48406..6315934d21 100644
--- a/grpc-google-cloud-firestore-v1/pom.xml
+++ b/grpc-google-cloud-firestore-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
grpc-google-cloud-firestore-v1
GRPC library for grpc-google-cloud-firestore-v1
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/pom.xml b/pom.xml
index fd4d65df49..f6c2fde462 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-firestore-parent
pom
- 3.40.1-SNAPSHOT
+ 3.41.0
Google Cloud Firestore Parent
https://github.com/googleapis/java-firestore
@@ -150,32 +150,32 @@
com.google.api.grpc
proto-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.cloud
google-cloud-firestore
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.cloud
proto-google-cloud-firestore-bundle-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
proto-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
grpc-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
com.google.api.grpc
grpc-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/proto-google-cloud-firestore-admin-v1/pom.xml b/proto-google-cloud-firestore-admin-v1/pom.xml
index 1ddc8c4788..b8822cdcfc 100644
--- a/proto-google-cloud-firestore-admin-v1/pom.xml
+++ b/proto-google-cloud-firestore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-firestore-admin-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
proto-google-cloud-firestore-admin-v1
PROTO library for proto-google-cloud-firestore-admin-v1
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/proto-google-cloud-firestore-bundle-v1/pom.xml b/proto-google-cloud-firestore-bundle-v1/pom.xml
index ffa1f1ba0b..9896aa87ee 100644
--- a/proto-google-cloud-firestore-bundle-v1/pom.xml
+++ b/proto-google-cloud-firestore-bundle-v1/pom.xml
@@ -5,14 +5,14 @@
4.0.0
proto-google-cloud-firestore-bundle-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
proto-google-cloud-firestore-bundle-v1
PROTO library for proto-google-cloud-firestore-bundle-v1
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/proto-google-cloud-firestore-v1/pom.xml b/proto-google-cloud-firestore-v1/pom.xml
index 4356dc537c..5805945c89 100644
--- a/proto-google-cloud-firestore-v1/pom.xml
+++ b/proto-google-cloud-firestore-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-firestore-v1
- 3.40.1-SNAPSHOT
+ 3.41.0
proto-google-cloud-firestore-v1
PROTO library for proto-google-cloud-firestore-v1
com.google.cloud
google-cloud-firestore-parent
- 3.40.1-SNAPSHOT
+ 3.41.0
diff --git a/versions.txt b/versions.txt
index cb05e025ca..16f6132833 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,11 +1,11 @@
# Format:
# module:released-version:current-version
-google-cloud-firestore:3.40.0:3.40.1-SNAPSHOT
-google-cloud-firestore-admin:3.40.0:3.40.1-SNAPSHOT
-google-cloud-firestore-bom:3.40.0:3.40.1-SNAPSHOT
-grpc-google-cloud-firestore-admin-v1:3.40.0:3.40.1-SNAPSHOT
-grpc-google-cloud-firestore-v1:3.40.0:3.40.1-SNAPSHOT
-proto-google-cloud-firestore-admin-v1:3.40.0:3.40.1-SNAPSHOT
-proto-google-cloud-firestore-v1:3.40.0:3.40.1-SNAPSHOT
-proto-google-cloud-firestore-bundle-v1:3.40.0:3.40.1-SNAPSHOT
+google-cloud-firestore:3.41.0:3.41.0
+google-cloud-firestore-admin:3.41.0:3.41.0
+google-cloud-firestore-bom:3.41.0:3.41.0
+grpc-google-cloud-firestore-admin-v1:3.41.0:3.41.0
+grpc-google-cloud-firestore-v1:3.41.0:3.41.0
+proto-google-cloud-firestore-admin-v1:3.41.0:3.41.0
+proto-google-cloud-firestore-v1:3.41.0:3.41.0
+proto-google-cloud-firestore-bundle-v1:3.41.0:3.41.0