Skip to content

Commit 2c71e02

Browse files
feat: Adding new fields for Instance Create Time and Update Time (#1913)
* feat: Adding new fields for Instance Create Time and Update Time
1 parent 6ea1e2e commit 2c71e02

File tree

4 files changed

+100
-2
lines changed

4 files changed

+100
-2
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.api.gax.longrunning.OperationFuture;
2020
import com.google.api.gax.paging.Page;
2121
import com.google.cloud.Policy;
22+
import com.google.cloud.Timestamp;
2223
import com.google.cloud.spanner.Options.ListOption;
2324
import com.google.longrunning.Operation;
2425
import com.google.spanner.admin.database.v1.CreateDatabaseMetadata;
@@ -61,6 +62,18 @@ public Builder setDisplayName(String displayName) {
6162
return this;
6263
}
6364

65+
@Override
66+
Builder setUpdateTime(Timestamp updateTime) {
67+
infoBuilder.setUpdateTime(updateTime);
68+
return this;
69+
}
70+
71+
@Override
72+
Builder setCreateTime(Timestamp createTime) {
73+
infoBuilder.setCreateTime(createTime);
74+
return this;
75+
}
76+
6477
@Override
6578
public Builder setNodeCount(int nodeCount) {
6679
infoBuilder.setNodeCount(nodeCount);
@@ -205,6 +218,8 @@ static Instance fromProto(
205218
.setInstanceConfigId(InstanceConfigId.of(proto.getConfig()))
206219
.setDisplayName(proto.getDisplayName())
207220
.setNodeCount(proto.getNodeCount())
221+
.setCreateTime(Timestamp.fromProto(proto.getCreateTime()))
222+
.setUpdateTime(Timestamp.fromProto(proto.getUpdateTime()))
208223
.setProcessingUnits(proto.getProcessingUnits());
209224
State state;
210225
switch (proto.getState()) {

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

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

2121
import com.google.cloud.FieldSelector;
22+
import com.google.cloud.Timestamp;
2223
import com.google.common.base.MoreObjects;
2324
import com.google.common.collect.ImmutableMap;
2425
import com.google.protobuf.FieldMask;
@@ -77,6 +78,14 @@ public abstract static class Builder {
7778

7879
public abstract Builder setDisplayName(String displayName);
7980

81+
Builder setUpdateTime(Timestamp updateTime) {
82+
throw new UnsupportedOperationException("Unimplemented");
83+
}
84+
85+
Builder setCreateTime(Timestamp createTime) {
86+
throw new UnsupportedOperationException("Unimplemented");
87+
}
88+
8089
/**
8190
* Sets the number of nodes for the instance. Exactly one of processing units or node count must
8291
* be set when creating a new instance.
@@ -110,6 +119,8 @@ static class BuilderImpl extends Builder {
110119
private int processingUnits;
111120
private State state;
112121
private Map<String, String> labels;
122+
private Timestamp updateTime;
123+
private Timestamp createTime;
113124

114125
BuilderImpl(InstanceId id) {
115126
this.id = id;
@@ -124,6 +135,8 @@ static class BuilderImpl extends Builder {
124135
this.processingUnits = instance.processingUnits;
125136
this.state = instance.state;
126137
this.labels = new HashMap<>(instance.labels);
138+
this.updateTime = instance.updateTime;
139+
this.createTime = instance.createTime;
127140
}
128141

129142
@Override
@@ -138,6 +151,18 @@ public BuilderImpl setDisplayName(String displayName) {
138151
return this;
139152
}
140153

154+
@Override
155+
Builder setUpdateTime(Timestamp updateTime) {
156+
this.updateTime = updateTime;
157+
return this;
158+
}
159+
160+
@Override
161+
Builder setCreateTime(Timestamp createTime) {
162+
this.createTime = createTime;
163+
return this;
164+
}
165+
141166
@Override
142167
public BuilderImpl setNodeCount(int nodeCount) {
143168
this.nodeCount = nodeCount;
@@ -181,6 +206,8 @@ public InstanceInfo build() {
181206
private final int processingUnits;
182207
private final State state;
183208
private final ImmutableMap<String, String> labels;
209+
private final Timestamp updateTime;
210+
private final Timestamp createTime;
184211

185212
InstanceInfo(BuilderImpl builder) {
186213
this.id = builder.id;
@@ -190,6 +217,8 @@ public InstanceInfo build() {
190217
this.processingUnits = builder.processingUnits;
191218
this.state = builder.state;
192219
this.labels = ImmutableMap.copyOf(builder.labels);
220+
this.updateTime = builder.updateTime;
221+
this.createTime = builder.createTime;
193222
}
194223

195224
/** Returns the identifier of the instance. */
@@ -207,6 +236,14 @@ public String getDisplayName() {
207236
return displayName;
208237
}
209238

239+
public Timestamp getUpdateTime() {
240+
return updateTime;
241+
}
242+
243+
public Timestamp getCreateTime() {
244+
return createTime;
245+
}
246+
210247
/** Returns the node count of the instance. */
211248
public int getNodeCount() {
212249
return nodeCount;
@@ -241,6 +278,8 @@ public String toString() {
241278
.add("processingUnits", processingUnits)
242279
.add("state", state)
243280
.add("labels", labels)
281+
.add("createTime", createTime)
282+
.add("updateTime", updateTime)
244283
.toString();
245284
}
246285

@@ -259,12 +298,23 @@ public boolean equals(Object o) {
259298
&& nodeCount == that.nodeCount
260299
&& processingUnits == that.processingUnits
261300
&& state == that.state
262-
&& Objects.equals(labels, that.labels);
301+
&& Objects.equals(labels, that.labels)
302+
&& Objects.equals(updateTime, that.updateTime)
303+
&& Objects.equals(createTime, that.createTime);
263304
}
264305

265306
@Override
266307
public int hashCode() {
267-
return Objects.hash(id, configId, displayName, nodeCount, processingUnits, state, labels);
308+
return Objects.hash(
309+
id,
310+
configId,
311+
displayName,
312+
nodeCount,
313+
processingUnits,
314+
state,
315+
labels,
316+
updateTime,
317+
createTime);
268318
}
269319

270320
com.google.spanner.admin.instance.v1.Instance toProto() {

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.junit.Assert.assertNull;
2222
import static org.junit.Assert.assertTrue;
2323

24+
import com.google.cloud.Timestamp;
2425
import com.google.common.testing.EqualsTester;
2526
import org.junit.Test;
2627
import org.junit.runner.RunWith;
@@ -41,6 +42,8 @@ public void testEmptyBuilder() {
4142
assertEquals(0, info.getNodeCount());
4243
assertEquals(0, info.getProcessingUnits());
4344
assertTrue(info.getLabels().isEmpty());
45+
assertNull(info.getUpdateTime());
46+
assertNull(info.getCreateTime());
4447
}
4548

4649
@Test
@@ -56,6 +59,8 @@ public void testBuildInstanceInfo() {
5659
.setState(InstanceInfo.State.READY)
5760
.addLabel("env", "prod")
5861
.addLabel("region", "us")
62+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
63+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
5964
.build();
6065
assertThat(info.getId()).isEqualTo(id);
6166
assertThat(info.getInstanceConfigId()).isEqualTo(configId);
@@ -64,6 +69,8 @@ public void testBuildInstanceInfo() {
6469
assertThat(info.getProcessingUnits()).isEqualTo(2000);
6570
assertThat(info.getState()).isEqualTo(InstanceInfo.State.READY);
6671
assertThat(info.getLabels()).containsExactly("env", "prod", "region", "us");
72+
assertEquals(Timestamp.ofTimeMicroseconds(86000), info.getUpdateTime());
73+
assertEquals(Timestamp.ofTimeMicroseconds(46000), info.getCreateTime());
6774

6875
info = info.toBuilder().setDisplayName("new test instance").build();
6976
assertThat(info.getId()).isEqualTo(id);
@@ -73,6 +80,8 @@ public void testBuildInstanceInfo() {
7380
assertThat(info.getProcessingUnits()).isEqualTo(2000);
7481
assertThat(info.getState()).isEqualTo(InstanceInfo.State.READY);
7582
assertThat(info.getLabels()).containsExactly("env", "prod", "region", "us");
83+
assertEquals(Timestamp.ofTimeMicroseconds(86000), info.getUpdateTime());
84+
assertEquals(Timestamp.ofTimeMicroseconds(46000), info.getCreateTime());
7685
}
7786

7887
@Test
@@ -88,6 +97,8 @@ public void testToBuilder() {
8897
.setState(InstanceInfo.State.READY)
8998
.addLabel("env", "prod")
9099
.addLabel("region", "us")
100+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
101+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
91102
.build();
92103

93104
InstanceInfo rebuilt = info.toBuilder().setDisplayName("new test instance").build();
@@ -98,6 +109,8 @@ public void testToBuilder() {
98109
assertThat(rebuilt.getProcessingUnits()).isEqualTo(2000);
99110
assertThat(rebuilt.getState()).isEqualTo(InstanceInfo.State.READY);
100111
assertThat(rebuilt.getLabels()).containsExactly("env", "prod", "region", "us");
112+
assertEquals(Timestamp.ofTimeMicroseconds(86000), rebuilt.getUpdateTime());
113+
assertEquals(Timestamp.ofTimeMicroseconds(46000), rebuilt.getCreateTime());
101114
}
102115

103116
@Test
@@ -115,6 +128,8 @@ public void testEquals() {
115128
.setState(InstanceInfo.State.READY)
116129
.addLabel("env", "prod")
117130
.addLabel("region", "us")
131+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
132+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
118133
.build();
119134
InstanceInfo instance2 =
120135
InstanceInfo.newBuilder(id)
@@ -125,6 +140,8 @@ public void testEquals() {
125140
.setState(InstanceInfo.State.READY)
126141
.addLabel("region", "us")
127142
.addLabel("env", "prod")
143+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
144+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
128145
.build();
129146
InstanceInfo instance3 =
130147
InstanceInfo.newBuilder(id)
@@ -134,6 +151,8 @@ public void testEquals() {
134151
.setProcessingUnits(2000)
135152
.setState(InstanceInfo.State.READY)
136153
.addLabel("env", "prod")
154+
.setUpdateTime(Timestamp.ofTimeMicroseconds(8000))
155+
.setCreateTime(Timestamp.ofTimeMicroseconds(4000))
137156
.build();
138157
EqualsTester tester = new EqualsTester();
139158
tester.addEqualityGroup(instance, instance2);

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
package com.google.cloud.spanner;
1818

1919
import static com.google.common.truth.Truth.assertThat;
20+
import static org.junit.Assert.assertEquals;
2021
import static org.mockito.Mockito.verify;
2122
import static org.mockito.MockitoAnnotations.initMocks;
2223

2324
import com.google.cloud.Identity;
2425
import com.google.cloud.Policy;
2526
import com.google.cloud.Role;
27+
import com.google.cloud.Timestamp;
2628
import com.google.common.testing.EqualsTester;
2729
import java.util.Collections;
2830
import org.junit.Before;
@@ -56,6 +58,8 @@ public void buildInstance() {
5658
.setState(InstanceInfo.State.READY)
5759
.addLabel("env", "prod")
5860
.addLabel("region", "us")
61+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
62+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
5963
.build();
6064
assertThat(instance.getId()).isEqualTo(id);
6165
assertThat(instance.getInstanceConfigId()).isEqualTo(configId);
@@ -64,6 +68,8 @@ public void buildInstance() {
6468
assertThat(instance.getProcessingUnits()).isEqualTo(2000);
6569
assertThat(instance.getState()).isEqualTo(InstanceInfo.State.READY);
6670
assertThat(instance.getLabels()).containsExactly("env", "prod", "region", "us");
71+
assertEquals(Timestamp.ofTimeMicroseconds(86000), instance.getUpdateTime());
72+
assertEquals(Timestamp.ofTimeMicroseconds(46000), instance.getCreateTime());
6773

6874
instance = instance.toBuilder().setDisplayName("new test instance").build();
6975
assertThat(instance.getId()).isEqualTo(id);
@@ -73,6 +79,8 @@ public void buildInstance() {
7379
assertThat(instance.getProcessingUnits()).isEqualTo(2000);
7480
assertThat(instance.getState()).isEqualTo(InstanceInfo.State.READY);
7581
assertThat(instance.getLabels()).containsExactly("env", "prod", "region", "us");
82+
assertEquals(Timestamp.ofTimeMicroseconds(86000), instance.getUpdateTime());
83+
assertEquals(Timestamp.ofTimeMicroseconds(46000), instance.getCreateTime());
7684
}
7785

7886
@Test
@@ -89,6 +97,8 @@ public void equality() {
8997
.setState(InstanceInfo.State.READY)
9098
.addLabel("env", "prod")
9199
.addLabel("region", "us")
100+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
101+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
92102
.build();
93103
Instance instance2 =
94104
new Instance.Builder(instanceClient, dbClient, id)
@@ -99,6 +109,8 @@ public void equality() {
99109
.setState(InstanceInfo.State.READY)
100110
.addLabel("region", "us")
101111
.addLabel("env", "prod")
112+
.setUpdateTime(Timestamp.ofTimeMicroseconds(86000))
113+
.setCreateTime(Timestamp.ofTimeMicroseconds(46000))
102114
.build();
103115
Instance instance3 =
104116
new Instance.Builder(instanceClient, dbClient, id)
@@ -108,6 +120,8 @@ public void equality() {
108120
.setProcessingUnits(2000)
109121
.setState(InstanceInfo.State.READY)
110122
.addLabel("env", "prod")
123+
.setUpdateTime(Timestamp.ofTimeMicroseconds(8000))
124+
.setCreateTime(Timestamp.ofTimeMicroseconds(4000))
111125
.build();
112126
EqualsTester tester = new EqualsTester();
113127
tester.addEqualityGroup(instance, instance2);

0 commit comments

Comments
 (0)