You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by pt...@apache.org on 2018/01/22 17:41:16 UTC

[10/38] storm git commit: add basic sanity check for metrics v2 config

add basic sanity check for metrics v2 config


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/20a1cdc9
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/20a1cdc9
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/20a1cdc9

Branch: refs/heads/1.x-branch
Commit: 20a1cdc9ba04050ce8a436d1d587de45c6c6d195
Parents: cfa6cd6
Author: P. Taylor Goetz <pt...@gmail.com>
Authored: Fri Sep 29 16:06:22 2017 -0400
Committer: P. Taylor Goetz <pt...@gmail.com>
Committed: Fri Sep 29 16:06:22 2017 -0400

----------------------------------------------------------------------
 storm-core/src/jvm/org/apache/storm/Config.java |  2 +-
 .../storm/validation/ConfigValidation.java      | 40 ++++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/20a1cdc9/storm-core/src/jvm/org/apache/storm/Config.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/org/apache/storm/Config.java b/storm-core/src/jvm/org/apache/storm/Config.java
index b41b2aa..2a41a94 100644
--- a/storm-core/src/jvm/org/apache/storm/Config.java
+++ b/storm-core/src/jvm/org/apache/storm/Config.java
@@ -139,7 +139,7 @@ public class Config extends HashMap<String, Object> {
     @isString
     public static final String STORM_META_SERIALIZATION_DELEGATE = "storm.meta.serialization.delegate";
 
-    @isType(type=List.class)
+    @isListEntryCustom(entryValidatorClasses={MetricReportersValidator.class})
     public static final String STORM_METRICS_REPORTERS = "storm.metrics.reporters";
 
     /**

http://git-wip-us.apache.org/repos/asf/storm/blob/20a1cdc9/storm-core/src/jvm/org/apache/storm/validation/ConfigValidation.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/org/apache/storm/validation/ConfigValidation.java b/storm-core/src/jvm/org/apache/storm/validation/ConfigValidation.java
index fb220dd..8bcea84 100644
--- a/storm-core/src/jvm/org/apache/storm/validation/ConfigValidation.java
+++ b/storm-core/src/jvm/org/apache/storm/validation/ConfigValidation.java
@@ -493,6 +493,46 @@ public class ConfigValidation {
         }
     }
 
+    public static class MetricReportersValidator extends Validator {
+
+        @Override
+        public void validateField(String name, Object o) {
+            if(o == null) {
+                return;
+            }
+            SimpleTypeValidator.validateField(name, Map.class, o);
+            if(!((Map) o).containsKey("class") ) {
+                throw new IllegalArgumentException( "Field " + name + " must have map entry with key: class");
+            }
+            if(!((Map) o).containsKey("daemons") ) {
+                throw new IllegalArgumentException("Field " + name + " must have map entry with key: daemons");
+            } else {
+                // daemons can only be 'nimbus', 'supervisor', or 'worker'
+                Object list = ((Map)o).get("daemons");
+                if(list == null || !(list instanceof List)){
+                    throw new IllegalArgumentException("Field 'daemons' must be a non-null list.");
+                }
+                List daemonList = (List)list;
+                for(Object string : daemonList){
+                    if (string instanceof String &&
+                            (((String) string).equals("nimbus") ||
+                                    ((String) string).equals("supervisor") ||
+                                    ((String) string).equals("worker"))) {
+                        return;
+                    }
+                    throw new IllegalArgumentException("Field daemons must contain at least one of \"nimbus\", \"supervisor\", or \"worker\"");
+                }
+
+            }
+            if(((Map)o).containsKey("filter")){
+                Map filterMap = (Map)((Map)o).get("filter");
+                SimpleTypeValidator.validateField("filter", String.class, filterMap.get("class"));
+            }
+            SimpleTypeValidator.validateField(name, String.class, ((Map) o).get("class"));
+
+        }
+    }
+
     public static class MapOfStringToMapOfStringToObjectValidator extends Validator {
       @Override
       public  void validateField(String name, Object o) {