Skip to content

Commit 1b80133

Browse files
committed
Refactored validateNamespace signature so that RootObjectMapper.processField can call it without a Mapper reference
1 parent ddf32c4 commit 1b80133

File tree

5 files changed

+11
-25
lines changed

5 files changed

+11
-25
lines changed

server/src/main/java/org/elasticsearch/index/mapper/DefaultRootObjectMapperNamespaceValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515
public class DefaultRootObjectMapperNamespaceValidator implements RootObjectMapperNamespaceValidator {
1616
@Override
17-
public void validateNamespace(ObjectMapper.Subobjects subobjects, Mapper mapper) {}
17+
public void validateNamespace(ObjectMapper.Subobjects subobjects, String name) {}
1818

1919
// MP FIXME remove
2020
@Override

server/src/main/java/org/elasticsearch/index/mapper/MapperRegistry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public MapperRegistry(
4343
// MP TODO: remove this no-op RootObjectMapperNamespaceValidator once we know how all this is going to work
4444
this(mapperParsers, runtimeFieldParsers, metadataMapperParsers, fieldFilter, new RootObjectMapperNamespaceValidator() {
4545
@Override
46-
public void validateNamespace(ObjectMapper.Subobjects subobjects, Mapper mapper) {}
46+
public void validateNamespace(ObjectMapper.Subobjects subobjects, String name) {}
4747
});
4848
}
4949

server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapper.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -543,12 +543,7 @@ private static boolean processField(
543543
Map<String, RuntimeField> fields = RuntimeField.parseRuntimeFields((Map<String, Object>) fieldNode, parserContext, true);
544544
if (namespaceValidator != null) {
545545
for (String runtimeField : fields.keySet()) {
546-
if ("_project".equals(runtimeField) || runtimeField.startsWith("_project.")) {
547-
throw new IllegalArgumentException(
548-
"Runtime mapping rejected. No mappings of [_project] are allowed in order "
549-
+ "to avoid conflicts with project metadata tags in serverless."
550-
);
551-
}
546+
namespaceValidator.validateNamespace(null, runtimeField);
552547
}
553548
}
554549
builder.addRuntimeFields(fields);
@@ -568,7 +563,7 @@ public int getTotalFieldsCount() {
568563
@Override
569564
protected void validateSubField(Mapper mapper, MappingLookup mappers) {
570565
if (namespaceValidator != null) {
571-
namespaceValidator.validateNamespace(subobjects(), mapper);
566+
namespaceValidator.validateNamespace(subobjects(), mapper.leafName());
572567
}
573568
super.validateSubField(mapper, mappers);
574569
}

server/src/main/java/org/elasticsearch/index/mapper/RootObjectMapperNamespaceValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ public interface RootObjectMapperNamespaceValidator {
1717
/**
1818
* If the namespace in the mapper is not allowed, an Exception should be thrown.
1919
*/
20-
void validateNamespace(ObjectMapper.Subobjects subobjects, Mapper mapper);
20+
void validateNamespace(ObjectMapper.Subobjects subobjects, String name);
2121
}

server/src/main/java/org/elasticsearch/index/mapper/ServerlessRootObjectMapperNamespaceValidator.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package org.elasticsearch.index.mapper;
1111

1212
import org.elasticsearch.common.Strings;
13+
import org.elasticsearch.core.Nullable;
1314

1415
/**
1516
* In serverless, prohibits mappings that start with _project, including subfields such as _project.foo.
@@ -19,24 +20,14 @@
1920
public class ServerlessRootObjectMapperNamespaceValidator implements RootObjectMapperNamespaceValidator {
2021
private static final String SERVERLESS_RESERVED_NAMESPACE = "_project";
2122

22-
// MP TODO: we can also pass in a MappingLookup - would that help here?
2323
@Override
24-
public void validateNamespace(ObjectMapper.Subobjects subobjects, Mapper mapper) { // TODO: stop passing in Mapper and pass in String
25-
// fieldName
26-
if (mapper.leafName().equals(SERVERLESS_RESERVED_NAMESPACE)) {
27-
System.err.println("XX: 1A: " + mapper.leafName());
28-
System.err.println("XX: 1B: " + mapper.fullPath());
29-
System.err.println("XX: 1C: " + mapper.typeName());
30-
System.err.println("XX: 1D: " + mapper);
24+
public void validateNamespace(@Nullable ObjectMapper.Subobjects subobjects, String name) {
25+
if (name.equals(SERVERLESS_RESERVED_NAMESPACE)) {
3126
throw new IllegalArgumentException(generateErrorMessage());
3227
} else if (subobjects != ObjectMapper.Subobjects.ENABLED) {
33-
System.err.println("YYY: 2A: " + mapper.leafName());
34-
System.err.println("YYY: 2B: " + mapper.fullPath());
35-
System.err.println("YYY: 2C: " + mapper.typeName());
36-
System.err.println("YYY: 2D: " + mapper);
37-
// leafName here will be something like _project.myfield, rather than just _project
38-
if (mapper.leafName().startsWith(SERVERLESS_RESERVED_NAMESPACE + ".")) {
39-
throw new IllegalArgumentException(generateErrorMessage(mapper.leafName()));
28+
// name here will be something like _project.my_field, rather than just _project
29+
if (name.startsWith(SERVERLESS_RESERVED_NAMESPACE + ".")) {
30+
throw new IllegalArgumentException(generateErrorMessage(name));
4031
}
4132
}
4233
}

0 commit comments

Comments
 (0)