[ 
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]

Reply via email to