Skip to content

Commit 560d0b6

Browse files
committed
Modified methods in ChangeRequest.
* Modified methods in ChangeRequest. Added reload() and isDone() to change request. Also changed signature of applyTo().
1 parent d17e325 commit 560d0b6

File tree

7 files changed

+107
-55
lines changed

7 files changed

+107
-55
lines changed

gcloud-java-dns/README.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -212,21 +212,20 @@ while (recordSetIterator.hasNext()) {
212212

213213
// Build and apply the change request to our zone
214214
ChangeRequestInfo changeRequest = changeBuilder.build();
215-
zone.applyChangeRequest(changeRequest);
215+
ChangeRequest pendingRequest = zone.applyChangeRequest(changeRequest);
216216
```
217217
You can find more information about changes in the [Cloud DNS documentation] (https://cloud.google.com/dns/what-is-cloud-dns#cloud_dns_api_concepts).
218218

219219
When the change request is applied, it is registered with the Cloud DNS service for processing. We
220220
can wait for its completion as follows:
221221

222222
```java
223-
while (ChangeRequestInfo.Status.PENDING.equals(changeRequest.status())) {
223+
while (!pendingRequest.isDone()) {
224224
try {
225225
Thread.sleep(500L);
226226
} catch (InterruptedException e) {
227227
System.err.println("The thread was interrupted while waiting...");
228228
}
229-
changeRequest = dns.getChangeRequest(zone.name(), changeRequest.generatedId());
230229
}
231230
System.out.println("The change request has been applied.");
232231
```
@@ -300,22 +299,17 @@ while (recordIterator.hasNext()) {
300299
// Build and apply the change request to our zone if it contains records to delete
301300
ChangeRequestInfo changeRequest = changeBuilder.build();
302301
if (!changeRequest.deletions().isEmpty()) {
303-
changeRequest = dns.applyChangeRequest(zoneName, changeRequest);
302+
ChangeRequest pendingRequest = dns.applyChangeRequest(zoneName, changeRequest);
304303

305-
// Wait for change to finish, but save data traffic by transferring only ID and status
306-
Dns.ChangeRequestOption option =
307-
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS);
308-
while (ChangeRequestInfo.Status.PENDING.equals(changeRequest.status())) {
304+
// Wait for the change request to complete
305+
while (!pendingRequest.isDone()) {
309306
System.out.println("Waiting for change to complete. Going to sleep for 500ms...");
310307
try {
311308
Thread.sleep(500);
312309
} catch (InterruptedException e) {
313310
System.err.println("The thread was interrupted while waiting for change request to be "
314311
+ "processed.");
315312
}
316-
317-
// Update the change, but fetch only change ID and status
318-
changeRequest = dns.getChangeRequest(zoneName, changeRequest.generatedId(), option);
319313
}
320314
}
321315

gcloud-java-dns/src/main/java/com/google/gcloud/dns/ChangeRequest.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,42 @@ public Dns dns() {
148148
}
149149

150150
/**
151-
* Applies this change request to the associated zone.
151+
* Applies this change request to the zone identified by {@code zoneName}.
152+
*
153+
* @throws DnsException upon failure or if zone is not found
152154
*/
153-
public ChangeRequest applyTo(Dns.ChangeRequestOption... options) {
154-
return dns.applyChangeRequest(zone, this, options);
155+
public ChangeRequest applyTo(String zoneName, Dns.ChangeRequestOption... options) {
156+
return dns.applyChangeRequest(zoneName, this, options);
157+
}
158+
159+
/**
160+
* Retrieves the up-to-date information about the change request from Google Cloud DNS. Parameter
161+
* {@code options} can be used to restrict the fields to be included in the updated object the
162+
* same way as in {@link Dns#getChangeRequest(String, String, Dns.ChangeRequestOption...)}. If
163+
* {@code options} are provided, any field other than generatedId which is not included in the
164+
* {@code options} will be {@code null} regardless of whether they are initialized or not in
165+
* {@code this} instance.
166+
*
167+
* @return an object with the updated information or {@code null} if it does not exist
168+
* @throws DnsException upon failure of the API call or if the associated zone was not found
169+
*/
170+
public ChangeRequest reload(Dns.ChangeRequestOption... options) {
171+
return dns.getChangeRequest(zone, generatedId(), options);
172+
}
173+
174+
/**
175+
* Returns {@code true} if the change request has been completed. If the status is not {@link
176+
* Status#DONE} already, the method makes an API call to Google Cloud DNS to update the change
177+
* request first.
178+
*
179+
* @throws DnsException upon failure of the API call or if the associated zone was not found
180+
*/
181+
public boolean isDone() {
182+
if (status() == Status.DONE) {
183+
return true;
184+
}
185+
ChangeRequest updated = reload(Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS));
186+
return updated == null || updated.status() == Status.DONE;
155187
}
156188

157189
@Override

gcloud-java-dns/src/main/java/com/google/gcloud/dns/Dns.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ public static ChangeRequestListOption sortOrder(SortingOrder order) {
475475
* servers. The fields to be returned can be selected by {@link ChangeRequestOption}s.
476476
*
477477
* @return the new {@link ChangeRequest}
478-
* @throws DnsException upon failure if zone is not found
478+
* @throws DnsException upon failure or if zone is not found
479479
* @see <a href="https://cloud.google.com/dns/api/v1/changes/create">Cloud DNS Changes: create</a>
480480
*/
481481
ChangeRequest applyChangeRequest(String zoneName, ChangeRequestInfo changeRequest,

gcloud-java-dns/src/test/java/com/google/gcloud/dns/ChangeRequestTest.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,26 @@ public class ChangeRequestTest {
4343

4444
private Dns dns;
4545
private ChangeRequest changeRequest;
46+
private ChangeRequest changeRequestPending;
4647
private ChangeRequest changeRequestPartial;
4748

4849
@Before
4950
public void setUp() throws Exception {
5051
dns = createStrictMock(Dns.class);
51-
expect(dns.options()).andReturn(OPTIONS).times(2);
52+
expect(dns.options()).andReturn(OPTIONS).times(3);
5253
replay(dns);
5354
changeRequest = new ChangeRequest(dns, ZONE_NAME, new ChangeRequestInfo.BuilderImpl(
5455
CHANGE_REQUEST_INFO.toBuilder()
5556
.startTimeMillis(132L)
5657
.generatedId("12")
5758
.status(ChangeRequest.Status.DONE)
5859
.build()));
60+
changeRequestPending = new ChangeRequest(dns, ZONE_NAME, new ChangeRequestInfo.BuilderImpl(
61+
CHANGE_REQUEST_INFO.toBuilder()
62+
.startTimeMillis(132L)
63+
.generatedId("12")
64+
.status(ChangeRequest.Status.PENDING)
65+
.build()));
5966
changeRequestPartial = new ChangeRequest(dns, ZONE_NAME,
6067
new ChangeRequest.BuilderImpl(CHANGE_REQUEST_INFO));
6168
reset(dns);
@@ -133,8 +140,34 @@ public void testApplyTo() {
133140
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)))
134141
.andReturn(changeRequest);
135142
replay(dns);
136-
assertSame(changeRequest, changeRequest.applyTo());
137-
assertSame(changeRequest,
138-
changeRequest.applyTo(Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)));
143+
assertSame(changeRequest, changeRequest.applyTo(ZONE_NAME));
144+
assertSame(changeRequest, changeRequest.applyTo(ZONE_NAME,
145+
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)));
146+
}
147+
148+
@Test
149+
public void testReload() {
150+
expect(dns.getChangeRequest(ZONE_NAME, changeRequest.generatedId())).andReturn(changeRequest);
151+
expect(dns.getChangeRequest(ZONE_NAME, changeRequest.generatedId(),
152+
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)))
153+
.andReturn(changeRequest);
154+
replay(dns);
155+
assertSame(changeRequest, changeRequest.reload());
156+
assertSame(changeRequest, changeRequest.reload(
157+
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)));
158+
}
159+
160+
@Test
161+
public void testIsDone() {
162+
replay(dns);
163+
assertTrue(changeRequest.isDone());
164+
verify(dns);
165+
reset(dns);
166+
expect(dns.getChangeRequest(ZONE_NAME, changeRequest.generatedId(),
167+
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS)))
168+
.andReturn(changeRequest);
169+
replay(dns);
170+
assertTrue(changeRequestPending.isDone());
171+
verify(dns);
139172
}
140173
}

gcloud-java-dns/src/test/java/com/google/gcloud/dns/it/ITDnsTest.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,13 @@ private static void assertEqChangesIgnoreStatus(ChangeRequest expected, ChangeRe
147147
}
148148

149149
private static void waitForChangeToComplete(String zoneName, String changeId) {
150-
while (true) {
151-
ChangeRequest changeRequest = DNS.getChangeRequest(zoneName, changeId,
152-
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS));
153-
if (ChangeRequest.Status.DONE.equals(changeRequest.status())) {
154-
return;
155-
}
150+
ChangeRequest changeRequest = DNS.getChangeRequest(zoneName, changeId,
151+
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS));
152+
waitForChangeToComplete(changeRequest);
153+
}
154+
155+
private static void waitForChangeToComplete(ChangeRequest changeRequest) {
156+
while (!changeRequest.isDone()) {
156157
try {
157158
Thread.sleep(500);
158159
} catch (InterruptedException e) {
@@ -529,9 +530,9 @@ public void testCreateChange() {
529530
assertTrue(ImmutableList.of(ChangeRequest.Status.PENDING, ChangeRequest.Status.DONE)
530531
.contains(created.status()));
531532
assertEqChangesIgnoreStatus(created, DNS.getChangeRequest(ZONE1.name(), "1"));
532-
waitForChangeToComplete(ZONE1.name(), "1");
533-
DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
534-
waitForChangeToComplete(ZONE1.name(), "2");
533+
waitForChangeToComplete(created);
534+
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
535+
waitForChangeToComplete(created);
535536
// with options
536537
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_ADD_ZONE1,
537538
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.ID));
@@ -540,29 +541,29 @@ public void testCreateChange() {
540541
assertTrue(created.deletions().isEmpty());
541542
assertEquals("3", created.generatedId());
542543
assertNull(created.status());
543-
waitForChangeToComplete(ZONE1.name(), "3");
544-
DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
545-
waitForChangeToComplete(ZONE1.name(), "4");
544+
waitForChangeToComplete(created);
545+
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
546+
waitForChangeToComplete(created);
546547
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_ADD_ZONE1,
547548
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS));
548549
assertTrue(created.additions().isEmpty());
549550
assertNull(created.startTimeMillis());
550551
assertTrue(created.deletions().isEmpty());
551552
assertEquals("5", created.generatedId());
552553
assertNotNull(created.status());
553-
waitForChangeToComplete(ZONE1.name(), "5");
554-
DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
555-
waitForChangeToComplete(ZONE1.name(), "6");
554+
waitForChangeToComplete(created);
555+
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
556+
waitForChangeToComplete(created);
556557
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_ADD_ZONE1,
557558
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME));
558559
assertTrue(created.additions().isEmpty());
559560
assertNotNull(created.startTimeMillis());
560561
assertTrue(created.deletions().isEmpty());
561562
assertEquals("7", created.generatedId());
562563
assertNull(created.status());
563-
waitForChangeToComplete(ZONE1.name(), "7");
564-
DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
565-
waitForChangeToComplete(ZONE1.name(), "8");
564+
waitForChangeToComplete(created);
565+
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1);
566+
waitForChangeToComplete(created);
566567
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_ADD_ZONE1,
567568
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.ADDITIONS));
568569
assertEquals(CHANGE_ADD_ZONE1.additions(), created.additions());
@@ -571,16 +572,16 @@ public void testCreateChange() {
571572
assertEquals("9", created.generatedId());
572573
assertNull(created.status());
573574
// finishes with delete otherwise we cannot delete the zone
574-
waitForChangeToComplete(ZONE1.name(), "9");
575+
waitForChangeToComplete(created);
575576
created = DNS.applyChangeRequest(ZONE1.name(), CHANGE_DELETE_ZONE1,
576577
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.DELETIONS));
577-
waitForChangeToComplete(ZONE1.name(), "10");
578+
waitForChangeToComplete(created);
578579
assertEquals(CHANGE_DELETE_ZONE1.deletions(), created.deletions());
579580
assertNull(created.startTimeMillis());
580581
assertTrue(created.additions().isEmpty());
581582
assertEquals("10", created.generatedId());
582583
assertNull(created.status());
583-
waitForChangeToComplete(ZONE1.name(), "10");
584+
waitForChangeToComplete(created);
584585
} finally {
585586
clear();
586587
}

gcloud-java-examples/src/main/java/com/google/gcloud/examples/dns/snippets/DeleteZone.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
package com.google.gcloud.examples.dns.snippets;
2424

25+
import com.google.gcloud.dns.ChangeRequest;
2526
import com.google.gcloud.dns.ChangeRequestInfo;
2627
import com.google.gcloud.dns.Dns;
2728
import com.google.gcloud.dns.DnsOptions;
@@ -59,21 +60,17 @@ public static void main(String... args) {
5960
// Build and apply the change request to our zone if it contains records to delete
6061
ChangeRequestInfo changeRequest = changeBuilder.build();
6162
if (!changeRequest.deletions().isEmpty()) {
62-
changeRequest = dns.applyChangeRequest(zoneName, changeRequest);
63+
ChangeRequest pendingRequest = dns.applyChangeRequest(zoneName, changeRequest);
6364

64-
// Wait for change to finish, but save data traffic by transferring only ID and status
65-
Dns.ChangeRequestOption option =
66-
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS);
67-
while (ChangeRequestInfo.Status.PENDING.equals(changeRequest.status())) {
65+
// Wait for the change request to complete
66+
while (!pendingRequest.isDone()) {
6867
System.out.println("Waiting for change to complete. Going to sleep for 500ms...");
6968
try {
7069
Thread.sleep(500);
7170
} catch (InterruptedException e) {
7271
System.err.println("The thread was interrupted while waiting for change request to be "
7372
+ "processed.");
7473
}
75-
// Update the change, but fetch only change ID and status
76-
changeRequest = dns.getChangeRequest(zoneName, changeRequest.generatedId(), option);
7774
}
7875
}
7976

gcloud-java-examples/src/main/java/com/google/gcloud/examples/dns/snippets/ManipulateZonesAndRecordSets.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,22 +128,17 @@ public static void main(String... args) {
128128
// Build and apply the change request to our zone if it contains records to delete
129129
changeRequest = changeBuilder.build();
130130
if (!changeRequest.deletions().isEmpty()) {
131-
changeRequest = dns.applyChangeRequest(zoneName, changeRequest);
131+
ChangeRequest pendingRequest = dns.applyChangeRequest(zoneName, changeRequest);
132132

133-
// Wait for change to finish, but save data traffic by transferring only ID and status
134-
Dns.ChangeRequestOption option =
135-
Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS);
136-
while (ChangeRequest.Status.PENDING.equals(changeRequest.status())) {
133+
// Wait for the change request to complete
134+
while (!pendingRequest.isDone()) {
137135
System.out.println("Waiting for change to complete. Going to sleep for 500ms...");
138136
try {
139137
Thread.sleep(500);
140138
} catch (InterruptedException e) {
141139
System.err.println("The thread was interrupted while waiting for change request to be "
142140
+ "processed.");
143141
}
144-
145-
// Update the change, but fetch only change ID and status
146-
changeRequest = dns.getChangeRequest(zoneName, changeRequest.generatedId(), option);
147142
}
148143
}
149144

0 commit comments

Comments
 (0)