-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/29928/
-----------------------------------------------------------

Review request for Ambari, Jonathan Hurley and Nate Cole.


Bugs: AMBARI-9152
    https://issues.apache.org/jira/browse/AMBARI-9152


Repository: ambari


Description
-------

Git 275e898 (https://github.com/apache/ambari/commit/275e898) introduced the 
following change:

{code}
-        normalizedMap.put(propKey, entry.getValue());
+        normalizedMap.put(propKey, entry.getValue().toString());
{code}

in {{AlertTargetResourceProvider}}. This causes a problem when there is a JSON 
array in the structure of an AlertTarget, such as when creating:

{code}
{
  "AlertTarget": {
    "name": "Administrators",
    "description": "The Admins",
    "notification_type": "EMAIL",
    "global": true,
    "properties":{
      "ambari.dispatch.credential.username":"ambari",
      "ambari.dispatch.credential.password":"password",
      "ambari.dispatch.recipients":["amb...@repo.ambari.apache.org"],
      "mail.smtp.host":"repo.ambari.apache.org",
      "mail.smtp.port":"25",
      "mail.smtp.auth":"true",
      "mail.smtp.starttls.enable":"false",
      "mail.smtp.from":"amb...@repo.ambari.apache.org"
    }
  }
}
{code}

When getting this target back, the target's {{ambari.dispatch.recipients}} is 
malformed:

{code}
    "properties" : {
      "mail.smtp.from" : "amb...@repo.ambari.apache.org",
      "ambari.dispatch.credential.username" : "ambari",
      "mail.smtp.host" : "repo.ambari.apache.org",
      "mail.smtp.port" : "25",
      "mail.smtp.auth" : "true",
      "ambari.dispatch.credential.password" : "password",
      "ambari.dispatch.recipients" : "[amb...@repo.ambari.apache.org]",
      "mail.smtp.starttls.enable" : "false"
    }
  }
{code}

This causes the following exception on dispatch:
{noformat}
SEVERE: Service AlertNoticeDispatchService [FAILED] has failed in the RUNNING 
state.
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: This is 
not a JSON Array.
        at com.google.gson.Gson.fromJson(Gson.java:806)
        at com.google.gson.Gson.fromJson(Gson.java:761)
        at com.google.gson.Gson.fromJson(Gson.java:710)
        at com.google.gson.Gson.fromJson(Gson.java:682)
        at 
org.apache.ambari.server.state.services.AlertNoticeDispatchService.buildNotificationFromTarget(AlertNoticeDispatchService.java:392)
        at 
org.apache.ambari.server.state.services.AlertNoticeDispatchService.runOneIteration(AlertNoticeDispatchService.java:309)
        at 
com.google.common.util.concurrent.AbstractScheduledService$1$1.run(AbstractScheduledService.java:170)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:695)
Caused by: java.lang.IllegalStateException: This is not a JSON Array.
        at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:100)
        at 
org.apache.ambari.server.state.services.AlertNoticeDispatchService$AlertTargetPropertyDeserializer.deserialize(AlertNoticeDispatchService.java:599)
        at 
org.apache.ambari.server.state.services.AlertNoticeDispatchService$AlertTargetPropertyDeserializer.deserialize(AlertNoticeDispatchService.java:1)
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
        at com.google.gson.Gson.fromJson(Gson.java:795)
        ... 15 more
{noformat}

STR:
1) Create an alert target with a list of recipients
2) Trigger an alert
3) Observe the exception and the malformed alert target


Diffs
-----

  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
 e0d9863 
  
ambari-server/src/main/java/org/apache/ambari/server/notifications/NotificationDispatcher.java
 ec4093f 
  
ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java
 67bd640 
  
ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
 0ed919f 
  
ambari-server/src/test/java/org/apache/ambari/server/notifications/MockDispatcher.java
 94202ca 
  
ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcherTest.java
 7522286 
  
ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
 ed222ed 
  
ambari-server/src/test/java/org/apache/ambari/server/state/services/AlertNoticeDispatchServiceTest.java
 d5ab08e 

Diff: https://reviews.apache.org/r/29928/diff/


Testing
-------

Results :

Tests run: 2537, Failures: 0, Errors: 0, Skipped: 15


Thanks,

Yurii Shylov

Reply via email to