Skip to content

Commit 8748972

Browse files
committed
feat: adding max expire time and get referencing database support
1 parent 0ecbeb7 commit 8748972

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package com.google.cloud.spanner;
1818

19-
import static com.google.common.base.Preconditions.checkArgument;
20-
2119
import com.google.api.client.util.Preconditions;
2220
import com.google.api.gax.longrunning.OperationFuture;
2321
import com.google.api.gax.paging.Page;
@@ -28,6 +26,8 @@
2826
import com.google.spanner.admin.database.v1.CreateBackupMetadata;
2927
import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata;
3028

29+
import static com.google.common.base.Preconditions.checkArgument;
30+
3131
/**
3232
* Represents a Cloud Spanner database backup. {@code Backup} adds a layer of service related
3333
* functionality over {@code BackupInfo}.
@@ -183,6 +183,8 @@ static Backup fromProto(
183183
.setDatabase(DatabaseId.of(proto.getDatabase()))
184184
.setEncryptionInfo(EncryptionInfo.fromProtoOrNull(proto.getEncryptionInfo()))
185185
.setProto(proto)
186+
.setMaxExpireTime(Timestamp.fromProto(proto.getMaxExpireTime()))
187+
.setReferencingBackup(proto.getReferencingBackupsList())
186188
.build();
187189
}
188190

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

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
import com.google.cloud.Timestamp;
2121
import com.google.cloud.spanner.encryption.BackupEncryptionConfig;
2222
import com.google.cloud.spanner.encryption.EncryptionInfo;
23+
import com.google.protobuf.ProtocolStringList;
2324
import com.google.spanner.admin.database.v1.Database;
24-
import java.util.Objects;
25+
2526
import javax.annotation.Nullable;
27+
import java.util.Objects;
2628

2729
/** Represents a Cloud Spanner database backup. */
2830
public class BackupInfo {
@@ -84,6 +86,9 @@ public abstract static class Builder {
8486

8587
/** Builds the backup from this builder. */
8688
public abstract Backup build();
89+
90+
protected abstract Builder setMaxExpireTime(Timestamp maxExpireTime);
91+
protected abstract Builder setReferencingBackup(ProtocolStringList referencingBackup);
8792
}
8893

8994
abstract static class BuilderImpl extends Builder {
@@ -96,6 +101,8 @@ abstract static class BuilderImpl extends Builder {
96101
private BackupEncryptionConfig encryptionConfig;
97102
private EncryptionInfo encryptionInfo;
98103
private com.google.spanner.admin.database.v1.Backup proto;
104+
private Timestamp maxExpireTime;
105+
private ProtocolStringList referencingBackup;
99106

100107
BuilderImpl(BackupId id) {
101108
this.id = Preconditions.checkNotNull(id);
@@ -111,6 +118,8 @@ abstract static class BuilderImpl extends Builder {
111118
this.encryptionConfig = other.encryptionConfig;
112119
this.encryptionInfo = other.encryptionInfo;
113120
this.proto = other.proto;
121+
this.maxExpireTime = other.maxExpireTime;
122+
this.referencingBackup = other.referencingBackup;
114123
}
115124

116125
@Override
@@ -163,6 +172,19 @@ Builder setProto(@Nullable com.google.spanner.admin.database.v1.Backup proto) {
163172
this.proto = proto;
164173
return this;
165174
}
175+
176+
@Override
177+
public Builder setMaxExpireTime(Timestamp maxExpireTime) {
178+
this.maxExpireTime = Preconditions.checkNotNull(maxExpireTime);
179+
return this;
180+
}
181+
182+
183+
@Override
184+
public Builder setReferencingBackup(ProtocolStringList referencingBackup) {
185+
this.referencingBackup = Preconditions.checkNotNull(referencingBackup);
186+
return this;
187+
}
166188
}
167189

168190
/** State of the backup. */
@@ -184,6 +206,8 @@ public enum State {
184206
private final BackupEncryptionConfig encryptionConfig;
185207
private final EncryptionInfo encryptionInfo;
186208
private final com.google.spanner.admin.database.v1.Backup proto;
209+
private final Timestamp maxExpireTime;
210+
private final ProtocolStringList referencingBackup;
187211

188212
BackupInfo(BuilderImpl builder) {
189213
this.id = builder.id;
@@ -195,6 +219,8 @@ public enum State {
195219
this.versionTime = builder.versionTime;
196220
this.database = builder.database;
197221
this.proto = builder.proto;
222+
this.maxExpireTime = builder.maxExpireTime;
223+
this.referencingBackup = builder.referencingBackup;
198224
}
199225

200226
/** Returns the backup id. */
@@ -253,6 +279,14 @@ public DatabaseId getDatabase() {
253279
return proto;
254280
}
255281

282+
public Timestamp getMaxExpireTime() {
283+
return maxExpireTime;
284+
}
285+
286+
public ProtocolStringList getReferencingBackup() {
287+
return referencingBackup;
288+
}
289+
256290
@Override
257291
public boolean equals(Object o) {
258292
if (this == o) {
@@ -269,26 +303,30 @@ public boolean equals(Object o) {
269303
&& Objects.equals(encryptionInfo, that.encryptionInfo)
270304
&& Objects.equals(expireTime, that.expireTime)
271305
&& Objects.equals(versionTime, that.versionTime)
272-
&& Objects.equals(database, that.database);
306+
&& Objects.equals(database, that.database)
307+
&& Objects.equals(maxExpireTime, that.maxExpireTime)
308+
&& Objects.equals(referencingBackup, that.referencingBackup);
273309
}
274310

275311
@Override
276312
public int hashCode() {
277313
return Objects.hash(
278-
id, state, size, encryptionConfig, encryptionInfo, expireTime, versionTime, database);
314+
id, state, size, encryptionConfig, encryptionInfo, expireTime, versionTime, database, maxExpireTime, referencingBackup);
279315
}
280316

281317
@Override
282318
public String toString() {
283319
return String.format(
284-
"Backup[%s, %s, %d, %s, %s, %s, %s, %s]",
320+
"Backup[%s, %s, %d, %s, %s, %s, %s, %s, %s, %s]",
285321
id.getName(),
286322
state,
287323
size,
288324
encryptionConfig,
289325
encryptionInfo,
290326
expireTime,
291327
versionTime,
292-
database);
328+
database,
329+
maxExpireTime,
330+
referencingBackup);
293331
}
294332
}

samples/snippets/src/main/java/com/example/spanner/SpannerSample.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,8 @@ static void updateBackup(DatabaseAdminClient dbAdminClient, BackupId backupId) {
18421842
TimeUnit.SECONDS.toMicros(backup.getExpireTime().getSeconds())
18431843
+ TimeUnit.NANOSECONDS.toMicros(backup.getExpireTime().getNanos())
18441844
+ TimeUnit.DAYS.toMicros(30L));
1845+
// New Expire Time must be less than Max Expire Time
1846+
expireTime = expireTime.compareTo(backup.getMaxExpireTime())<0?expireTime:backup.getMaxExpireTime();
18451847
int timeDiff = expireTime.compareTo(backup.getExpireTime());
18461848
Timestamp newExpireTime = (timeDiff < 0) ? expireTime : backup.getExpireTime();
18471849

0 commit comments

Comments
 (0)