diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-04-07 12:51:19 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-04-07 14:01:29 +0000 |
commit | f744851523a69829b96b5bf9cb153ed14a9a8161 (patch) | |
tree | 908f7c655504857fe33f0268bf7f99465c4a665e /config-model | |
parent | ef92091aff428b706e199c39e21be3a818f60b5b (diff) |
only produce config once per unique datatype
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java index 941116bfe21..986746bd80c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java +++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java @@ -74,13 +74,14 @@ public class DocumentManager { static private class IdxMap { private Map<Integer, Boolean> doneMap = new HashMap<>(); - private Map<Object, Integer> map = new IdentityHashMap<>(); - void add(Object someType) { - assert(someType != null); + private Map<String, Integer> map = new HashMap<>(); + private DataTypeRecognizer recognizer = new DataTypeRecognizer(); + + private void add(String name) { // the adding of "10000" here is mostly to make it more // unique to grep for when debugging int nextIdx = 10000 + map.size(); - map.computeIfAbsent(someType, k -> nextIdx); + map.computeIfAbsent(name, k -> nextIdx); } int idxOf(Object someType) { if (someType instanceof DocumentType) { @@ -89,11 +90,15 @@ public class DocumentManager { return idxOf(VespaDocumentType.INSTANCE); } } - add(someType); - return map.get(someType); + String name = recognizer.nameOf(someType); + add(name); + return map.get(name); + } + private boolean isDoneIdx(int idx) { + return doneMap.computeIfAbsent(idx, k -> false); } boolean isDone(Object someType) { - return doneMap.computeIfAbsent(idxOf(someType), k -> false); + return isDoneIdx(idxOf(someType)); } void setDone(Object someType) { assert(! isDone(someType)); @@ -101,10 +106,10 @@ public class DocumentManager { } void verifyAllDone() { for (var entry : map.entrySet()) { - Object needed = entry.getKey(); - if (! isDone(needed)) { - throw new IllegalArgumentException("Could not generate config for all needed types, missing: " + - needed + " of class " + needed.getClass()); + String needed = entry.getKey(); + int idxOfNeed = entry.getValue(); + if (! isDoneIdx(idxOfNeed)) { + throw new IllegalArgumentException("Could not generate config for all needed types, missing: " + needed); } } } |