mirror of
https://github.com/google/nomulus.git
synced 2025-08-14 13:34:07 +02:00
Add better logging/error messages for Cloud DNS failures (#1237)
* Add better logging/error messages for Cloud DNS failures
This commit is contained in:
parent
ae2cd7078e
commit
fb4d48ff54
1 changed files with 14 additions and 8 deletions
|
@ -284,9 +284,10 @@ public class CloudDnsWriter extends BaseDnsWriter {
|
||||||
.filter(hostName -> hostName.endsWith("." + domainName) && !hostName.equals(domainName));
|
.filter(hostName -> hostName.endsWith("." + domainName) && !hostName.equals(domainName));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Mutate the zone with the provided {@code desiredRecords}. */
|
/** Mutate the zone with the provided map of hostnames to desired DNS records. */
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void mutateZone(ImmutableMap<String, ImmutableSet<ResourceRecordSet>> desiredRecords) {
|
void mutateZone(ImmutableMap<String, ImmutableSet<ResourceRecordSet>> desiredRecords) {
|
||||||
|
logger.atInfo().log("Updating DNS records for hostname(s) %s.", desiredRecords.keySet());
|
||||||
// Fetch all existing records for names that this writer is trying to modify
|
// Fetch all existing records for names that this writer is trying to modify
|
||||||
ImmutableSet.Builder<ResourceRecordSet> flattenedExistingRecords = new ImmutableSet.Builder<>();
|
ImmutableSet.Builder<ResourceRecordSet> flattenedExistingRecords = new ImmutableSet.Builder<>();
|
||||||
|
|
||||||
|
@ -313,7 +314,12 @@ public class CloudDnsWriter extends BaseDnsWriter {
|
||||||
desiredRecords.values().forEach(flattenedDesiredRecords::addAll);
|
desiredRecords.values().forEach(flattenedDesiredRecords::addAll);
|
||||||
|
|
||||||
// Delete all existing records and add back the desired records
|
// Delete all existing records and add back the desired records
|
||||||
updateResourceRecords(flattenedDesiredRecords.build(), flattenedExistingRecords.build());
|
try {
|
||||||
|
updateResourceRecords(flattenedDesiredRecords.build(), flattenedExistingRecords.build());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"Error updating DNS records for hostname(s) " + desiredRecords.keySet(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -363,10 +369,12 @@ public class CloudDnsWriter extends BaseDnsWriter {
|
||||||
*
|
*
|
||||||
* @throws ZoneStateException if the operation could not be completely successfully because the
|
* @throws ZoneStateException if the operation could not be completely successfully because the
|
||||||
* records to delete do not exist, already exist or have been modified with different
|
* records to delete do not exist, already exist or have been modified with different
|
||||||
* attributes since being queried.
|
* attributes since being queried. These errors will be retried.
|
||||||
|
* @throws IOException on non-retryable API errors, e.g. invalid request.
|
||||||
*/
|
*/
|
||||||
private void updateResourceRecords(
|
private void updateResourceRecords(
|
||||||
ImmutableSet<ResourceRecordSet> additions, ImmutableSet<ResourceRecordSet> deletions) {
|
ImmutableSet<ResourceRecordSet> additions, ImmutableSet<ResourceRecordSet> deletions)
|
||||||
|
throws IOException {
|
||||||
// Find records that are both in additions and deletions, so we can remove them from both before
|
// Find records that are both in additions and deletions, so we can remove them from both before
|
||||||
// requesting the change. This is mostly for optimization reasons - not doing so doesn't affect
|
// requesting the change. This is mostly for optimization reasons - not doing so doesn't affect
|
||||||
// the result.
|
// the result.
|
||||||
|
@ -392,17 +400,15 @@ public class CloudDnsWriter extends BaseDnsWriter {
|
||||||
GoogleJsonError err = e.getDetails();
|
GoogleJsonError err = e.getDetails();
|
||||||
// We did something really wrong here, just give up and re-throw
|
// We did something really wrong here, just give up and re-throw
|
||||||
if (err == null || err.getErrors().size() > 1) {
|
if (err == null || err.getErrors().size() > 1) {
|
||||||
throw new RuntimeException(e);
|
throw e;
|
||||||
}
|
}
|
||||||
String errorReason = err.getErrors().get(0).getReason();
|
String errorReason = err.getErrors().get(0).getReason();
|
||||||
|
|
||||||
if (RETRYABLE_EXCEPTION_REASONS.contains(errorReason)) {
|
if (RETRYABLE_EXCEPTION_REASONS.contains(errorReason)) {
|
||||||
throw new ZoneStateException(errorReason);
|
throw new ZoneStateException(errorReason);
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException(e);
|
throw e;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue