aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-07 14:55:03 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-07 14:58:45 +0000
commit23db7be16bf266f478f773654137cac43c162fdd (patch)
treeb0214f98ed195a3e8f89279af4120217db17c0c6
parentdd8ce8c64faaf340eea43e09115c462ad923746b (diff)
struct/document name collision fails
* the unit tests claims that this works, and seems to verify that. But the generated config isn't valid.
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/NameCollisionTestCase.java21
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java1
-rw-r--r--document/src/main/java/com/yahoo/document/DocumentTypeManagerConfigurer.java11
4 files changed, 32 insertions, 5 deletions
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
index 2ce88e2148d..c42076424c7 100755
--- a/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
@@ -6,6 +6,7 @@ import com.yahoo.document.config.DocumenttypesConfig;
import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.searchdefinition.derived.Deriver;
import com.yahoo.searchdefinition.parser.ParseException;
+import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.fail;
@@ -35,9 +36,12 @@ public class StructTestCase extends AbstractSchemaTestCase {
}
@Test
+ @Ignore
public void testStructAndDocumentWithSameNames() {
try {
DocumenttypesConfig.Builder dt = Deriver.getDocumentTypesConfig("src/test/examples/structanddocumentwithsamenames.sd");
+ // while the above line may work, the config generated will fail.
+ // See also NameCollisionTestCase.
} catch (Exception e) {
fail("Should not have thrown exception " + e);
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/NameCollisionTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/NameCollisionTestCase.java
index 5fce5c06943..70f6187be12 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/NameCollisionTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/NameCollisionTestCase.java
@@ -2,7 +2,12 @@
package com.yahoo.searchdefinition.derived;
+import com.yahoo.config.model.deploy.TestProperties;
+import com.yahoo.document.DocumentTypeManager;
+import com.yahoo.searchdefinition.ApplicationBuilder;
+
import org.junit.Test;
+import static org.junit.Assert.assertThrows;
/**
* Verifies that a struct in a document type is preferred over another document type
@@ -14,7 +19,21 @@ public class NameCollisionTestCase extends AbstractExportingTestCase {
@Test
public void testNameCollision() throws Exception {
- assertCorrectDeriving("namecollision", "collisionstruct", new TestableDeployLogger());
+ var ex = assertThrows(IllegalArgumentException.class, () -> {
+ assertCorrectDeriving("namecollision", "collisionstruct",
+ new TestProperties().setExperimentalSdParsing(false),
+ new TestableDeployLogger());
+ var docman = DocumentTypeManager.fromFile("temp/namecollision/documentmanager.cfg");
+ });
+ System.err.println("MSG 1: "+ex.getClass()+" -> "+ex.getMessage());
+ var ey = assertThrows(IllegalArgumentException.class, () -> {
+ assertCorrectDeriving("namecollision", "collisionstruct",
+ new TestProperties().setExperimentalSdParsing(true),
+ new TestableDeployLogger());
+ var docman = DocumentTypeManager.fromFile("temp/namecollision/documentmanager.cfg");
+ });
+ System.err.println("MSG 2: "+ey.getMessage());
+
}
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java
index 9d93dedb709..6dd16068434 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java
@@ -251,7 +251,6 @@ public class IntermediateParserTestCase {
checkFileParses("src/test/examples/stemmingdefault.sd");
checkFileParses("src/test/examples/stemmingsetting.sd");
checkFileParses("src/test/examples/strange.sd");
- checkFileParses("src/test/examples/structanddocumentwithsamenames.sd");
checkFileParses("src/test/examples/struct.sd");
checkFileParses("src/test/examples/summaryfieldcollision.sd");
checkFileParses("src/test/examples/weightedset-summaryto.sd");
diff --git a/document/src/main/java/com/yahoo/document/DocumentTypeManagerConfigurer.java b/document/src/main/java/com/yahoo/document/DocumentTypeManagerConfigurer.java
index be2c182426e..9325e374daa 100644
--- a/document/src/main/java/com/yahoo/document/DocumentTypeManagerConfigurer.java
+++ b/document/src/main/java/com/yahoo/document/DocumentTypeManagerConfigurer.java
@@ -61,8 +61,13 @@ public class DocumentTypeManagerConfigurer implements ConfigSubscriber.SingleSub
public ConfigSubscriber configure(String configId) {
ConfigSubscriber subscriber = new ConfigSubscriber();
- subscriber.subscribe(this, DocumentmanagerConfig.class, configId);
- return subscriber;
+ try {
+ subscriber.subscribe(this, DocumentmanagerConfig.class, configId);
+ return subscriber;
+ } catch (RuntimeException e) {
+ subscriber.close();
+ throw e;
+ }
}
/** One-shot configuration; should be called on a newly constructed manager */
@@ -264,7 +269,7 @@ public class DocumentTypeManagerConfigurer implements ConfigSubscriber.SingleSub
var old = configMap.put(id, dataTypeConfig);
if (old != null) {
throw new IllegalArgumentException
- ("Multiple configs for id "+id+" first: "+old+" second: "+dataTypeConfig);
+ ("Multiple configs for id "+id+" first:\n"+old+"\nsecond:\n"+dataTypeConfig);
}
}
}