diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-11-30 12:23:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-30 12:23:42 +0100 |
commit | 04bff8d07deeee30f6b9a314a03de06a2a86662f (patch) | |
tree | 8f2bb06b82123cb1e49a5f8ce30dd80c1764af2e /config-lib/src/main/java/com/yahoo/config/ConfigInstance.java | |
parent | 9b47661ae5682e87cd963c63bdc2717896f468db (diff) |
Revert "Bratseth/apply on restart take 5"
Diffstat (limited to 'config-lib/src/main/java/com/yahoo/config/ConfigInstance.java')
-rw-r--r-- | config-lib/src/main/java/com/yahoo/config/ConfigInstance.java | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/config-lib/src/main/java/com/yahoo/config/ConfigInstance.java b/config-lib/src/main/java/com/yahoo/config/ConfigInstance.java index b47bd17a5ba..04405839a9b 100644 --- a/config-lib/src/main/java/com/yahoo/config/ConfigInstance.java +++ b/config-lib/src/main/java/com/yahoo/config/ConfigInstance.java @@ -1,16 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.logging.Level; - -import com.yahoo.config.codegen.CNode; -import com.yahoo.config.codegen.InnerCNode; -import com.yahoo.config.codegen.LeafCNode; /** * Represents an instance of an application config with a specific configId. @@ -20,13 +13,10 @@ import com.yahoo.config.codegen.LeafCNode; */ public abstract class ConfigInstance extends InnerNode { - private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(ConfigInstance.class.getName()); - public interface Builder extends ConfigBuilder { /** * Dispatches a getConfig() call if this instance's producer is of the right type - * * @param producer a config producer * @return true if this instance's producer was the correct type, and hence a getConfig call was dispatched */ @@ -36,103 +26,6 @@ public abstract class ConfigInstance extends InnerNode { String getDefNamespace(); String getDefMd5(); - /** Returns true if this instance should be applied on restart, false if it should be applied immediately */ - default boolean getApplyOnRestart() { return false; } - - default void setApplyOnRestart(boolean applyOnRestart) { throw new java.lang.UnsupportedOperationException(); } - - default ConfigInstance buildInstance(InnerCNode targetDef) { - try { - if (targetDef != null) applyDef(this, targetDef); - Class<? extends ConfigInstance> clazz = getConfigClass(getClass()); - return clazz.getConstructor(getClass()).newInstance(this); - } catch (Exception e) { - throw new ConfigurationRuntimeException(e); - } - } - - /** - * If some fields on the builder are null now, set them from the def. Do recursively. - * <p> - * If the targetDef has some schema incompatibilities, they are not handled here - * (except logging in some cases), but in ConfigInstance.serialize(). - * - * @param builder a {@link com.yahoo.config.ConfigBuilder} - * @param targetDef a config definition - * @throws Exception if applying values form config definitions fails - */ - static void applyDef(ConfigBuilder builder, InnerCNode targetDef) throws Exception { - for (Map.Entry<String, CNode> e: targetDef.children().entrySet()) { - CNode node = e.getValue(); - if (node instanceof LeafCNode) { - setLeafValueIfUnset(targetDef, builder, (LeafCNode)node); - } else if (node instanceof InnerCNode) { - // Is there a private field on the builder that matches this inner node in the def? - if (hasField(builder.getClass(), node.getName())) { - Field innerField = builder.getClass().getDeclaredField(node.getName()); - innerField.setAccessible(true); - Object innerFieldVal = innerField.get(builder); - if (innerFieldVal instanceof List) { - // inner array? Check that list elems are ConfigBuilder - List<?> innerList = (List<?>) innerFieldVal; - for (Object b : innerList) { - if (b instanceof ConfigBuilder) { - applyDef((ConfigBuilder) b, (InnerCNode) node); - } - } - } else if (innerFieldVal instanceof ConfigBuilder) { - // Struct perhaps - applyDef((ConfigBuilder) innerFieldVal, (InnerCNode) node); - } else { - // Likely a config value mismatch. That is handled in ConfigInstance.serialize() (error message, omit from response.) - } - } - } - } - } - - private static boolean hasField(Class<?> aClass, String name) { - for (Field field : aClass.getDeclaredFields()) { - if (name.equals(field.getName())) { - return true; - } - } - return false; - } - - private static void setLeafValueIfUnset(InnerCNode targetDef, Object builder, LeafCNode node) throws Exception { - if (hasField(builder.getClass(), node.getName())) { - Field field = builder.getClass().getDeclaredField(node.getName()); - field.setAccessible(true); - Object val = field.get(builder); - if (val==null) { - // Not set on builder, if the leaf node has a default value, try the private setter that takes String - try { - if (node.getDefaultValue()!=null) { - Method setter = builder.getClass().getDeclaredMethod(node.getName(), String.class); - setter.setAccessible(true); - setter.invoke(builder, node.getDefaultValue().getValue()); - } - } catch (Exception e) { - log.log(Level.SEVERE, - "For config '" + targetDef.getFullName() + "': " + - "Unable to apply the default value for field '" + node.getName() + - "' to config Builder (where it wasn't set)", - e); - } - } - } - } - - @SuppressWarnings("unchecked") - private static Class<? extends ConfigInstance> getConfigClass(Class<? extends ConfigInstance.Builder> builderClass) { - Class<?> configClass = builderClass.getEnclosingClass(); - if (configClass == null || ! ConfigInstance.class.isAssignableFrom(configClass)) { - throw new ConfigurationRuntimeException("Builder class " + builderClass + " has enclosing class " + configClass + ", which is not a ConfigInstance"); - } - return (Class<? extends ConfigInstance>) configClass; - } - } public interface Producer {} |