in priam/src/main/java/com/netflix/priam/notification/AWSSnsNotificationService.java [64:106]
public void notify(
final String msg, final Map<String, MessageAttributeValue> messageAttributes) {
// e.g. arn:aws:sns:eu-west-1:1234:eu-west-1-cass-sample-backup
final String topic_arn = this.configuration.getBackupNotificationTopicArn();
if (!configuration.enableBackupNotification() || StringUtils.isEmpty(topic_arn)) {
return;
}
PublishResult publishResult;
try {
publishResult =
new BoundedExponentialRetryCallable<PublishResult>() {
@Override
public PublishResult retriableCall() throws Exception {
PublishRequest publishRequest =
new PublishRequest(topic_arn, msg)
.withMessageAttributes(messageAttributes);
return snsClient.publish(publishRequest);
}
}.call();
} catch (Exception e) {
logger.error(
String.format(
"Exhausted retries. Publishing notification metric for failure and moving on. Failed msg to publish: %s",
msg),
e);
backupMetrics.incrementSnsNotificationFailure();
return;
}
// If here, message was published. As a extra validation, ensure we have a msg id
String publishedMsgId = publishResult.getMessageId();
if (publishedMsgId == null || publishedMsgId.isEmpty()) {
backupMetrics.incrementSnsNotificationFailure();
return;
}
backupMetrics.incrementSnsNotificationSuccess();
if (logger.isTraceEnabled()) {
logger.trace("Published msg: {} aws sns messageId - {}", msg, publishedMsgId);
}
}