[
https://issues.apache.org/jira/browse/SOLR-10413?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Steve Rowe reopened SOLR-10413:
-------------------------------
Policeman Jenkins found a reproducing seed for a failure that started with
{{c93409392d}}, the first commit on this issue (according to {{git bisect}})
[https://jenkins.thetaphi.de/job/Lucene-Solr-master-Solaris/1304/]:
{noformat}
[junit4] ERROR 0.04s J1 | TestCollectionAPIs.testCommands <<<
[junit4] > Throwable #1: java.lang.RuntimeException: Error in command
payload[{
[junit4] > "modify":{
[junit4] > "rule":"replica:*,cores:<5",
[junit4] > "autoAddReplicas":false},
[junit4] > "errorMessages":["Value is not valid, expected one of:
[ARRAY], found: String"]}]
[junit4] > at
__randomizedtesting.SeedInfo.seed([41BCD0097E4852E2:608019F11472B286]:0)
[junit4] > at
org.apache.solr.handler.admin.TestCollectionAPIs.makeCall(TestCollectionAPIs.java:189)
[junit4] > at
org.apache.solr.handler.admin.TestCollectionAPIs.compareOutput(TestCollectionAPIs.java:148)
[junit4] > at
org.apache.solr.handler.admin.TestCollectionAPIs.testCommands(TestCollectionAPIs.java:120)
[junit4] > at java.lang.Thread.run(Thread.java:748)
[junit4] > Caused by: org.apache.solr.api.ApiBag$ExceptionWithErrObject:
Error in command payload
[junit4] > at
org.apache.solr.api.ApiBag.getCommandOperations(ApiBag.java:320)
[junit4] > at
org.apache.solr.handler.admin.TestCollectionAPIs$1.getCommands(TestCollectionAPIs.java:173)
[junit4] > at
org.apache.solr.handler.admin.BaseHandlerApiSupport$1.call(BaseHandlerApiSupport.java:84)
[junit4] > at
org.apache.solr.handler.admin.TestCollectionAPIs.makeCall(TestCollectionAPIs.java:187)
[...]
[junit4] 2> NOTE: test params are: codec=Asserting(Lucene70): {},
docValues:{}, maxPointsInLeafNode=1627, maxMBSortInHeap=5.487446584455346,
sim=RandomSimilarity(queryNorm=false): {}, locale=is-IS,
timezone=America/Monterrey
[junit4] 2> NOTE: SunOS 5.11 amd64/Oracle Corporation 1.8.0_131
(64-bit)/cpus=3,threads=1,free=59314248,total=224067584
{noformat}
> v2 API: parsed JSON type should be coerced to expected type
> -----------------------------------------------------------
>
> Key: SOLR-10413
> URL: https://issues.apache.org/jira/browse/SOLR-10413
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Components: v2 API
> Reporter: Steve Rowe
> Assignee: Cao Manh Dat
> Priority: Minor
> Fix For: master (7.0)
>
> Attachments: SOLR-10413.patch, SOLR-10413.patch, SOLR-10413.patch
>
>
> v2 API request bodies are parsed as JSON and are checked via JSON schema for
> the correct types. But since the JSON parser used (noggit) accepts a relaxed
> form of JSON, it is weirdly necessary to quote some things but not others.
> For example, after {{bin/solr start -e cloud -noprompt}}, {{curl
> http://localhost:8983/v2/cluster -H 'Content-type: application/json' -d '\{
> set-property: \{ name: autoAddReplicas, val: false \} \}'}} returns:
> {noformat}
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
> <title>Error 400
> {metadata={error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject,root-error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject},errorMessages=[{set-property={name=autoAddReplicas,
> val=false}, errorMessages=[Expected type : string but found : falsein object
> : false]}],msg=Error in command payload,code=400}</title>
> </head>
> <body><h2>HTTP ERROR 400</h2>
> <p>Problem accessing /solr/____v2/cluster. Reason:
> <pre>
> {metadata={error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject,root-error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject},errorMessages=[{set-property={name=autoAddReplicas,
> val=false}, errorMessages=[Expected type : string but found : falsein object
> : false]}],msg=Error in command payload,code=400}</pre></p>
> </body>
> </html>
> {noformat}
> By contrast, if I quote the propery value, the request succeeds: {{curl
> http://localhost:8983/v2/cluster -H 'Content-type: application/json' -d '\{
> set-property: \{ name: autoAddReplicas, val: "false" \} \}'}}
> This is annoying because the property is semantically boolean, even though
> cluster properties' keys and values are always typed String.
> This error occurs because the API spec for the v2 Cluster API's
> {{set-property}} command requires {{string}} typed values - from
> {{solr/core/src/resources/apispec/cluster.Commands.json}}:
> {noformat}
> {
> "documentation": [...],
> "description": [...],
> "methods": [ "POST" ],
> "url": { "paths": [ "/cluster" ] },
> "commands": {
> [...]
> "set-property": {
> "type": "object",
> "documentation": [...],
> "description": [...],
> "properties": {
> "name": { "type": "string", "description": [...] },
> "val": { "type": "string", "description": [...] }
> [...]
> {noformat}
> I'm not sure how wide-spread the problem is, but at a minimum for this
> particular API (setting a cluster property), Solr should accept both keys and
> values of any (JSON) type and just {{toString()}} their values.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]