Skip to content

Unable to parse SystemIndexMigrationTaskParams and SystemIndexMigrationTaskState #84115

@pgomulka

Description

@pgomulka

Elasticsearch Version

7.17

Installed Plugins

No response

Java Version

bundled

OS Version

macos

Problem Description

It looks like we are unable to parse SystemIndexMigrationTaskState and SystemIndexMigrationTaskParams from cluster state.
I think we are missing the list of NamedXContetnParsers

 public static List<NamedXContentRegistry.Entry> getNamedXContentParsers() {
        return    org.elasticsearch.core.List.of(
                new NamedXContentRegistry.Entry(PersistentTaskParams.class, new ParseField(SystemIndexMigrationTaskParams.SYSTEM_INDEX_UPGRADE_TASK_NAME),
                    SystemIndexMigrationTaskParams::fromXContent)    ,
                new NamedXContentRegistry.Entry(PersistentTaskState.class, new ParseField(SystemIndexMigrationTaskParams.SYSTEM_INDEX_UPGRADE_TASK_NAME),
                    SystemIndexMigrationTaskState::fromXContent)
        );
    }

and there might be a mistake in

public class SystemIndexMigrationTaskState implements PersistentTaskState {

Steps to Reproduce

A unit test reproduces the problem

    public void testUpgradeSystemIndices() throws IOException {
        String data = "{\n" +
            "          \"id\" : \"upgrade-system-indices\",\n" +
            "          \"task\" : {\n" +
            "            \"upgrade-system-indices\" : {\n" +
            "              \"params\" : { },\n" +
            "              \"state\" : {\n" +
            "                \"current_index\" : \".tasks\",\n" +
            "                \"current_feature\" : \"tasks\",\n" +
            "                \"feature_metadata\" : { }\n" +
            "              }\n" +
            "            }\n" +
            "          }\n" +
            "        }\n" +
            "    } ";


        XContentParser parser = JsonXContent.jsonXContent.createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, data);
        PersistentTasksCustomMetadata.PERSISTENT_TASK_PARSER.parse(parser, null);
    }

it will pass with this registry

     NamedXContentRegistry registry = new NamedXContentRegistry(
            org.elasticsearch.core.List.of(
                new NamedXContentRegistry.Entry(PersistentTaskParams.class, new ParseField(SystemIndexMigrationTaskParams.SYSTEM_INDEX_UPGRADE_TASK_NAME),
                    SystemIndexMigrationTaskParams::fromXContent)    ,
                new NamedXContentRegistry.Entry(PersistentTaskState.class, new ParseField(SystemIndexMigrationTaskParams.SYSTEM_INDEX_UPGRADE_TASK_NAME),
                    SystemIndexMigrationTaskState::fromXContent)
            )
        );

Logs (if relevant)

org.elasticsearch.xcontent.XContentParseException: [5:26] [tasks] failed to parse field [task]

	at __randomizedtesting.SeedInfo.seed([AAF90DD8FF67D929:DFEEA1E8FDED2720]:0)
	at org.elasticsearch.xcontent.ObjectParser.throwFailedToParse(ObjectParser.java:609)
	at org.elasticsearch.xcontent.ObjectParser.parseValue(ObjectParser.java:604)
	at org.elasticsearch.xcontent.ObjectParser.parseSub(ObjectParser.java:616)
	at org.elasticsearch.xcontent.ObjectParser.parse(ObjectParser.java:320)
	at org.elasticsearch.xcontent.ObjectParser.parse(ObjectParser.java:260)
	at org.elasticsearch.xcontent.ObjectParserTests.testUpgradeSystemIndices(ObjectParserTests.java:1126)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1750)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$8.evaluate(RandomizedRunner.java:938)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$9.evaluate(RandomizedRunner.java:974)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$10.evaluate(RandomizedRunner.java:988)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at org.apache.lucene.util.TestRuleSetupTeardownChained$1.evaluate(TestRuleSetupTeardownChained.java:49)
	at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:45)
	at org.apache.lucene.util.TestRuleThreadAndTestName$1.evaluate(TestRuleThreadAndTestName.java:48)
	at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:64)
	at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:47)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:368)
	at com.carrotsearch.randomizedtesting.ThreadLeakControl.forkTimeoutingTask(ThreadLeakControl.java:817)
	at com.carrotsearch.randomizedtesting.ThreadLeakControl$3.evaluate(ThreadLeakControl.java:468)
	at com.carrotsearch.randomizedtesting.RandomizedRunner.runSingleTest(RandomizedRunner.java:947)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$5.evaluate(RandomizedRunner.java:832)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:883)
	at com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:894)
	at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:45)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at org.apache.lucene.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:41)
	at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
	at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at org.apache.lucene.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53)
	at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:47)
	at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:64)
	at org.apache.lucene.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:54)
	at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
	at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:368)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.elasticsearch.xcontent.XContentParseException: [5:26] [task] failed to parse field [upgrade-system-indices]
	at org.elasticsearch.xcontent.ObjectParser.rethrowFieldParseFailure(ObjectParser.java:547)
	at org.elasticsearch.xcontent.ObjectParser.lambda$declareNamedObjects$12(ObjectParser.java:487)
	at org.elasticsearch.xcontent.ObjectParser.lambda$declareNamedObjects$13(ObjectParser.java:498)
	at org.elasticsearch.xcontent.ObjectParser.parseValue(ObjectParser.java:602)
	... 40 more
Caused by: org.elasticsearch.xcontent.XContentParseException: [5:26] [named] failed to parse field [params]
	at org.elasticsearch.xcontent.ObjectParser.throwFailedToParse(ObjectParser.java:609)
	at org.elasticsearch.xcontent.ObjectParser.parseValue(ObjectParser.java:604)
	at org.elasticsearch.xcontent.ObjectParser.parseSub(ObjectParser.java:616)
	at org.elasticsearch.xcontent.ObjectParser.parse(ObjectParser.java:320)
	at org.elasticsearch.persistent.PersistentTasksCustomMetadata.lambda$static$9(PersistentTasksCustomMetadata.java:96)
	at org.elasticsearch.xcontent.ObjectParser.lambda$declareNamedObjects$12(ObjectParser.java:485)
	... 42 more
Caused by: org.elasticsearch.xcontent.XContentParseException: named objects are not supported for this parser
	at org.elasticsearch.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:125)
	at org.elasticsearch.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:408)
	at org.elasticsearch.persistent.PersistentTasksCustomMetadata.lambda$static$6(PersistentTasksCustomMetadata.java:88)
	at org.elasticsearch.xcontent.ObjectParser.lambda$declareField$8(ObjectParser.java:424)
	at org.elasticsearch.xcontent.ObjectParser.parseValue(ObjectParser.java:602)
	... 46 more

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions