[ 
https://issues.apache.org/jira/browse/SOLR-15150?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chris M. Hostetter updated SOLR-15150:
--------------------------------------
    Attachment: SOLR-15150.patch
        Status: Open  (was: Open)

Attached patch implements this idea using a new 
{{"require.inplace.atomic.updates"}} boolean param – suggestions for better 
names would be appreciated.

The semantics of this param are such that it has no effect on regular updates 
(ie: adding/replacing a document) but for any Atomic Update, a value of 
{{"true"}} will cause the update to fail if the update can't be done In-Place.

I think these semantics are important, as it will allow solr admins to hardcode 
{{"require.inplace.atomic.updates=true"}} in their {{/update}} handler defaults 
if they wish...
{noformat}
$ curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"inplace",
     "type":"pint",
     "multiValued":false,
     "stored":false,
     "indexed":false,
     "docValues":true
   }
}' http://localhost:8983/solr/techproducts/schema
{
  "responseHeader":{
    "status":0,
    "QTime":427}}


$ curl 'http://localhost:8983/solr/techproducts/update?commit=true' 
--data-binary '[{"id":"HOSS", "inplace":42}]'
{
  "responseHeader":{
    "status":0,
    "QTime":143}}
    
$ curl 
'http://localhost:8983/solr/techproducts/update?commit=true&require.inplace.atomic.updates=true'
 --data-binary '[{"id":"HOSS", "inplace":{"set":99}}]'
{
  "responseHeader":{
    "status":0,
    "QTime":62}}

$ curl 
'http://localhost:8983/solr/techproducts/update?commit=true&require.inplace.atomic.updates=true'
 --data-binary '[{"id":"HOSS", "name_s":{"set":"strings can not be updated in 
place"}}]'
{
  "responseHeader":{
    "status":400,
    "QTime":3},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"Can not satisfy 'require.inplace.atomic.updates'; Unable to update 
doc in-place: HOSS",
    "code":400}}
{noformat}

> add request level option to fail an atomic update if it can't be done 
> 'in-place'
> --------------------------------------------------------------------------------
>
>                 Key: SOLR-15150
>                 URL: https://issues.apache.org/jira/browse/SOLR-15150
>             Project: Solr
>          Issue Type: New Feature
>      Security Level: Public(Default Security Level. Issues are Public) 
>            Reporter: Chris M. Hostetter
>            Assignee: Chris M. Hostetter
>            Priority: Major
>         Attachments: SOLR-15150.patch
>
>
> When "In-Place" DocValue updates were added to Solr, the choice was made to 
> re-use the existing "Atomic Update" syntax, and use the DocValue updating 
> code if possible based on the index & schema, otherwise fall back to the 
> existing Atomic Update logic (to re-index the entire document). In essence, 
> "In-Place Atomic Updates" are treated as a (possible) optimization to 
> "regular" Atomic Updates
> This works fine, but it leaves open the possibility of a "gotcha" situation 
> where users may (reasonably) assume that an update can be done "In-Place" but 
> some aspect of the schema prevents it, and the performance of the updates 
> doesn't meet expectations (notably in the case of things like deeply nested 
> documents, where the re-indexing cost is multiplicative based on the total 
> size of the document tree)
> I think it would be a good idea to support an optional request param users 
> can specify with the semantics that say "If this update is an Atomic Update, 
> fail to execute it unless it can be done In-Place"



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to