diff --git a/README.md b/README.md index 639b0d9925e..5f828e75a23 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ If you are using Maven without the BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies: ```Groovy -implementation platform('com.google.cloud:libraries-bom:26.54.0') +implementation platform('com.google.cloud:libraries-bom:26.55.0') implementation 'com.google.cloud:google-cloud-spanner' ``` diff --git a/generation_config.yaml b/generation_config.yaml index 257ca065090..a6a7866d7e2 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,6 +1,6 @@ gapic_generator_version: 2.53.0 -googleapis_commitish: 9605bff3d36fbdb1227b26bce68258c5f00815e4 -libraries_bom_version: 26.54.0 +googleapis_commitish: 6bc8e91bf92cc985da5ed0c227b48f12315cb695 +libraries_bom_version: 26.55.0 libraries: - api_shortname: spanner name_pretty: Cloud Spanner diff --git a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json index 1b9c4de2d83..357035df837 100644 --- a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json +++ b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json @@ -1781,6 +1781,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.BackupSchedule", "queryAllDeclaredConstructors": true, @@ -6110,6 +6128,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.TransactionOptions$IsolationLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.TransactionOptions$PartitionedDml", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json index 3b456d976d0..0d1524fb146 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.database.v1/reflect-config.json @@ -1781,6 +1781,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.admin.database.v1.BackupInstancePartition$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.database.v1.BackupSchedule", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json index bcbb239a5be..20a93919949 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.v1/reflect-config.json @@ -2249,6 +2249,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.v1.TransactionOptions$IsolationLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.v1.TransactionOptions$PartitionedDml", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java index 5d476f914a8..26826b4dd8d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java @@ -48,6 +48,7 @@ import com.google.protobuf.Timestamp; import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; +import com.google.spanner.admin.database.v1.BackupInstancePartition; import com.google.spanner.admin.database.v1.BackupName; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.BackupScheduleName; @@ -1099,6 +1100,7 @@ public void createBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1168,6 +1170,7 @@ public void createBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1237,6 +1240,7 @@ public void copyBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1309,6 +1313,7 @@ public void copyBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1381,6 +1386,7 @@ public void copyBackupTest3() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1453,6 +1459,7 @@ public void copyBackupTest4() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1525,6 +1532,7 @@ public void getBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1585,6 +1593,7 @@ public void getBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1645,6 +1654,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockService.addResponse(expectedResponse); @@ -1667,6 +1677,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); @@ -1715,6 +1726,7 @@ public void updateBackupExceptionTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); FieldMask updateMask = FieldMask.newBuilder().build(); client.updateBackup(backup, updateMask); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java index 2424ad7bc27..fbc20ebbd9b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java @@ -51,6 +51,7 @@ import com.google.spanner.admin.database.v1.AddSplitPointsRequest; import com.google.spanner.admin.database.v1.AddSplitPointsResponse; import com.google.spanner.admin.database.v1.Backup; +import com.google.spanner.admin.database.v1.BackupInstancePartition; import com.google.spanner.admin.database.v1.BackupName; import com.google.spanner.admin.database.v1.BackupSchedule; import com.google.spanner.admin.database.v1.BackupScheduleName; @@ -1013,6 +1014,7 @@ public void createBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1081,6 +1083,7 @@ public void createBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1149,6 +1152,7 @@ public void copyBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1221,6 +1225,7 @@ public void copyBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1293,6 +1298,7 @@ public void copyBackupTest3() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1365,6 +1371,7 @@ public void copyBackupTest4() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); Operation resultOperation = Operation.newBuilder() @@ -1437,6 +1444,7 @@ public void getBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -1491,6 +1499,7 @@ public void getBackupTest2() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -1545,6 +1554,7 @@ public void updateBackupTest() throws Exception { .addAllBackupSchedules(new ArrayList()) .setIncrementalBackupChainId("incrementalBackupChainId1926005216") .setOldestVersionTime(Timestamp.newBuilder().build()) + .addAllInstancePartitions(new ArrayList()) .build(); mockDatabaseAdmin.addResponse(expectedResponse); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java index 8b0895ebf50..9171639689c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java @@ -48,6 +48,7 @@ private Backup() { referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); backupSchedules_ = com.google.protobuf.LazyStringArrayList.emptyList(); incrementalBackupChainId_ = ""; + instancePartitions_ = java.util.Collections.emptyList(); } @java.lang.Override @@ -1355,6 +1356,107 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { : oldestVersionTime_; } + public static final int INSTANCE_PARTITIONS_FIELD_NUMBER = 19; + + @SuppressWarnings("serial") + private java.util.List + instancePartitions_; + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public java.util.List + getInstancePartitionsList() { + return instancePartitions_; + } + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + getInstancePartitionsOrBuilderList() { + return instancePartitions_; + } + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public int getInstancePartitionsCount() { + return instancePartitions_.size(); + } + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions( + int index) { + return instancePartitions_.get(index); + } + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index) { + return instancePartitions_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -1426,6 +1528,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000020) != 0)) { output.writeMessage(18, getOldestVersionTime()); } + for (int i = 0; i < instancePartitions_.size(); i++) { + output.writeMessage(19, instancePartitions_.get(i)); + } getUnknownFields().writeTo(output); } @@ -1509,6 +1614,10 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000020) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(18, getOldestVersionTime()); } + for (int i = 0; i < instancePartitions_.size(); i++) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(19, instancePartitions_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1561,6 +1670,7 @@ public boolean equals(final java.lang.Object obj) { if (hasOldestVersionTime()) { if (!getOldestVersionTime().equals(other.getOldestVersionTime())) return false; } + if (!getInstancePartitionsList().equals(other.getInstancePartitionsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -1628,6 +1738,10 @@ public int hashCode() { hash = (37 * hash) + OLDEST_VERSION_TIME_FIELD_NUMBER; hash = (53 * hash) + getOldestVersionTime().hashCode(); } + if (getInstancePartitionsCount() > 0) { + hash = (37 * hash) + INSTANCE_PARTITIONS_FIELD_NUMBER; + hash = (53 * hash) + getInstancePartitionsList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1775,6 +1889,7 @@ private void maybeForceBuilderInitialization() { getEncryptionInformationFieldBuilder(); getMaxExpireTimeFieldBuilder(); getOldestVersionTimeFieldBuilder(); + getInstancePartitionsFieldBuilder(); } } @@ -1830,6 +1945,13 @@ public Builder clear() { oldestVersionTimeBuilder_.dispose(); oldestVersionTimeBuilder_ = null; } + if (instancePartitionsBuilder_ == null) { + instancePartitions_ = java.util.Collections.emptyList(); + } else { + instancePartitions_ = null; + instancePartitionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00040000); return this; } @@ -1875,6 +1997,15 @@ private void buildPartialRepeatedFields(com.google.spanner.admin.database.v1.Bac } else { result.encryptionInformation_ = encryptionInformationBuilder_.build(); } + if (instancePartitionsBuilder_ == null) { + if (((bitField0_ & 0x00040000) != 0)) { + instancePartitions_ = java.util.Collections.unmodifiableList(instancePartitions_); + bitField0_ = (bitField0_ & ~0x00040000); + } + result.instancePartitions_ = instancePartitions_; + } else { + result.instancePartitions_ = instancePartitionsBuilder_.build(); + } } private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) { @@ -2099,6 +2230,33 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) { if (other.hasOldestVersionTime()) { mergeOldestVersionTime(other.getOldestVersionTime()); } + if (instancePartitionsBuilder_ == null) { + if (!other.instancePartitions_.isEmpty()) { + if (instancePartitions_.isEmpty()) { + instancePartitions_ = other.instancePartitions_; + bitField0_ = (bitField0_ & ~0x00040000); + } else { + ensureInstancePartitionsIsMutable(); + instancePartitions_.addAll(other.instancePartitions_); + } + onChanged(); + } + } else { + if (!other.instancePartitions_.isEmpty()) { + if (instancePartitionsBuilder_.isEmpty()) { + instancePartitionsBuilder_.dispose(); + instancePartitionsBuilder_ = null; + instancePartitions_ = other.instancePartitions_; + bitField0_ = (bitField0_ & ~0x00040000); + instancePartitionsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getInstancePartitionsFieldBuilder() + : null; + } else { + instancePartitionsBuilder_.addAllMessages(other.instancePartitions_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2245,6 +2403,20 @@ public Builder mergeFrom( bitField0_ |= 0x00020000; break; } // case 146 + case 154: + { + com.google.spanner.admin.database.v1.BackupInstancePartition m = + input.readMessage( + com.google.spanner.admin.database.v1.BackupInstancePartition.parser(), + extensionRegistry); + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(m); + } else { + instancePartitionsBuilder_.addMessage(m); + } + break; + } // case 154 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -5721,6 +5893,467 @@ public com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder() { return oldestVersionTimeBuilder_; } + private java.util.List + instancePartitions_ = java.util.Collections.emptyList(); + + private void ensureInstancePartitionsIsMutable() { + if (!((bitField0_ & 0x00040000) != 0)) { + instancePartitions_ = + new java.util.ArrayList( + instancePartitions_); + bitField0_ |= 0x00040000; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + instancePartitionsBuilder_; + + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List + getInstancePartitionsList() { + if (instancePartitionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(instancePartitions_); + } else { + return instancePartitionsBuilder_.getMessageList(); + } + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public int getInstancePartitionsCount() { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.size(); + } else { + return instancePartitionsBuilder_.getCount(); + } + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions( + int index) { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.get(index); + } else { + return instancePartitionsBuilder_.getMessage(index); + } + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setInstancePartitions( + int index, com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.set(index, value); + onChanged(); + } else { + instancePartitionsBuilder_.setMessage(index, value); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setInstancePartitions( + int index, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.set(index, builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(value); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(value); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + int index, com.google.spanner.admin.database.v1.BackupInstancePartition value) { + if (instancePartitionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(index, value); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(index, value); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addInstancePartitions( + int index, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder builderForValue) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.add(index, builderForValue.build()); + onChanged(); + } else { + instancePartitionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder addAllInstancePartitions( + java.lang.Iterable + values) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, instancePartitions_); + onChanged(); + } else { + instancePartitionsBuilder_.addAllMessages(values); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearInstancePartitions() { + if (instancePartitionsBuilder_ == null) { + instancePartitions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00040000); + onChanged(); + } else { + instancePartitionsBuilder_.clear(); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder removeInstancePartitions(int index) { + if (instancePartitionsBuilder_ == null) { + ensureInstancePartitionsIsMutable(); + instancePartitions_.remove(index); + onChanged(); + } else { + instancePartitionsBuilder_.remove(index); + } + return this; + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + getInstancePartitionsBuilder(int index) { + return getInstancePartitionsFieldBuilder().getBuilder(index); + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index) { + if (instancePartitionsBuilder_ == null) { + return instancePartitions_.get(index); + } else { + return instancePartitionsBuilder_.getMessageOrBuilder(index); + } + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List< + ? extends com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + getInstancePartitionsOrBuilderList() { + if (instancePartitionsBuilder_ != null) { + return instancePartitionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(instancePartitions_); + } + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + addInstancePartitionsBuilder() { + return getInstancePartitionsFieldBuilder() + .addBuilder( + com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()); + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.spanner.admin.database.v1.BackupInstancePartition.Builder + addInstancePartitionsBuilder(int index) { + return getInstancePartitionsFieldBuilder() + .addBuilder( + index, + com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()); + } + /** + * + * + *
+     * Output only. The instance partition(s) storing the backup.
+     *
+     * This is the same as the list of the instance partition(s) that the database
+     * had footprint in at the backup's `version_time`.
+     * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public java.util.List + getInstancePartitionsBuilderList() { + return getInstancePartitionsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder> + getInstancePartitionsFieldBuilder() { + if (instancePartitionsBuilder_ == null) { + instancePartitionsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.BackupInstancePartition, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder, + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder>( + instancePartitions_, + ((bitField0_ & 0x00040000) != 0), + getParentForChildren(), + isClean()); + instancePartitions_ = null; + } + return instancePartitionsBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java new file mode 100644 index 00000000000..ad582b34807 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartition.java @@ -0,0 +1,637 @@ +/* + * Copyright 2025 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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/backup.proto + +// Protobuf Java Version: 3.25.5 +package com.google.spanner.admin.database.v1; + +/** + * + * + *
+ * Instance partition information for the backup.
+ * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.BackupInstancePartition} + */ +public final class BackupInstancePartition extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.BackupInstancePartition) + BackupInstancePartitionOrBuilder { + private static final long serialVersionUID = 0L; + // Use BackupInstancePartition.newBuilder() to construct. + private BackupInstancePartition(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private BackupInstancePartition() { + instancePartition_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new BackupInstancePartition(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.BackupInstancePartition.class, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder.class); + } + + public static final int INSTANCE_PARTITION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object instancePartition_ = ""; + /** + * + * + *
+   * A unique identifier for the instance partition. Values are of the form
+   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+   * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + @java.lang.Override + public java.lang.String getInstancePartition() { + java.lang.Object ref = instancePartition_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + instancePartition_ = s; + return s; + } + } + /** + * + * + *
+   * A unique identifier for the instance partition. Values are of the form
+   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+   * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + @java.lang.Override + public com.google.protobuf.ByteString getInstancePartitionBytes() { + java.lang.Object ref = instancePartition_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instancePartition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instancePartition_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, instancePartition_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instancePartition_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, instancePartition_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.BackupInstancePartition)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.BackupInstancePartition other = + (com.google.spanner.admin.database.v1.BackupInstancePartition) obj; + + if (!getInstancePartition().equals(other.getInstancePartition())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + INSTANCE_PARTITION_FIELD_NUMBER; + hash = (53 * hash) + getInstancePartition().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.BackupInstancePartition prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * Instance partition information for the backup.
+   * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.BackupInstancePartition} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.BackupInstancePartition) + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.BackupInstancePartition.class, + com.google.spanner.admin.database.v1.BackupInstancePartition.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.BackupInstancePartition.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + instancePartition_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.BackupProto + .internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition + getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition build() { + com.google.spanner.admin.database.v1.BackupInstancePartition result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition buildPartial() { + com.google.spanner.admin.database.v1.BackupInstancePartition result = + new com.google.spanner.admin.database.v1.BackupInstancePartition(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.spanner.admin.database.v1.BackupInstancePartition result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.instancePartition_ = instancePartition_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.BackupInstancePartition) { + return mergeFrom((com.google.spanner.admin.database.v1.BackupInstancePartition) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.BackupInstancePartition other) { + if (other + == com.google.spanner.admin.database.v1.BackupInstancePartition.getDefaultInstance()) + return this; + if (!other.getInstancePartition().isEmpty()) { + instancePartition_ = other.instancePartition_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + instancePartition_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object instancePartition_ = ""; + /** + * + * + *
+     * A unique identifier for the instance partition. Values are of the form
+     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+     * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + public java.lang.String getInstancePartition() { + java.lang.Object ref = instancePartition_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + instancePartition_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * A unique identifier for the instance partition. Values are of the form
+     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+     * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + public com.google.protobuf.ByteString getInstancePartitionBytes() { + java.lang.Object ref = instancePartition_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + instancePartition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * A unique identifier for the instance partition. Values are of the form
+     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+     * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @param value The instancePartition to set. + * @return This builder for chaining. + */ + public Builder setInstancePartition(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + instancePartition_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * A unique identifier for the instance partition. Values are of the form
+     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+     * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return This builder for chaining. + */ + public Builder clearInstancePartition() { + instancePartition_ = getDefaultInstance().getInstancePartition(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * + * + *
+     * A unique identifier for the instance partition. Values are of the form
+     * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+     * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @param value The bytes for instancePartition to set. + * @return This builder for chaining. + */ + public Builder setInstancePartitionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + instancePartition_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.BackupInstancePartition) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.BackupInstancePartition) + private static final com.google.spanner.admin.database.v1.BackupInstancePartition + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.BackupInstancePartition(); + } + + public static com.google.spanner.admin.database.v1.BackupInstancePartition getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BackupInstancePartition parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.BackupInstancePartition getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java new file mode 100644 index 00000000000..eb1b19816b9 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInstancePartitionOrBuilder.java @@ -0,0 +1,53 @@ +/* + * Copyright 2025 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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/backup.proto + +// Protobuf Java Version: 3.25.5 +package com.google.spanner.admin.database.v1; + +public interface BackupInstancePartitionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.BackupInstancePartition) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * A unique identifier for the instance partition. Values are of the form
+   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+   * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The instancePartition. + */ + java.lang.String getInstancePartition(); + /** + * + * + *
+   * A unique identifier for the instance partition. Values are of the form
+   * `projects/<project>/instances/<instance>/instancePartitions/<instance_partition_id>`
+   * 
+ * + * string instance_partition = 1 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for instancePartition. + */ + com.google.protobuf.ByteString getInstancePartitionBytes(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java index d30141d6fc3..eb90b03212d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java @@ -895,4 +895,83 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInform * */ com.google.protobuf.TimestampOrBuilder getOldestVersionTimeOrBuilder(); + + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + java.util.List + getInstancePartitionsList(); + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.spanner.admin.database.v1.BackupInstancePartition getInstancePartitions(int index); + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + int getInstancePartitionsCount(); + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + java.util.List + getInstancePartitionsOrBuilderList(); + /** + * + * + *
+   * Output only. The instance partition(s) storing the backup.
+   *
+   * This is the same as the list of the instance partition(s) that the database
+   * had footprint in at the backup's `version_time`.
+   * 
+ * + * + * repeated .google.spanner.admin.database.v1.BackupInstancePartition instance_partitions = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.spanner.admin.database.v1.BackupInstancePartitionOrBuilder + getInstancePartitionsOrBuilder(int index); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java index 52bac0ab063..5f04fe540cc 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java @@ -96,6 +96,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { return descriptor; @@ -112,7 +116,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "g/operations.proto\032 google/protobuf/fiel" + "d_mask.proto\032\037google/protobuf/timestamp." + "proto\032-google/spanner/admin/database/v1/" - + "common.proto\"\220\t\n\006Backup\0226\n\010database\030\002 \001(" + + "common.proto\"\355\t\n\006Backup\0226\n\010database\030\002 \001(" + "\tB$\372A!\n\037spanner.googleapis.com/Database\022" + "0\n\014version_time\030\t \001(\0132\032.google.protobuf." + "Timestamp\022/\n\013expire_time\030\003 \001(\0132\032.google." @@ -137,92 +141,97 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\tB-\340A\003\372A\'\n%spanner.googleapis.com/Backup" + "Schedule\022(\n\033incremental_backup_chain_id\030" + "\021 \001(\tB\003\340A\003\022<\n\023oldest_version_time\030\022 \001(\0132" - + "\032.google.protobuf.TimestampB\003\340A\003\"7\n\005Stat" - + "e\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t" - + "\n\005READY\020\002:\\\352AY\n\035spanner.googleapis.com/B" - + "ackup\0228projects/{project}/instances/{ins" - + "tance}/backups/{backup}\"\205\002\n\023CreateBackup" - + "Request\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner" - + ".googleapis.com/Instance\022\026\n\tbackup_id\030\002 " - + "\001(\tB\003\340A\002\022=\n\006backup\030\003 \001(\0132(.google.spanne" - + "r.admin.database.v1.BackupB\003\340A\002\022^\n\021encry" - + "ption_config\030\004 \001(\0132>.google.spanner.admi" - + "n.database.v1.CreateBackupEncryptionConf" - + "igB\003\340A\001\"\370\001\n\024CreateBackupMetadata\0220\n\004name" - + "\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Back" - + "up\0226\n\010database\030\002 \001(\tB$\372A!\n\037spanner.googl" - + "eapis.com/Database\022E\n\010progress\030\003 \001(\01323.g" - + "oogle.spanner.admin.database.v1.Operatio" - + "nProgress\022/\n\013cancel_time\030\004 \001(\0132\032.google." - + "protobuf.Timestamp\"\266\002\n\021CopyBackupRequest" + + "\032.google.protobuf.TimestampB\003\340A\003\022[\n\023inst" + + "ance_partitions\030\023 \003(\01329.google.spanner.a" + + "dmin.database.v1.BackupInstancePartition" + + "B\003\340A\003\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n\005READY\020\002:\\\352AY\n\035spanner.goo" + + "gleapis.com/Backup\0228projects/{project}/i" + + "nstances/{instance}/backups/{backup}\"\205\002\n" + + "\023CreateBackupRequest\0227\n\006parent\030\001 \001(\tB\'\340A" + + "\002\372A!\n\037spanner.googleapis.com/Instance\022\026\n" + + "\tbackup_id\030\002 \001(\tB\003\340A\002\022=\n\006backup\030\003 \001(\0132(." + + "google.spanner.admin.database.v1.BackupB" + + "\003\340A\002\022^\n\021encryption_config\030\004 \001(\0132>.google" + + ".spanner.admin.database.v1.CreateBackupE" + + "ncryptionConfigB\003\340A\001\"\370\001\n\024CreateBackupMet" + + "adata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.google" + + "apis.com/Backup\0226\n\010database\030\002 \001(\tB$\372A!\n\037" + + "spanner.googleapis.com/Database\022E\n\010progr" + + "ess\030\003 \001(\01323.google.spanner.admin.databas" + + "e.v1.OperationProgress\022/\n\013cancel_time\030\004 " + + "\001(\0132\032.google.protobuf.Timestamp\"\266\002\n\021Copy" + + "BackupRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037s" + + "panner.googleapis.com/Instance\022\026\n\tbackup" + + "_id\030\002 \001(\tB\003\340A\002\022<\n\rsource_backup\030\003 \001(\tB%\340" + + "A\002\372A\037\n\035spanner.googleapis.com/Backup\0224\n\013" + + "expire_time\030\004 \001(\0132\032.google.protobuf.Time" + + "stampB\003\340A\002\022\\\n\021encryption_config\030\005 \001(\0132<." + + "google.spanner.admin.database.v1.CopyBac" + + "kupEncryptionConfigB\003\340A\001\"\371\001\n\022CopyBackupM" + + "etadata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.goog" + + "leapis.com/Backup\0229\n\rsource_backup\030\002 \001(\t" + + "B\"\372A\037\n\035spanner.googleapis.com/Backup\022E\n\010" + + "progress\030\003 \001(\01323.google.spanner.admin.da" + + "tabase.v1.OperationProgress\022/\n\013cancel_ti" + + "me\030\004 \001(\0132\032.google.protobuf.Timestamp\"\212\001\n" + + "\023UpdateBackupRequest\022=\n\006backup\030\001 \001(\0132(.g" + + "oogle.spanner.admin.database.v1.BackupB\003" + + "\340A\002\0224\n\013update_mask\030\002 \001(\0132\032.google.protob" + + "uf.FieldMaskB\003\340A\002\"G\n\020GetBackupRequest\0223\n" + + "\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis." + + "com/Backup\"J\n\023DeleteBackupRequest\0223\n\004nam" + + "e\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis.com/" + + "Backup\"\204\001\n\022ListBackupsRequest\0227\n\006parent\030" + + "\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/In" + + "stance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(" + + "\005\022\022\n\npage_token\030\004 \001(\t\"i\n\023ListBackupsResp" + + "onse\0229\n\007backups\030\001 \003(\0132(.google.spanner.a" + + "dmin.database.v1.Backup\022\027\n\017next_page_tok" + + "en\030\002 \001(\t\"\215\001\n\033ListBackupOperationsRequest" + "\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.google" - + "apis.com/Instance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A" - + "\002\022<\n\rsource_backup\030\003 \001(\tB%\340A\002\372A\037\n\035spanne" - + "r.googleapis.com/Backup\0224\n\013expire_time\030\004" - + " \001(\0132\032.google.protobuf.TimestampB\003\340A\002\022\\\n" - + "\021encryption_config\030\005 \001(\0132<.google.spanne" - + "r.admin.database.v1.CopyBackupEncryption" - + "ConfigB\003\340A\001\"\371\001\n\022CopyBackupMetadata\0220\n\004na" - + "me\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Ba" - + "ckup\0229\n\rsource_backup\030\002 \001(\tB\"\372A\037\n\035spanne" - + "r.googleapis.com/Backup\022E\n\010progress\030\003 \001(" - + "\01323.google.spanner.admin.database.v1.Ope" - + "rationProgress\022/\n\013cancel_time\030\004 \001(\0132\032.go" - + "ogle.protobuf.Timestamp\"\212\001\n\023UpdateBackup" - + "Request\022=\n\006backup\030\001 \001(\0132(.google.spanner" - + ".admin.database.v1.BackupB\003\340A\002\0224\n\013update" - + "_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB" - + "\003\340A\002\"G\n\020GetBackupRequest\0223\n\004name\030\001 \001(\tB%" - + "\340A\002\372A\037\n\035spanner.googleapis.com/Backup\"J\n" - + "\023DeleteBackupRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372" - + "A\037\n\035spanner.googleapis.com/Backup\"\204\001\n\022Li" - + "stBackupsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!" - + "\n\037spanner.googleapis.com/Instance\022\016\n\006fil" - + "ter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_tok" - + "en\030\004 \001(\t\"i\n\023ListBackupsResponse\0229\n\007backu" - + "ps\030\001 \003(\0132(.google.spanner.admin.database" - + ".v1.Backup\022\027\n\017next_page_token\030\002 \001(\t\"\215\001\n\033" - + "ListBackupOperationsRequest\0227\n\006parent\030\001 " - + "\001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Inst" - + "ance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022" - + "\022\n\npage_token\030\004 \001(\t\"j\n\034ListBackupOperati" - + "onsResponse\0221\n\noperations\030\001 \003(\0132\035.google" - + ".longrunning.Operation\022\027\n\017next_page_toke" - + "n\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006backup\030\001 \001(\tB\"" - + "\372A\037\n\035spanner.googleapis.com/Backup\0220\n\014ve" - + "rsion_time\030\004 \001(\0132\032.google.protobuf.Times" - + "tamp\022/\n\013create_time\030\002 \001(\0132\032.google.proto" - + "buf.Timestamp\022=\n\017source_database\030\003 \001(\tB$" - + "\372A!\n\037spanner.googleapis.com/Database\"\237\003\n" - + "\034CreateBackupEncryptionConfig\022k\n\017encrypt" - + "ion_type\030\001 \001(\0162M.google.spanner.admin.da" - + "tabase.v1.CreateBackupEncryptionConfig.E" - + "ncryptionTypeB\003\340A\002\022?\n\014kms_key_name\030\002 \001(\t" - + "B)\340A\001\372A#\n!cloudkms.googleapis.com/Crypto" - + "Key\022@\n\rkms_key_names\030\003 \003(\tB)\340A\001\372A#\n!clou" - + "dkms.googleapis.com/CryptoKey\"\216\001\n\016Encryp" - + "tionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED\020" - + "\000\022\033\n\027USE_DATABASE_ENCRYPTION\020\001\022\035\n\031GOOGLE" - + "_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGE" - + "D_ENCRYPTION\020\003\"\253\003\n\032CopyBackupEncryptionC" - + "onfig\022i\n\017encryption_type\030\001 \001(\0162K.google." - + "spanner.admin.database.v1.CopyBackupEncr" - + "yptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms_" - + "key_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.googlea" - + "pis.com/CryptoKey\022@\n\rkms_key_names\030\003 \003(\t" - + "B)\340A\001\372A#\n!cloudkms.googleapis.com/Crypto" - + "Key\"\236\001\n\016EncryptionType\022\037\n\033ENCRYPTION_TYP" - + "E_UNSPECIFIED\020\000\022+\n\'USE_CONFIG_DEFAULT_OR" - + "_BACKUP_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT_E" - + "NCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYPTI" - + "ON\020\003\"\020\n\016FullBackupSpec\"\027\n\025IncrementalBac" - + "kupSpecB\375\001\n$com.google.spanner.admin.dat" - + "abase.v1B\013BackupProtoP\001ZFcloud.google.co" - + "m/go/spanner/admin/database/apiv1/databa" - + "sepb;databasepb\252\002&Google.Cloud.Spanner.A" - + "dmin.Database.V1\312\002&Google\\Cloud\\Spanner\\" - + "Admin\\Database\\V1\352\002+Google::Cloud::Spann" - + "er::Admin::Database::V1b\006proto3" + + "apis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpag" + + "e_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"j\n\034List" + + "BackupOperationsResponse\0221\n\noperations\030\001" + + " \003(\0132\035.google.longrunning.Operation\022\027\n\017n" + + "ext_page_token\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006b" + + "ackup\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com" + + "/Backup\0220\n\014version_time\030\004 \001(\0132\032.google.p" + + "rotobuf.Timestamp\022/\n\013create_time\030\002 \001(\0132\032" + + ".google.protobuf.Timestamp\022=\n\017source_dat" + + "abase\030\003 \001(\tB$\372A!\n\037spanner.googleapis.com" + + "/Database\"\237\003\n\034CreateBackupEncryptionConf" + + "ig\022k\n\017encryption_type\030\001 \001(\0162M.google.spa" + + "nner.admin.database.v1.CreateBackupEncry" + + "ptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms_k" + + "ey_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.googleap" + + "is.com/CryptoKey\022@\n\rkms_key_names\030\003 \003(\tB" + + ")\340A\001\372A#\n!cloudkms.googleapis.com/CryptoK" + + "ey\"\216\001\n\016EncryptionType\022\037\n\033ENCRYPTION_TYPE" + + "_UNSPECIFIED\020\000\022\033\n\027USE_DATABASE_ENCRYPTIO" + + "N\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CU" + + "STOMER_MANAGED_ENCRYPTION\020\003\"\253\003\n\032CopyBack" + + "upEncryptionConfig\022i\n\017encryption_type\030\001 " + + "\001(\0162K.google.spanner.admin.database.v1.C" + + "opyBackupEncryptionConfig.EncryptionType" + + "B\003\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!clo" + + "udkms.googleapis.com/CryptoKey\022@\n\rkms_ke" + + "y_names\030\003 \003(\tB)\340A\001\372A#\n!cloudkms.googleap" + + "is.com/CryptoKey\"\236\001\n\016EncryptionType\022\037\n\033E" + + "NCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CONF" + + "IG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031GOO" + + "GLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MAN" + + "AGED_ENCRYPTION\020\003\"\020\n\016FullBackupSpec\"\027\n\025I" + + "ncrementalBackupSpec\"d\n\027BackupInstancePa" + + "rtition\022I\n\022instance_partition\030\001 \001(\tB-\372A*" + + "\n(spanner.googleapis.com/InstancePartiti" + + "onB\375\001\n$com.google.spanner.admin.database" + + ".v1B\013BackupProtoP\001ZFcloud.google.com/go/" + + "spanner/admin/database/apiv1/databasepb;" + + "databasepb\252\002&Google.Cloud.Spanner.Admin." + + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin" + + "\\Database\\V1\352\002+Google::Cloud::Spanner::A" + + "dmin::Database::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -259,6 +268,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "BackupSchedules", "IncrementalBackupChainId", "OldestVersionTime", + "InstancePartitions", }); internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor = getDescriptor().getMessageTypes().get(1); @@ -384,6 +394,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_IncrementalBackupSpec_descriptor, new java.lang.String[] {}); + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor = + getDescriptor().getMessageTypes().get(17); + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_BackupInstancePartition_descriptor, + new java.lang.String[] { + "InstancePartition", + }); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java index 06a130a7002..7b9974f3e76 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java @@ -461,7 +461,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "ackupSchedules\032x\312A\026spanner.googleapis.co" + "m\322A\\https://www.googleapis.com/auth/clou" + "d-platform,https://www.googleapis.com/au" - + "th/spanner.adminB\330\002\n$com.google.spanner." + + "th/spanner.adminB\326\003\n$com.google.spanner." + "admin.database.v1B\031SpannerDatabaseAdminP" + "rotoP\001ZFcloud.google.com/go/spanner/admi" + "n/database/apiv1/databasepb;databasepb\252\002" @@ -470,7 +470,10 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\352\002+Google::Cloud::Spanner::Admin::Databa" + "se::V1\352AJ\n\037spanner.googleapis.com/Instan" + "ce\022\'projects/{project}/instances/{instan" - + "ce}b\006proto3" + + "ce}\352A{\n(spanner.googleapis.com/InstanceP" + + "artition\022Oprojects/{project}/instances/{" + + "instance}/instancePartitions/{instance_p" + + "artition}b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto index f3473f4eabf..54a7be3e33d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto @@ -207,6 +207,13 @@ message Backup { // retained by the backup system. google.protobuf.Timestamp oldest_version_time = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The instance partition(s) storing the backup. + // + // This is the same as the list of the instance partition(s) that the database + // had footprint in at the backup's `version_time`. + repeated BackupInstancePartition instance_partitions = 19 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // The request for @@ -755,3 +762,12 @@ message FullBackupSpec {} // successive incremental backups. The first backup created for an // incremental backup chain is always a full backup. message IncrementalBackupSpec {} + +// Instance partition information for the backup. +message BackupInstancePartition { + // A unique identifier for the instance partition. Values are of the form + // `projects//instances//instancePartitions/` + string instance_partition = 1 [(google.api.resource_reference) = { + type: "spanner.googleapis.com/InstancePartition" + }]; +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto index 27e3206293e..125196fe9bf 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto @@ -42,6 +42,10 @@ option (google.api.resource_definition) = { type: "spanner.googleapis.com/Instance" pattern: "projects/{project}/instances/{instance}" }; +option (google.api.resource_definition) = { + type: "spanner.googleapis.com/InstancePartition" + pattern: "projects/{project}/instances/{instance}/instancePartitions/{instance_partition}" +}; // Cloud Spanner Database Admin API // diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java index a12a8ebdb42..25e1a63c58f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java @@ -361,7 +361,9 @@ private TransactionOptions(com.google.protobuf.GeneratedMessageV3.Builder bui super(builder); } - private TransactionOptions() {} + private TransactionOptions() { + isolationLevel_ = 0; + } @java.lang.Override @SuppressWarnings({"unused"}) @@ -384,6 +386,203 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.spanner.v1.TransactionOptions.Builder.class); } + /** + * + * + *
+   * `IsolationLevel` is used when setting `isolation_level` for a transaction.
+   * 
+ * + * Protobuf enum {@code google.spanner.v1.TransactionOptions.IsolationLevel} + */ + public enum IsolationLevel implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value.
+     *
+     * If the value is not specified, the `SERIALIZABLE` isolation level is
+     * used.
+     * 
+ * + * ISOLATION_LEVEL_UNSPECIFIED = 0; + */ + ISOLATION_LEVEL_UNSPECIFIED(0), + /** + * + * + *
+     * All transactions appear as if they executed in a serial order, even if
+     * some of the reads, writes, and other operations of distinct transactions
+     * actually occurred in parallel. Spanner assigns commit timestamps that
+     * reflect the order of committed transactions to implement this property.
+     * Spanner offers a stronger guarantee than serializability called external
+     * consistency. For further details, please refer to
+     * https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability.
+     * 
+ * + * SERIALIZABLE = 1; + */ + SERIALIZABLE(1), + /** + * + * + *
+     * All reads performed during the transaction observe a consistent snapshot
+     * of the database, and the transaction will only successfully commit in the
+     * absence of conflicts between its updates and any concurrent updates that
+     * have occurred since that snapshot. Consequently, in contrast to
+     * `SERIALIZABLE` transactions, only write-write conflicts are detected in
+     * snapshot transactions.
+     *
+     * This isolation level does not support Read-only and Partitioned DML
+     * transactions.
+     *
+     * When `REPEATABLE_READ` is specified on a read-write transaction, the
+     * locking semantics default to `OPTIMISTIC`.
+     * 
+ * + * REPEATABLE_READ = 2; + */ + REPEATABLE_READ(2), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
+     * Default value.
+     *
+     * If the value is not specified, the `SERIALIZABLE` isolation level is
+     * used.
+     * 
+ * + * ISOLATION_LEVEL_UNSPECIFIED = 0; + */ + public static final int ISOLATION_LEVEL_UNSPECIFIED_VALUE = 0; + /** + * + * + *
+     * All transactions appear as if they executed in a serial order, even if
+     * some of the reads, writes, and other operations of distinct transactions
+     * actually occurred in parallel. Spanner assigns commit timestamps that
+     * reflect the order of committed transactions to implement this property.
+     * Spanner offers a stronger guarantee than serializability called external
+     * consistency. For further details, please refer to
+     * https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability.
+     * 
+ * + * SERIALIZABLE = 1; + */ + public static final int SERIALIZABLE_VALUE = 1; + /** + * + * + *
+     * All reads performed during the transaction observe a consistent snapshot
+     * of the database, and the transaction will only successfully commit in the
+     * absence of conflicts between its updates and any concurrent updates that
+     * have occurred since that snapshot. Consequently, in contrast to
+     * `SERIALIZABLE` transactions, only write-write conflicts are detected in
+     * snapshot transactions.
+     *
+     * This isolation level does not support Read-only and Partitioned DML
+     * transactions.
+     *
+     * When `REPEATABLE_READ` is specified on a read-write transaction, the
+     * locking semantics default to `OPTIMISTIC`.
+     * 
+ * + * REPEATABLE_READ = 2; + */ + public static final int REPEATABLE_READ_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static IsolationLevel valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static IsolationLevel forNumber(int value) { + switch (value) { + case 0: + return ISOLATION_LEVEL_UNSPECIFIED; + case 1: + return SERIALIZABLE; + case 2: + return REPEATABLE_READ; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public IsolationLevel findValueByNumber(int number) { + return IsolationLevel.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.v1.TransactionOptions.getDescriptor().getEnumTypes().get(0); + } + + private static final IsolationLevel[] VALUES = values(); + + public static IsolationLevel valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private IsolationLevel(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.v1.TransactionOptions.IsolationLevel) + } + public interface ReadWriteOrBuilder extends // @@protoc_insertion_point(interface_extends:google.spanner.v1.TransactionOptions.ReadWrite) @@ -496,7 +695,17 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { *
        * Default value.
        *
-       * If the value is not specified, the pessimistic read lock is used.
+       * * If isolation level is `REPEATABLE_READ`, then it is an error to
+       *   specify `read_lock_mode`. Locking semantics default to `OPTIMISTIC`.
+       *   No validation checks are done for reads, except for:
+       *     1. reads done as part of queries that use `SELECT FOR UPDATE`
+       *     2. reads done as part of statements with a `LOCK_SCANNED_RANGES`
+       *        hint
+       *     3. reads done as part of DML statements
+       *   to validate that the data that was served at the snapshot time is
+       *   unchanged at commit time.
+       * * At all other isolation levels, if `read_lock_mode` is the default
+       *   value, then pessimistic read lock is used.
        * 
* * READ_LOCK_MODE_UNSPECIFIED = 0; @@ -509,6 +718,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * Pessimistic lock mode. * * Read locks are acquired immediately on read. + * Semantics described only applies to `SERIALIZABLE` isolation. * * * PESSIMISTIC = 1; @@ -523,6 +733,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * Locks for reads within the transaction are not acquired on read. * Instead the locks are acquired on a commit to validate that * read/queried data has not changed since the transaction started. + * Semantics described only applies to `SERIALIZABLE` isolation. * * * OPTIMISTIC = 2; @@ -537,7 +748,17 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { *
        * Default value.
        *
-       * If the value is not specified, the pessimistic read lock is used.
+       * * If isolation level is `REPEATABLE_READ`, then it is an error to
+       *   specify `read_lock_mode`. Locking semantics default to `OPTIMISTIC`.
+       *   No validation checks are done for reads, except for:
+       *     1. reads done as part of queries that use `SELECT FOR UPDATE`
+       *     2. reads done as part of statements with a `LOCK_SCANNED_RANGES`
+       *        hint
+       *     3. reads done as part of DML statements
+       *   to validate that the data that was served at the snapshot time is
+       *   unchanged at commit time.
+       * * At all other isolation levels, if `read_lock_mode` is the default
+       *   value, then pessimistic read lock is used.
        * 
* * READ_LOCK_MODE_UNSPECIFIED = 0; @@ -550,6 +771,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * Pessimistic lock mode. * * Read locks are acquired immediately on read. + * Semantics described only applies to `SERIALIZABLE` isolation. * * * PESSIMISTIC = 1; @@ -564,6 +786,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * Locks for reads within the transaction are not acquired on read. * Instead the locks are acquired on a commit to validate that * read/queried data has not changed since the transaction started. + * Semantics described only applies to `SERIALIZABLE` isolation. * * * OPTIMISTIC = 2; @@ -4777,6 +5000,43 @@ public boolean getExcludeTxnFromChangeStreams() { return excludeTxnFromChangeStreams_; } + public static final int ISOLATION_LEVEL_FIELD_NUMBER = 6; + private int isolationLevel_ = 0; + /** + * + * + *
+   * Isolation level for the transaction.
+   * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ + @java.lang.Override + public int getIsolationLevelValue() { + return isolationLevel_; + } + /** + * + * + *
+   * Isolation level for the transaction.
+   * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ + @java.lang.Override + public com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel() { + com.google.spanner.v1.TransactionOptions.IsolationLevel result = + com.google.spanner.v1.TransactionOptions.IsolationLevel.forNumber(isolationLevel_); + return result == null + ? com.google.spanner.v1.TransactionOptions.IsolationLevel.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -4803,6 +5063,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (excludeTxnFromChangeStreams_ != false) { output.writeBool(5, excludeTxnFromChangeStreams_); } + if (isolationLevel_ + != com.google.spanner.v1.TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + .getNumber()) { + output.writeEnum(6, isolationLevel_); + } getUnknownFields().writeTo(output); } @@ -4831,6 +5096,11 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, excludeTxnFromChangeStreams_); } + if (isolationLevel_ + != com.google.spanner.v1.TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(6, isolationLevel_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -4847,6 +5117,7 @@ public boolean equals(final java.lang.Object obj) { com.google.spanner.v1.TransactionOptions other = (com.google.spanner.v1.TransactionOptions) obj; if (getExcludeTxnFromChangeStreams() != other.getExcludeTxnFromChangeStreams()) return false; + if (isolationLevel_ != other.isolationLevel_) return false; if (!getModeCase().equals(other.getModeCase())) return false; switch (modeCase_) { case 1: @@ -4874,6 +5145,8 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + EXCLUDE_TXN_FROM_CHANGE_STREAMS_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getExcludeTxnFromChangeStreams()); + hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER; + hash = (53 * hash) + isolationLevel_; switch (modeCase_) { case 1: hash = (37 * hash) + READ_WRITE_FIELD_NUMBER; @@ -5362,6 +5635,7 @@ public Builder clear() { readOnlyBuilder_.clear(); } excludeTxnFromChangeStreams_ = false; + isolationLevel_ = 0; modeCase_ = 0; mode_ = null; return this; @@ -5404,6 +5678,9 @@ private void buildPartial0(com.google.spanner.v1.TransactionOptions result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.excludeTxnFromChangeStreams_ = excludeTxnFromChangeStreams_; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.isolationLevel_ = isolationLevel_; + } } private void buildPartialOneofs(com.google.spanner.v1.TransactionOptions result) { @@ -5468,6 +5745,9 @@ public Builder mergeFrom(com.google.spanner.v1.TransactionOptions other) { if (other.getExcludeTxnFromChangeStreams() != false) { setExcludeTxnFromChangeStreams(other.getExcludeTxnFromChangeStreams()); } + if (other.isolationLevel_ != 0) { + setIsolationLevelValue(other.getIsolationLevelValue()); + } switch (other.getModeCase()) { case READ_WRITE: { @@ -5539,6 +5819,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000008; break; } // case 40 + case 48: + { + isolationLevel_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 48 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -6404,6 +6690,99 @@ public Builder clearExcludeTxnFromChangeStreams() { return this; } + private int isolationLevel_ = 0; + /** + * + * + *
+     * Isolation level for the transaction.
+     * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ + @java.lang.Override + public int getIsolationLevelValue() { + return isolationLevel_; + } + /** + * + * + *
+     * Isolation level for the transaction.
+     * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @param value The enum numeric value on the wire for isolationLevel to set. + * @return This builder for chaining. + */ + public Builder setIsolationLevelValue(int value) { + isolationLevel_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * + * + *
+     * Isolation level for the transaction.
+     * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ + @java.lang.Override + public com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel() { + com.google.spanner.v1.TransactionOptions.IsolationLevel result = + com.google.spanner.v1.TransactionOptions.IsolationLevel.forNumber(isolationLevel_); + return result == null + ? com.google.spanner.v1.TransactionOptions.IsolationLevel.UNRECOGNIZED + : result; + } + /** + * + * + *
+     * Isolation level for the transaction.
+     * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @param value The isolationLevel to set. + * @return This builder for chaining. + */ + public Builder setIsolationLevel( + com.google.spanner.v1.TransactionOptions.IsolationLevel value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + isolationLevel_ = value.getNumber(); + onChanged(); + return this; + } + /** + * + * + *
+     * Isolation level for the transaction.
+     * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return This builder for chaining. + */ + public Builder clearIsolationLevel() { + bitField0_ = (bitField0_ & ~0x00000010); + isolationLevel_ = 0; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java index fff95012eed..07566e10592 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java @@ -191,5 +191,30 @@ public interface TransactionOptionsOrBuilder */ boolean getExcludeTxnFromChangeStreams(); + /** + * + * + *
+   * Isolation level for the transaction.
+   * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The enum numeric value on the wire for isolationLevel. + */ + int getIsolationLevelValue(); + /** + * + * + *
+   * Isolation level for the transaction.
+   * 
+ * + * .google.spanner.v1.TransactionOptions.IsolationLevel isolation_level = 6; + * + * @return The isolationLevel. + */ + com.google.spanner.v1.TransactionOptions.IsolationLevel getIsolationLevel(); + com.google.spanner.v1.TransactionOptions.ModeCase getModeCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java index 4e94598f9b1..7c8b6760bdc 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java @@ -68,43 +68,48 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "\n#google/spanner/v1/transaction.proto\022\021g" + "oogle.spanner.v1\032\037google/api/field_behav" + "ior.proto\032\036google/protobuf/duration.prot" - + "o\032\037google/protobuf/timestamp.proto\"\316\006\n\022T" + + "o\032\037google/protobuf/timestamp.proto\"\367\007\n\022T" + "ransactionOptions\022E\n\nread_write\030\001 \001(\0132/." + "google.spanner.v1.TransactionOptions.Rea" + "dWriteH\000\022O\n\017partitioned_dml\030\003 \001(\01324.goog" + "le.spanner.v1.TransactionOptions.Partiti" + "onedDmlH\000\022C\n\tread_only\030\002 \001(\0132..google.sp" + "anner.v1.TransactionOptions.ReadOnlyH\000\022\'" - + "\n\037exclude_txn_from_change_streams\030\005 \001(\010\032" - + "\354\001\n\tReadWrite\022T\n\016read_lock_mode\030\001 \001(\0162<." - + "google.spanner.v1.TransactionOptions.Rea" - + "dWrite.ReadLockMode\0228\n+multiplexed_sessi" - + "on_previous_transaction_id\030\002 \001(\014B\003\340A\001\"O\n" - + "\014ReadLockMode\022\036\n\032READ_LOCK_MODE_UNSPECIF" - + "IED\020\000\022\017\n\013PESSIMISTIC\020\001\022\016\n\nOPTIMISTIC\020\002\032\020" - + "\n\016PartitionedDml\032\250\002\n\010ReadOnly\022\020\n\006strong\030" - + "\001 \001(\010H\000\0228\n\022min_read_timestamp\030\002 \001(\0132\032.go" - + "ogle.protobuf.TimestampH\000\0222\n\rmax_stalene" - + "ss\030\003 \001(\0132\031.google.protobuf.DurationH\000\0224\n" - + "\016read_timestamp\030\004 \001(\0132\032.google.protobuf." - + "TimestampH\000\0224\n\017exact_staleness\030\005 \001(\0132\031.g" - + "oogle.protobuf.DurationH\000\022\035\n\025return_read" - + "_timestamp\030\006 \001(\010B\021\n\017timestamp_boundB\006\n\004m" - + "ode\"\233\001\n\013Transaction\022\n\n\002id\030\001 \001(\014\0222\n\016read_" - + "timestamp\030\002 \001(\0132\032.google.protobuf.Timest" - + "amp\022L\n\017precommit_token\030\003 \001(\01323.google.sp" - + "anner.v1.MultiplexedSessionPrecommitToke" - + "n\"\244\001\n\023TransactionSelector\022;\n\nsingle_use\030" - + "\001 \001(\0132%.google.spanner.v1.TransactionOpt" - + "ionsH\000\022\014\n\002id\030\002 \001(\014H\000\0226\n\005begin\030\003 \001(\0132%.go" - + "ogle.spanner.v1.TransactionOptionsH\000B\n\n\010" - + "selector\"L\n MultiplexedSessionPrecommitT" - + "oken\022\027\n\017precommit_token\030\001 \001(\014\022\017\n\007seq_num" - + "\030\002 \001(\005B\263\001\n\025com.google.spanner.v1B\020Transa" - + "ctionProtoP\001Z5cloud.google.com/go/spanne" - + "r/apiv1/spannerpb;spannerpb\252\002\027Google.Clo" - + "ud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352" - + "\002\032Google::Cloud::Spanner::V1b\006proto3" + + "\n\037exclude_txn_from_change_streams\030\005 \001(\010\022" + + "M\n\017isolation_level\030\006 \001(\01624.google.spanne" + + "r.v1.TransactionOptions.IsolationLevel\032\354" + + "\001\n\tReadWrite\022T\n\016read_lock_mode\030\001 \001(\0162<.g" + + "oogle.spanner.v1.TransactionOptions.Read" + + "Write.ReadLockMode\0228\n+multiplexed_sessio" + + "n_previous_transaction_id\030\002 \001(\014B\003\340A\001\"O\n\014" + + "ReadLockMode\022\036\n\032READ_LOCK_MODE_UNSPECIFI" + + "ED\020\000\022\017\n\013PESSIMISTIC\020\001\022\016\n\nOPTIMISTIC\020\002\032\020\n" + + "\016PartitionedDml\032\250\002\n\010ReadOnly\022\020\n\006strong\030\001" + + " \001(\010H\000\0228\n\022min_read_timestamp\030\002 \001(\0132\032.goo" + + "gle.protobuf.TimestampH\000\0222\n\rmax_stalenes" + + "s\030\003 \001(\0132\031.google.protobuf.DurationH\000\0224\n\016" + + "read_timestamp\030\004 \001(\0132\032.google.protobuf.T" + + "imestampH\000\0224\n\017exact_staleness\030\005 \001(\0132\031.go" + + "ogle.protobuf.DurationH\000\022\035\n\025return_read_" + + "timestamp\030\006 \001(\010B\021\n\017timestamp_bound\"X\n\016Is" + + "olationLevel\022\037\n\033ISOLATION_LEVEL_UNSPECIF" + + "IED\020\000\022\020\n\014SERIALIZABLE\020\001\022\023\n\017REPEATABLE_RE" + + "AD\020\002B\006\n\004mode\"\233\001\n\013Transaction\022\n\n\002id\030\001 \001(\014" + + "\0222\n\016read_timestamp\030\002 \001(\0132\032.google.protob" + + "uf.Timestamp\022L\n\017precommit_token\030\003 \001(\01323." + + "google.spanner.v1.MultiplexedSessionPrec" + + "ommitToken\"\244\001\n\023TransactionSelector\022;\n\nsi" + + "ngle_use\030\001 \001(\0132%.google.spanner.v1.Trans" + + "actionOptionsH\000\022\014\n\002id\030\002 \001(\014H\000\0226\n\005begin\030\003" + + " \001(\0132%.google.spanner.v1.TransactionOpti" + + "onsH\000B\n\n\010selector\"L\n MultiplexedSessionP" + + "recommitToken\022\027\n\017precommit_token\030\001 \001(\014\022\017" + + "\n\007seq_num\030\002 \001(\005B\263\001\n\025com.google.spanner.v" + + "1B\020TransactionProtoP\001Z5cloud.google.com/" + + "go/spanner/apiv1/spannerpb;spannerpb\252\002\027G" + + "oogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Sp" + + "anner\\V1\352\002\032Google::Cloud::Spanner::V1b\006p" + + "roto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -120,7 +125,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_v1_TransactionOptions_descriptor, new java.lang.String[] { - "ReadWrite", "PartitionedDml", "ReadOnly", "ExcludeTxnFromChangeStreams", "Mode", + "ReadWrite", + "PartitionedDml", + "ReadOnly", + "ExcludeTxnFromChangeStreams", + "IsolationLevel", + "Mode", }); internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor = internal_static_google_spanner_v1_TransactionOptions_descriptor.getNestedTypes().get(0); diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto index fe564538466..dced12c1093 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/transaction.proto @@ -361,12 +361,23 @@ message TransactionOptions { enum ReadLockMode { // Default value. // - // If the value is not specified, the pessimistic read lock is used. + // * If isolation level is `REPEATABLE_READ`, then it is an error to + // specify `read_lock_mode`. Locking semantics default to `OPTIMISTIC`. + // No validation checks are done for reads, except for: + // 1. reads done as part of queries that use `SELECT FOR UPDATE` + // 2. reads done as part of statements with a `LOCK_SCANNED_RANGES` + // hint + // 3. reads done as part of DML statements + // to validate that the data that was served at the snapshot time is + // unchanged at commit time. + // * At all other isolation levels, if `read_lock_mode` is the default + // value, then pessimistic read lock is used. READ_LOCK_MODE_UNSPECIFIED = 0; // Pessimistic lock mode. // // Read locks are acquired immediately on read. + // Semantics described only applies to `SERIALIZABLE` isolation. PESSIMISTIC = 1; // Optimistic lock mode. @@ -374,6 +385,7 @@ message TransactionOptions { // Locks for reads within the transaction are not acquired on read. // Instead the locks are acquired on a commit to validate that // read/queried data has not changed since the transaction started. + // Semantics described only applies to `SERIALIZABLE` isolation. OPTIMISTIC = 2; } @@ -461,6 +473,38 @@ message TransactionOptions { bool return_read_timestamp = 6; } + // `IsolationLevel` is used when setting `isolation_level` for a transaction. + enum IsolationLevel { + // Default value. + // + // If the value is not specified, the `SERIALIZABLE` isolation level is + // used. + ISOLATION_LEVEL_UNSPECIFIED = 0; + + // All transactions appear as if they executed in a serial order, even if + // some of the reads, writes, and other operations of distinct transactions + // actually occurred in parallel. Spanner assigns commit timestamps that + // reflect the order of committed transactions to implement this property. + // Spanner offers a stronger guarantee than serializability called external + // consistency. For further details, please refer to + // https://cloud.google.com/spanner/docs/true-time-external-consistency#serializability. + SERIALIZABLE = 1; + + // All reads performed during the transaction observe a consistent snapshot + // of the database, and the transaction will only successfully commit in the + // absence of conflicts between its updates and any concurrent updates that + // have occurred since that snapshot. Consequently, in contrast to + // `SERIALIZABLE` transactions, only write-write conflicts are detected in + // snapshot transactions. + // + // This isolation level does not support Read-only and Partitioned DML + // transactions. + // + // When `REPEATABLE_READ` is specified on a read-write transaction, the + // locking semantics default to `OPTIMISTIC`. + REPEATABLE_READ = 2; + } + // Required. The type of transaction. oneof mode { // Transaction may write. @@ -500,6 +544,9 @@ message TransactionOptions { // partitioned-dml transactions, otherwise the API will return an // `INVALID_ARGUMENT` error. bool exclude_txn_from_change_streams = 5; + + // Isolation level for the transaction. + IsolationLevel isolation_level = 6; } // A transaction.