From f744851523a69829b96b5bf9cb153ed14a9a8161 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Thu, 7 Apr 2022 12:51:19 +0000 Subject: only produce config once per unique datatype --- .../configmodel/producers/DocumentManager.java | 27 +++++++++++++--------- 1 file 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 doneMap = new HashMap<>(); - private Map map = new IdentityHashMap<>(); - void add(Object someType) { - assert(someType != null); + private Map 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); } } } -- cgit v1.2.3