diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2019-02-26 10:08:38 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2019-02-26 10:08:38 +0000 |
commit | b1c042e52f062d9920dca464c5d265f4e60c625c (patch) | |
tree | a8c7153f2c92fa92973f8449d4517548e049d7d6 /config-model/src/main/java/com/yahoo/config | |
parent | 18cb23c8c1f41806dbfc14b28ca7a02c7a18177a (diff) |
compute configId earlier
* when a component is hooked into the graph using setParent(), compute its config id
* once set, the config id cannot change
Diffstat (limited to 'config-model/src/main/java/com/yahoo/config')
-rw-r--r-- | config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java index 6cb73429971..db072afd201 100644 --- a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java +++ b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java @@ -77,7 +77,11 @@ public abstract class AbstractConfigProducer<CHILD extends AbstractConfigProduce } } - protected final void setParent(AbstractConfigProducer parent) { this.parent = parent; } + protected final void setParent(AbstractConfigProducer parent) { + this.parent = parent; + computeConfigId(); + } + public final String getSubId() { return subId; } /** @@ -363,11 +367,31 @@ public abstract class AbstractConfigProducer<CHILD extends AbstractConfigProduce configId = parentConfigId + subId; addConfigId(configId); } + computeConfigId(); + setupChildConfigIds(getConfigIdPrefix()); + } + private String getConfigIdPrefix() { if (this instanceof AbstractConfigProducerRoot || this instanceof ApplicationConfigProducerRoot) { - setupChildConfigIds(""); + return ""; + } + if (configId == null) return null; + return configId + "/"; + } + + private void computeConfigId() { + if (parent == null) return; + String parentConfigId = parent.getConfigIdPrefix(); + if (parentConfigId == null) return; + String oldConfigId = configId; + if (this instanceof AbstractConfigProducerRoot) { + configId = ""; } else { - setupChildConfigIds(configId + '/'); + configId = parentConfigId + subId; + } + if (oldConfigId == null) return; + if (!configId.equals(oldConfigId)) { + throw new IllegalArgumentException("configId cannot change "+oldConfigId+" -> "+configId+" (invalid topology change)"); } } |