aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/config/model/producer
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2019-02-26 10:08:38 +0000
committerArne Juul <arnej@yahoo-inc.com>2019-02-26 10:08:38 +0000
commitb1c042e52f062d9920dca464c5d265f4e60c625c (patch)
treea8c7153f2c92fa92973f8449d4517548e049d7d6 /config-model/src/main/java/com/yahoo/config/model/producer
parent18cb23c8c1f41806dbfc14b28ca7a02c7a18177a (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/model/producer')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java30
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)");
}
}