This is an automated email from the ASF dual-hosted git repository.

avijayan pushed a commit to branch branch-feature-AMBARI-23212
in repository https://gitbox.apache.org/repos/asf/ambari.git

commit d865b6ef31c894d4160690edf93fdaf430296e86
Author: Aravindan Vijayan <avija...@hortonworks.com>
AuthorDate: Thu Nov 2 14:41:38 2017 -0700

    AMBARI-22359 : Fix Serialization issues in Metric Definition Service 
(avijayan).
---
 .../src/main/resources/config.yml                  |  4 +-
 .../adservice/app/AnomalyDetectionAppConfig.scala  | 10 ++---
 .../ambari/metrics/adservice/common/Season.scala   |  4 +-
 .../MetricCollectorConfiguration.scala             | 10 -----
 ... => MetricDefinitionServiceConfiguration.scala} |  2 +-
 .../adservice/db/PhoenixAnomalyStoreAccessor.scala |  8 ++--
 .../adservice/metadata/ADMetadataProvider.scala    | 12 ++---
 .../adservice/metadata/MetricDefinition.scala      | 52 ++++++++++++++++++----
 ...Service.scala => MetricDefinitionService.scala} |  2 +-
 ...mpl.scala => MetricDefinitionServiceImpl.scala} | 34 ++++++++++++--
 .../metadata/MetricSourceDefinition.scala          | 38 +---------------
 .../app/AnomalyDetectionAppConfigTest.scala        |  2 +-
 .../metrics/adservice/common/SeasonTest.scala      |  4 +-
 ...est.scala => MetricDefinitionServiceTest.scala} | 34 +++++++-------
 .../metadata/MetricSourceDefinitionTest.scala      | 11 +++--
 15 files changed, 126 insertions(+), 101 deletions(-)

diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/resources/config.yml
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/resources/config.yml
index 6953745..920c50c 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/resources/config.yml
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/resources/config.yml
@@ -20,8 +20,8 @@ server:
 logging:
   type: external
 
-metricManagerService:
-  inputDefinitionDirectory: /etc/adservice/conf/input-definitions-directory
+metricDefinitionService:
+  inputDefinitionDirectory: /etc/ambari-metrics-anomaly-detection/conf
 
 metricsCollector:
   hostPortList: host1:6188,host2:6188
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfig.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfig.scala
index be8d027..c1ef0d1 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfig.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfig.scala
@@ -20,7 +20,7 @@ package org.apache.ambari.metrics.adservice.app
 
 import javax.validation.Valid
 
-import 
org.apache.ambari.metrics.adservice.configuration.{AdServiceConfiguration, 
HBaseConfiguration, MetricCollectorConfiguration, 
MetricManagerServiceConfiguration}
+import 
org.apache.ambari.metrics.adservice.configuration.{AdServiceConfiguration, 
HBaseConfiguration, MetricCollectorConfiguration, 
MetricDefinitionServiceConfiguration}
 
 import com.fasterxml.jackson.annotation.JsonProperty
 
@@ -35,7 +35,7 @@ class AnomalyDetectionAppConfig extends Configuration {
    Metric Definition Service configuration
     */
   @Valid
-  private val metricManagerServiceConfiguration = new 
MetricManagerServiceConfiguration
+  private val metricDefinitionServiceConfiguration = new 
MetricDefinitionServiceConfiguration
 
   @Valid
   private val metricCollectorConfiguration = new MetricCollectorConfiguration
@@ -53,9 +53,9 @@ class AnomalyDetectionAppConfig extends Configuration {
     HBaseConfiguration.getHBaseConf
   }
 
-  @JsonProperty("metricManagerService")
-  def getMetricManagerServiceConfiguration: MetricManagerServiceConfiguration 
= {
-    metricManagerServiceConfiguration
+  @JsonProperty("metricDefinitionService")
+  def getMetricDefinitionServiceConfiguration: 
MetricDefinitionServiceConfiguration = {
+    metricDefinitionServiceConfiguration
   }
 
   @JsonProperty("adQueryService")
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/common/Season.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/common/Season.scala
index aba2587..f875e3b 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/common/Season.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/common/Season.scala
@@ -112,11 +112,11 @@ object Season {
     validSeasons.toList
   }
 
-  def serialize(season: Season) : String = {
+  def toJson(season: Season) : String = {
     mapper.writeValueAsString(season)
   }
 
-  def deserialize(seasonString: String) : Season = {
+  def fromJson(seasonString: String) : Season = {
     mapper.readValue[Season](seasonString)
   }
 }
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricCollectorConfiguration.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricCollectorConfiguration.scala
index 50a0b72..9418897 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricCollectorConfiguration.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricCollectorConfiguration.scala
@@ -39,14 +39,4 @@ class MetricCollectorConfiguration {
   @JsonProperty
   def getMetadataEndpoint: String = metadataEndpoint
 
-  @JsonProperty
-  def setHostPortList(hostPortList: String): Unit = {
-    this.hostPortList = hostPortList
-  }
-
-  @JsonProperty
-  def setMetadataEndpoint(metadataEndpoint: String): Unit = {
-    this.metadataEndpoint = metadataEndpoint
-  }
-
 }
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricManagerServiceConfiguration.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricDefinitionServiceConfiguration.scala
similarity index 96%
rename from 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricManagerServiceConfiguration.scala
rename to 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricDefinitionServiceConfiguration.scala
index e5960d5..b560713 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricManagerServiceConfiguration.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/configuration/MetricDefinitionServiceConfiguration.scala
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
 /**
   * Class to capture the Metric Definition Service configuration.
   */
-class MetricManagerServiceConfiguration {
+class MetricDefinitionServiceConfiguration {
 
   @NotNull
   private val inputDefinitionDirectory: String = ""
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/db/PhoenixAnomalyStoreAccessor.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/db/PhoenixAnomalyStoreAccessor.scala
index 1191e90..36aea21 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/db/PhoenixAnomalyStoreAccessor.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/db/PhoenixAnomalyStoreAccessor.scala
@@ -94,11 +94,11 @@ object PhoenixAnomalyStoreAccessor  {
           val timestamp: Long = rs.getLong("ANOMALY_TIMESTAMP")
           val metricValue: Double = rs.getDouble("METRIC_VALUE")
           val methodType: AnomalyDetectionMethod = 
AnomalyDetectionMethod.withName(rs.getString("METHOD_NAME"))
-          val season: Season = 
Season.deserialize(rs.getString("SEASONAL_INFO"))
+          val season: Season = Season.fromJson(rs.getString("SEASONAL_INFO"))
           val anomalyScore: Double = rs.getDouble("ANOMALY_SCORE")
           val modelSnapshot: String = rs.getString("MODEL_PARAMETERS")
 
-          val metricKey: MetricKey = null 
//MetricManager.getMetricKeyFromUuid(uuid)
+          val metricKey: MetricKey = null 
//MetricManager.getMetricKeyFromUuid(uuid) //TODO
           val anomalyInstance: SingleMetricAnomalyInstance = new 
PointInTimeAnomalyInstance(metricKey, timestamp,
             metricValue, methodType, anomalyScore, season, modelSnapshot)
           anomalies.+=(anomalyInstance)
@@ -111,11 +111,11 @@ object PhoenixAnomalyStoreAccessor  {
           val referenceStart: Long = rs.getLong("TEST_PERIOD_START")
           val referenceEnd: Long = rs.getLong("TEST_PERIOD_END")
           val methodType: AnomalyDetectionMethod = 
AnomalyDetectionMethod.withName(rs.getString("METHOD_NAME"))
-          val season: Season = 
Season.deserialize(rs.getString("SEASONAL_INFO"))
+          val season: Season = Season.fromJson(rs.getString("SEASONAL_INFO"))
           val anomalyScore: Double = rs.getDouble("ANOMALY_SCORE")
           val modelSnapshot: String = rs.getString("MODEL_PARAMETERS")
 
-          val metricKey: MetricKey = null 
//MetricManager.getMetricKeyFromUuid(uuid)
+          val metricKey: MetricKey = null 
//MetricManager.getMetricKeyFromUuid(uuid) //TODO
           val anomalyInstance: SingleMetricAnomalyInstance = 
TrendAnomalyInstance(metricKey,
             TimeRange(anomalyStart, anomalyEnd),
             TimeRange(referenceStart, referenceEnd),
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/ADMetadataProvider.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/ADMetadataProvider.scala
index 801c5f5..3bcf4b0 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/ADMetadataProvider.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/ADMetadataProvider.scala
@@ -56,11 +56,13 @@ class ADMetadataProvider extends MetricMetadataProvider {
     val metricKeySet: scala.collection.mutable.Set[MetricKey] = 
scala.collection.mutable.Set.empty[MetricKey]
 
     for (metricDef <- metricSourceDefinition.metricDefinitions) {
-      for (hostPort <- metricCollectorHostPorts) {
-        val metricKeys: Set[MetricKey] = getKeysFromMetricsCollector(hostPort 
+ metricMetadataPath, metricDef)
-        if (metricKeys != null) {
-          keysMap += (metricDef -> metricKeys)
-          metricKeySet.++(metricKeys)
+      if (metricDef.isValid) { //Skip requesting metric keys for invalid 
definitions.
+        for (hostPort <- metricCollectorHostPorts) {
+          val metricKeys: Set[MetricKey] = 
getKeysFromMetricsCollector(hostPort + metricMetadataPath, metricDef)
+          if (metricKeys != null) {
+            keysMap += (metricDef -> metricKeys)
+            metricKeySet.++(metricKeys)
+          }
         }
       }
     }
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinition.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinition.scala
index 0a5e51f..036867b 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinition.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinition.scala
@@ -18,9 +18,12 @@
 
 package org.apache.ambari.metrics.adservice.metadata
 
+import org.apache.commons.lang3.StringUtils
 /*
    {
        "metric-name": "mem_free",
+       "appId" : "HOST",
+       "hosts" : ["h1","h2"],
        "metric-description" : "Free memory on a Host.",
        "troubleshooting-info" : "Sudden drop / hike in free memory on a host.",
        "static-threshold" : 10,
@@ -28,12 +31,33 @@ package org.apache.ambari.metrics.adservice.metadata
 }
  */
 
-case class MetricDefinition (metricName: String,
-                             appId: String,
-                             hosts: List[String],
-                             metricDescription: String,
-                             troubleshootingInfo: String,
-                             staticThreshold: Double)  {
+@SerialVersionUID(1002L)
+class MetricDefinition extends Serializable {
+
+  var metricName: String = _
+  var appId: String = _
+  var hosts: List[String] = List.empty[String]
+  var metricDescription: String = ""
+  var troubleshootingInfo: String = ""
+  var staticThreshold: Double = _
+
+  //A Metric definition is valid if we can resolve a metricName and appId 
(defined or inherited) at runtime)
+  private var valid : Boolean = true
+
+  def this(metricName: String,
+           appId: String,
+           hosts: List[String],
+           metricDescription: String,
+           troubleshootingInfo: String,
+           staticThreshold: Double) = {
+    this
+    this.metricName = metricName
+    this.appId = appId
+    this.hosts = hosts
+    this.metricDescription = metricDescription
+    this.troubleshootingInfo = troubleshootingInfo
+    this.staticThreshold = staticThreshold
+  }
 
   @Override
   override def equals(obj: scala.Any): Boolean = {
@@ -46,10 +70,20 @@ case class MetricDefinition (metricName: String,
     if (!(metricName == that.metricName))
       return false
 
-    if (!(appId == that.appId))
-      return false
+    if (StringUtils.isNotEmpty(appId)) {
+      appId == that.appId
+    }
+    else {
+      StringUtils.isEmpty(that.appId)
+    }
+  }
+
+  def isValid: Boolean = {
+    valid
+  }
 
-    true
+  def makeInvalid() : Unit = {
+    valid = false
   }
 }
 
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerService.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionService.scala
similarity index 98%
rename from 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerService.scala
rename to 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionService.scala
index 12bd7e4..635dc60 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerService.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionService.scala
@@ -17,7 +17,7 @@
 
 package org.apache.ambari.metrics.adservice.metadata
 
-trait MetricManagerService {
+trait MetricDefinitionService {
 
   /**
     * Given a 'UUID', return the metric key associated with it.
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceImpl.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceImpl.scala
similarity index 83%
rename from 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceImpl.scala
rename to 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceImpl.scala
index ce02775..ffa9944 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceImpl.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceImpl.scala
@@ -23,7 +23,7 @@ import 
org.apache.ambari.metrics.adservice.db.AdMetadataStoreAccessor
 import com.google.inject.{Inject, Singleton}
 
 @Singleton
-class MetricManagerServiceImpl extends MetricManagerService {
+class MetricDefinitionServiceImpl extends MetricDefinitionService {
 
   @Inject
   var adMetadataStoreAccessor: AdMetadataStoreAccessor = _
@@ -66,15 +66,21 @@ class MetricManagerServiceImpl extends MetricManagerService 
{
 
     //Load definitions from metadata store
     val definitionsFromStore: List[MetricSourceDefinition] = 
adMetadataStoreAccessor.getSavedInputDefinitions
+    for (definition <- definitionsFromStore) {
+      validateAndSanitizeMetricSourceDefinition(definition)
+    }
 
     //Load definitions from configs
     val definitionsFromConfig: List[MetricSourceDefinition] = 
getInputDefinitionsFromConfig
+    for (definition <- definitionsFromConfig) {
+      validateAndSanitizeMetricSourceDefinition(definition)
+    }
 
     //Union the 2 sources, with DB taking precedence.
     //Save new definition list to DB.
     metricSourceDefinitionMap = 
metricSourceDefinitionMap.++(combineDefinitionSources(definitionsFromConfig, 
definitionsFromStore))
 
-      //Reach out to AMS Metadata and get Metric Keys. Pass in List<CD> and 
get back Map<MD,Set<MK>>
+    //Reach out to AMS Metadata and get Metric Keys. Pass in List<CD> and get 
back (Map<MD,Set<MK>>, Set<MK>)
     for (definition <- metricSourceDefinitionMap.values) {
       val (definitionKeyMap: Map[MetricDefinition, Set[MetricKey]], keys: 
Set[MetricKey])= metricMetadataProvider.getMetricKeysForDefinitions(definition)
       metricDefinitionMetricKeyMap = 
metricDefinitionMetricKeyMap.++(definitionKeyMap)
@@ -173,11 +179,33 @@ class MetricManagerServiceImpl extends 
MetricManagerService {
   }
 
   def getInputDefinitionsFromConfig: List[MetricSourceDefinition] = {
-    val configDirectory = 
configuration.getMetricManagerServiceConfiguration.getInputDefinitionDirectory
+    val configDirectory = 
configuration.getMetricDefinitionServiceConfiguration.getInputDefinitionDirectory
     
InputMetricDefinitionParser.parseInputDefinitionsFromDirectory(configDirectory)
   }
 
   def setAdMetadataStoreAccessor (adMetadataStoreAccessor: 
AdMetadataStoreAccessor) : Unit = {
     this.adMetadataStoreAccessor = adMetadataStoreAccessor
   }
+
+  def validateAndSanitizeMetricSourceDefinition(metricSourceDefinition: 
MetricSourceDefinition): Unit = {
+    val sourceLevelAppId: String = metricSourceDefinition.appId
+    val sourceLevelHostList: List[String] = metricSourceDefinition.hosts
+
+    for (metricDef <- metricSourceDefinition.metricDefinitions.toList) {
+      if (metricDef.appId == null) {
+        if (sourceLevelAppId == null || sourceLevelAppId.isEmpty) {
+          metricDef.makeInvalid()
+        } else {
+          metricDef.appId = sourceLevelAppId
+        }
+      }
+
+      if (metricDef.isValid && metricDef.hosts.isEmpty) {
+        if (sourceLevelHostList != null && sourceLevelHostList.nonEmpty) {
+          metricDef.hosts = sourceLevelHostList
+        }
+      }
+    }
+  }
+
 }
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinition.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinition.scala
index 60198e0..47b1499 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinition.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/main/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinition.scala
@@ -22,10 +22,6 @@ import javax.xml.bind.annotation.XmlRootElement
 import 
org.apache.ambari.metrics.adservice.metadata.MetricSourceDefinitionType.MetricSourceDefinitionType
 import org.apache.ambari.metrics.adservice.model.AnomalyType.AnomalyType
 
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.module.scala.DefaultScalaModule
-import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
-
 /*
 {
  "definition-name": "host-memory",
@@ -45,27 +41,10 @@ import 
com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
 }
 */
 
-/*
-
-On Startup
-Read input definitions directory, parse the JSONs
-Create / Update the metric definitions in DB
-Convert metric definitions to Map<MetricKey, MetricDefinition>
-
-What to do want to have in memory?
-Map of Metric Key -> List<Component Definitions>
-
-What do we use metric definitions for?
-Anomaly GET - Associate definition information as well.
-Definition CRUD - Get definition given definition name
-Get set of metrics that are being tracked
-Return definition information for a metric key
-Given a metric definition name, return set of metrics.
-
-*/
 
+@SerialVersionUID(10001L)
 @XmlRootElement
-class MetricSourceDefinition {
+class MetricSourceDefinition extends Serializable{
 
   var definitionName: String = _
   var appId: String = _
@@ -103,17 +82,4 @@ class MetricSourceDefinition {
     val that = obj.asInstanceOf[MetricSourceDefinition]
     definitionName.equals(that.definitionName)
   }
-}
-
-object MetricSourceDefinition {
-  val mapper = new ObjectMapper() with ScalaObjectMapper
-  mapper.registerModule(DefaultScalaModule)
-
-  def serialize(definition: MetricSourceDefinition) : String = {
-    mapper.writeValueAsString(definition)
-  }
-
-  def deserialize(definitionString: String) : MetricSourceDefinition = {
-    mapper.readValue[MetricSourceDefinition](definitionString)
-  }
 }
\ No newline at end of file
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfigTest.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfigTest.scala
index 8e3a949..104ccea 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfigTest.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/app/AnomalyDetectionAppConfigTest.scala
@@ -44,7 +44,7 @@ class AnomalyDetectionAppConfigTest extends FunSuite {
 
     assert(config.isInstanceOf[AnomalyDetectionAppConfig])
 
-    
assert(config.getMetricManagerServiceConfiguration.getInputDefinitionDirectory 
== "/etc/adservice/conf/input-definitions-directory")
+    
assert(config.getMetricDefinitionServiceConfiguration.getInputDefinitionDirectory
 == "/etc/ambari-metrics-anomaly-detection/conf")
 
     assert(config.getMetricCollectorConfiguration.getHostPortList == 
"host1:6188,host2:6188")
 
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/common/SeasonTest.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/common/SeasonTest.scala
index 4d542e8..a823c73 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/common/SeasonTest.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/common/SeasonTest.scala
@@ -78,9 +78,9 @@ class SeasonTest extends FunSuite {
   test("testSerialize") {
     val season1 : Season = Season(Range(Calendar.MONDAY,Calendar.FRIDAY), 
Range(9,17))
 
-    val seasonString = Season.serialize(season1)
+    val seasonString = Season.toJson(season1)
 
-    val season2 : Season = Season.deserialize(seasonString)
+    val season2 : Season = Season.fromJson(seasonString)
     assert(season1 == season2)
 
     val season3 : Season = Season(Range(Calendar.MONDAY,Calendar.THURSDAY), 
Range(9,17))
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceTest.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceTest.scala
similarity index 73%
rename from 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceTest.scala
rename to 
ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceTest.scala
index 8e19a0f..d3454f2 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricManagerServiceTest.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricDefinitionServiceTest.scala
@@ -24,7 +24,7 @@ import org.easymock.EasyMock.{anyObject, expect, 
expectLastCall, replay}
 import org.scalatest.FunSuite
 import org.scalatest.easymock.EasyMockSugar
 
-class MetricManagerServiceTest extends FunSuite {
+class MetricDefinitionServiceTest extends FunSuite {
 
   test("testAddDefinition") {
 
@@ -42,14 +42,14 @@ class MetricManagerServiceTest extends FunSuite {
     
expect(adMetadataStoreAccessor.saveInputDefinition(newDef)).andReturn(true).once()
     replay(adMetadataStoreAccessor)
 
-    val metricManagerService: MetricManagerServiceImpl = new 
MetricManagerServiceImpl(new AnomalyDetectionAppConfig, adMetadataStoreAccessor)
+    val metricDefinitionService: MetricDefinitionServiceImpl = new 
MetricDefinitionServiceImpl(new AnomalyDetectionAppConfig, 
adMetadataStoreAccessor)
 
-    metricManagerService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
+    metricDefinitionService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
 
-    metricManagerService.addDefinition(newDef)
+    metricDefinitionService.addDefinition(newDef)
 
-    assert(metricManagerService.metricSourceDefinitionMap.size == 4)
-    
assert(metricManagerService.metricSourceDefinitionMap.get("testDefinition") != 
null)
+    assert(metricDefinitionService.metricSourceDefinitionMap.size == 4)
+    
assert(metricDefinitionService.metricSourceDefinitionMap.get("testDefinition") 
!= null)
   }
 
   test("testGetDefinitionByName") {
@@ -64,11 +64,11 @@ class MetricManagerServiceTest extends FunSuite {
     
expect(adMetadataStoreAccessor.getSavedInputDefinitions).andReturn(definitions.toList).once()
     replay(adMetadataStoreAccessor)
 
-    val metricManagerService: MetricManagerServiceImpl = new 
MetricManagerServiceImpl(new AnomalyDetectionAppConfig, adMetadataStoreAccessor)
+    val metricDefinitionService: MetricDefinitionServiceImpl = new 
MetricDefinitionServiceImpl(new AnomalyDetectionAppConfig, 
adMetadataStoreAccessor)
 
-    metricManagerService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
+    metricDefinitionService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
     for (i <- 1 to 3) {
-      val definition: MetricSourceDefinition = 
metricManagerService.getDefinitionByName("TestDefinition" + i)
+      val definition: MetricSourceDefinition = 
metricDefinitionService.getDefinitionByName("TestDefinition" + i)
       assert(definition != null)
     }
   }
@@ -90,10 +90,10 @@ class MetricManagerServiceTest extends FunSuite {
     
expect(adMetadataStoreAccessor.getSavedInputDefinitions).andReturn(definitions.toList).once()
     replay(adMetadataStoreAccessor)
 
-    val metricManagerService: MetricManagerServiceImpl = new 
MetricManagerServiceImpl(new AnomalyDetectionAppConfig, adMetadataStoreAccessor)
+    val metricDefinitionService: MetricDefinitionServiceImpl = new 
MetricDefinitionServiceImpl(new AnomalyDetectionAppConfig, 
adMetadataStoreAccessor)
 
-    metricManagerService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
-    val definitionsByAppId: List[MetricSourceDefinition] = 
metricManagerService.getDefinitionByAppId("testAppId")
+    metricDefinitionService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
+    val definitionsByAppId: List[MetricSourceDefinition] = 
metricDefinitionService.getDefinitionByAppId("testAppId")
     assert(definitionsByAppId.size == 2)
   }
 
@@ -115,15 +115,15 @@ class MetricManagerServiceTest extends FunSuite {
     
expect(adMetadataStoreAccessor.removeInputDefinition(anyObject[String])).andReturn(true).times(2)
     replay(adMetadataStoreAccessor)
 
-    val metricManagerService: MetricManagerServiceImpl = new 
MetricManagerServiceImpl(new AnomalyDetectionAppConfig, adMetadataStoreAccessor)
+    val metricDefinitionService: MetricDefinitionServiceImpl = new 
MetricDefinitionServiceImpl(new AnomalyDetectionAppConfig, 
adMetadataStoreAccessor)
 
-    metricManagerService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
+    metricDefinitionService.setAdMetadataStoreAccessor(adMetadataStoreAccessor)
 
-    var success: Boolean = 
metricManagerService.deleteDefinitionByName("TestDefinition1")
+    var success: Boolean = 
metricDefinitionService.deleteDefinitionByName("TestDefinition1")
     assert(success)
-    success = metricManagerService.deleteDefinitionByName("TestDefinition2")
+    success = metricDefinitionService.deleteDefinitionByName("TestDefinition2")
     assert(!success)
-    success = metricManagerService.deleteDefinitionByName("TestDefinition3")
+    success = metricDefinitionService.deleteDefinitionByName("TestDefinition3")
     assert(success)
   }
 
diff --git 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinitionTest.scala
 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinitionTest.scala
index c4d639c..0149673 100644
--- 
a/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinitionTest.scala
+++ 
b/ambari-metrics/ambari-metrics-anomaly-detection-service/src/test/scala/org/apache/ambari/metrics/adservice/metadata/MetricSourceDefinitionTest.scala
@@ -17,6 +17,7 @@
 
 package org.apache.ambari.metrics.adservice.metadata
 
+import org.apache.commons.lang.SerializationUtils
 import org.scalatest.FunSuite
 
 class MetricSourceDefinitionTest extends FunSuite {
@@ -46,6 +47,10 @@ class MetricSourceDefinitionTest extends FunSuite {
     val msd1 : MetricSourceDefinition = new 
MetricSourceDefinition("testDefinition", "testAppId", 
MetricSourceDefinitionType.API)
     val msd2 : MetricSourceDefinition = new 
MetricSourceDefinition("testDefinition", "testAppId2", 
MetricSourceDefinitionType.API)
     assert(msd1 == msd2)
+
+    val msd3 : MetricSourceDefinition = new 
MetricSourceDefinition("testDefinition1", "testAppId", 
MetricSourceDefinitionType.API)
+    val msd4 : MetricSourceDefinition = new 
MetricSourceDefinition("testDefinition2", "testAppId2", 
MetricSourceDefinitionType.API)
+    assert(msd3 != msd4)
   }
 
   test("testRemoveMetricDefinition") {
@@ -61,10 +66,10 @@ class MetricSourceDefinitionTest extends FunSuite {
 
   test("serializeDeserialize") {
     val msd : MetricSourceDefinition = new 
MetricSourceDefinition("testDefinition", "testAppId", 
MetricSourceDefinitionType.API)
-    val msdString: String = MetricSourceDefinition.serialize(msd)
-    assert(msdString.nonEmpty)
+    val msdByteArray: Array[Byte] = SerializationUtils.serialize(msd)
+    assert(msdByteArray.nonEmpty)
 
-    val msd2: MetricSourceDefinition = 
MetricSourceDefinition.deserialize(msdString)
+    val msd2: MetricSourceDefinition = 
SerializationUtils.deserialize(msdByteArray).asInstanceOf[MetricSourceDefinition]
     assert(msd2 != null)
     assert(msd == msd2)
 

-- 
To stop receiving notification emails like this one, please contact
avija...@apache.org.

Reply via email to