Skip to content

Commit 7f6b158

Browse files
fix: copy backup issue when backup is done across different instance IDs (#2732)
* fix: prevent illegal negative timeout values into thread sleep() method while retrying exceptions in unit tests. * For details on issue see - #2206 * Fixing lint issues. * fix: reproduce issue with copy backup. * fix: copy backup issue when backup is done across different instance IDs. * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 8618042 commit 7f6b158

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/BackupInfo.java

-3
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,6 @@ public Builder setVersionTime(Timestamp versionTime) {
156156

157157
@Override
158158
public Builder setDatabase(DatabaseId database) {
159-
Preconditions.checkArgument(
160-
database.getInstanceId().equals(id.getInstanceId()),
161-
"The instance of the source database must be equal to the instance of the backup.");
162159
this.database = Preconditions.checkNotNull(database);
163160
return this;
164161
}

google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java

+36
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
public class DatabaseAdminClientImplTest {
7474
private static final String PROJECT_ID = "my-project";
7575
private static final String INSTANCE_ID = "my-instance";
76+
private static final String INSTANCE_ID_2 = "my-instance-2";
7677
private static final String INSTANCE_NAME = "projects/my-project/instances/my-instance";
7778
private static final String DB_ID = "my-db";
7879
private static final String DB_NAME = "projects/my-project/instances/my-instance/databases/my-db";
@@ -591,6 +592,41 @@ public void copyBackupWithBackupObject() throws ExecutionException, InterruptedE
591592
assertThat(op.get().getId().getName()).isEqualTo(BK_NAME);
592593
}
593594

595+
@Test
596+
public void copyBackupWithBackupObject_onDifferentInstances()
597+
throws ExecutionException, InterruptedException {
598+
Backup testProto =
599+
Backup.newBuilder()
600+
.setName(BK_NAME)
601+
.setDatabase("projects/my-project/instances/my-instance-2/databases/my-db")
602+
.setState(Backup.State.READY)
603+
.build();
604+
final OperationFuture<Backup, CopyBackupMetadata> rawOperationFuture =
605+
OperationFutureUtil.immediateOperationFuture(
606+
"copyBackup", testProto, CopyBackupMetadata.getDefaultInstance());
607+
final Timestamp expireTime =
608+
Timestamp.ofTimeMicroseconds(
609+
TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis())
610+
+ TimeUnit.HOURS.toMicros(28));
611+
final Timestamp versionTime =
612+
Timestamp.ofTimeMicroseconds(
613+
TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()) - TimeUnit.DAYS.toMicros(2));
614+
final com.google.cloud.spanner.Backup requestBackup =
615+
client
616+
.newBackupBuilder(BackupId.of(PROJECT_ID, INSTANCE_ID_2, BK_ID))
617+
.setExpireTime(expireTime)
618+
.setVersionTime(versionTime)
619+
.build();
620+
BackupId sourceBackupId = BackupId.of(PROJECT_ID, INSTANCE_ID, BK_ID);
621+
622+
when(rpc.copyBackup(sourceBackupId, requestBackup)).thenReturn(rawOperationFuture);
623+
624+
final OperationFuture<com.google.cloud.spanner.Backup, CopyBackupMetadata> op =
625+
client.copyBackup(sourceBackupId, requestBackup);
626+
assertThat(op.isDone()).isTrue();
627+
assertThat(op.get().getId().getName()).isEqualTo(BK_NAME);
628+
}
629+
594630
@Test
595631
public void copyEncryptedBackup() throws ExecutionException, InterruptedException {
596632
final OperationFuture<Backup, CopyBackupMetadata> rawOperationFuture =

0 commit comments

Comments
 (0)