[ 
https://issues.apache.org/jira/browse/METRON-1336?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nick Allen updated METRON-1336:
-------------------------------
    Affects Version/s: 0.4.1

> Patching Can Result in Bad Configuration
> ----------------------------------------
>
>                 Key: METRON-1336
>                 URL: https://issues.apache.org/jira/browse/METRON-1336
>             Project: Metron
>          Issue Type: Bug
>    Affects Versions: 0.4.1
>            Reporter: Nick Allen
>            Assignee: Nick Allen
>             Fix For: 0.4.2
>
>
> When applying a patch with `zk_load_configs` the resulting configuration can 
> be invalid.  The resulting configuration should be validated so that a patch 
> can never result in an invalid configuration.
> For example, applying the following patch with `zk_load_config` to the 
> Profiler yields a broken Profiler configuration.
> {code}
> [  
>    {  
>       "path":"profiles",
>       "value":{  
>          "profile":"sketchy_mad",
>          "onlyif":"true",
>          "update":{  
>             "s":"OUTLIER_MAD_ADD(s, value)"
>          },
>          "init":{  
>             "s":"OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad','global', 
> PROFILE_FIXED(5, 'MINUTES')))"
>          },
>          "foreach":"'global'",
>          "result":"s"
>       },
>       "op":"add"
>    }
> ]
> {code}
> The broken configuration is only discovered after dumping the configuration.
> {code}
> $ bin/zk_load_configs.sh -z $ZOOKEEPER -m DUMP -c PROFILER
> Exception in thread "main" java.lang.RuntimeException: Unable to load {
>   "profiles" : {
>     "profile" : "sketchy_mad",
>     "onlyif" : "true",
>     "update" : {
>       "s" : "OUTLIER_MAD_ADD(s, value)"
>     },
>     "init" : {
>       "s" : "OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad','global', 
> PROFILE_FIXED(5, 'MINUTES')))"
>     },
>     "foreach" : "'global'",
>     "result" : "s"
>   }
> }
>       at 
> org.apache.metron.common.configuration.ConfigurationType.lambda$static$4(ConfigurationType.java:68)
>       at 
> org.apache.metron.common.configuration.ConfigurationType.deserialize(ConfigurationType.java:93)
>       at 
> org.apache.metron.common.configuration.ConfigurationsUtils.lambda$dumpConfigs$6(ConfigurationsUtils.java:621)
>       at 
> org.apache.metron.common.configuration.ConfigurationsUtils.visitConfigs(ConfigurationsUtils.java:575)
>       at 
> org.apache.metron.common.configuration.ConfigurationsUtils.dumpConfigs(ConfigurationsUtils.java:619)
>       at 
> org.apache.metron.common.cli.ConfigurationManager.dump(ConfigurationManager.java:189)
>       at 
> org.apache.metron.common.cli.ConfigurationManager.run(ConfigurationManager.java:268)
>       at 
> org.apache.metron.common.cli.ConfigurationManager.run(ConfigurationManager.java:243)
>       at 
> org.apache.metron.common.cli.ConfigurationManager.main(ConfigurationManager.java:355)
> Caused by: org.apache.metron.jackson.databind.JsonMappingException: Can not 
> deserialize instance of java.util.ArrayList out of START_OBJECT token
>  at [Source: {
>   "profiles" : {
>     "profile" : "sketchy_mad",
>     "onlyif" : "true",
>     "update" : {
>       "s" : "OUTLIER_MAD_ADD(s, value)"
>     },
>     "init" : {
>       "s" : "OUTLIER_MAD_STATE_MERGE(PROFILE_GET('sketchy_mad','global', 
> PROFILE_FIXED(5, 'MINUTES')))"
>     },
>     "foreach" : "'global'",
>     "result" : "s"
>   }
> }; line: 2, column: 16] (through reference chain: 
> org.apache.metron.common.configuration.profiler.ProfilerConfig["profiles"])
>       at 
> org.apache.metron.jackson.databind.JsonMappingException.from(JsonMappingException.java:255)
>       at 
> org.apache.metron.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:971)
>       at 
> org.apache.metron.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:967)
>       at 
> org.apache.metron.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:327)
>       at 
> org.apache.metron.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259)
>       at 
> org.apache.metron.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249)
>       at 
> org.apache.metron.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
>       at 
> org.apache.metron.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:490)
>       at 
> org.apache.metron.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
>       at 
> org.apache.metron.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260)
>       at 
> org.apache.metron.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
>       at 
> org.apache.metron.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3807)
>       at 
> org.apache.metron.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797)
>       at org.apache.metron.common.utils.JSONUtils.load(JSONUtils.java:79)
>       at 
> org.apache.metron.common.configuration.ConfigurationType.lambda$static$4(ConfigurationType.java:66)
>       ... 8 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to