---
title:  PUT /geode/v1/{region}/{key}?op=CAS
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Update (compare-and-set) value having key with a new value if and only if the "@old" value sent matches the current value having key in region.

## Resource URL

``` pre
http://<hostname_or_http-service-bind-address>:<http-service-port>/geode/v1/{region}/{key}?op=CAS
http://<hostname_or_http-service-bind-address>:<http-service-port>/geode/v1/{region}/{key1},{key2},...{keyN}?op=CAS
```

## Parameters

<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
<th>Example Values</th>
</tr>
</thead>
<tbody>
<tr>
<td>op</td>
<td>URL parameter. When you specify CAS for this parameter, data is only updated if the @old value specified in the request body matches the existing value in the region.</td>
<td>CAS</td>
</tr>
<tr>
<td>@type</td>
<td>Specified in the response body for both the old and new value. Use this to declare the domain object type of the entry's value.</td>
<td>com.mycompany.ObjectName</td>
</tr>
<tr>
<td>@old</td>
<td>Compare this value to the existing value in the region.</td>
<td><pre class="pre codeblock"><code>{
   &quot;@type&quot;:  &quot;org.apache.geode.web.rest.domain.Order&quot;,
   &quot;purchaseOrderNo&quot;: 1121,
   &quot;customerId&quot;: 1012,
   &quot;description&quot;:  &quot;Order for  XYZ Corp&quot;,
   &quot;orderDate&quot;:  &quot;02/10/2014&quot;,
   &quot;deliveryDate&quot;:  &quot;02/20/2014&quot;,
   &quot;contact&quot;:  &quot;Jelly Bean&quot;,
   &quot;email&quot;:  &quot;jelly.bean@example.com&quot;,
   &quot;phone&quot;:  &quot;01-2048096&quot;,
   &quot;items&quot;: [
      {
         &quot;itemNo&quot;: 1,
         &quot;description&quot;:  &quot;Product-100&quot;,
         &quot;quantity&quot;: 12,
         &quot;unitPrice&quot;: 5,
         &quot;totalPrice&quot;: 60
      }
  ],
   &quot;totalPrice&quot;: 225
}</code></pre></td>
</tr>
<tr>
<td>@new</td>
<td>If @old value matches existing value, use this value to replace the existing value.</td>
<td><pre class="pre codeblock"><code>{
   &quot;@type&quot;:  &quot;org.apache.geode.web.rest.domain.Order&quot;,
   &quot;purchaseOrderNo&quot;: 1121,
   &quot;customerId&quot;: 1013,
   &quot;description&quot;:  &quot;Order for  New Corp&quot;,
   &quot;orderDate&quot;:  &quot;02/10/2014&quot;,
   &quot;deliveryDate&quot;:  &quot;02/25/2014&quot;,
   &quot;contact&quot;:  &quot;Vanilla Bean&quot;,
   &quot;email&quot;:  &quot;vanilla.bean@example.com&quot;,
   &quot;phone&quot;:  &quot;01-2048096&quot;,
   &quot;items&quot;: [
      {
         &quot;itemNo&quot;: 12345,
         &quot;description&quot;:  &quot;part 123&quot;,
         &quot;quantity&quot;: 12,
         &quot;unitPrice&quot;: 29.99,
         &quot;totalPrice&quot;: 149.95
      }
  ],
   &quot;totalPrice&quot;: 149.95
}</code></pre></td>
</tr>
</tbody>
</table>

## Example Request

``` pre
Request Payload: application/json

PUT /geode/v1/orders/2?op=CAS

Accept: application/json
Content-Type: application/json
{
    "@old": {
         "@type":  "org.apache.geode.web.rest.domain.Order",
         "purchaseOrderNo": 1121,
         "customerId": 1012,
         "description":  "Order for  XYZ Corp",
         "orderDate":  "02/10/2014",
         "deliveryDate":  "02/20/2014",
         "contact":  "Jelly Bean",
         "email":  "jelly.bean@example.com",
         "phone":  "01-2048096",
         "items": [
            {
                 "itemNo": 1,
                 "description":  "Product-100",
                 "quantity": 12,
                 "unitPrice": 5,
                 "totalPrice": 60
            }
        ],
         "totalPrice": 225
    },
     "@new ": {
         "@type":  "org.apache.geode.web.rest.domain.Order",
         "purchaseOrderNo": 1121,
         "customerId": 1013,
         "description":  "Order for  New Corp",
         "orderDate":  "02/10/2014",
         "deliveryDate":  "02/25/2014",
         "contact":  "Vanilla Bean",
         "email":  "vanillabean@example.com",
         "phone":  "01-2048096",
         "items": [
            {
                 "itemNo": 12345,
                 "description":  "part 123",
                 "quantity": 12,
                 "unitPrice": 29.99,
                 "totalPrice": 149.95
            }
        ],
         "totalPrice": 149.95
    }
}
```

## Example Success Response

``` pre
Response Payload: null

200 OK
```

## Error Codes

| Status Code               | Description                                                                                                                      |
|---------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| 400 BAD REQUEST           | Returned if the supplied key is not present in the region.                                                                       |
| 404 NOT FOUND             | Returned if the region is not found.                                                                                             |
| 409 CONFLICT              | Returned if the provided @old value of the key does not match the current value of the key.                                      |
| 500 INTERNAL SERVER ERROR | Error encountered at <%=vars.product_name%> server. Check the HTTP response body for a stack trace of the exception. |

## Example Error Response

``` pre
Response-payload: application/json

409 Conflict
Content-Type: application/json
{
     "purchaseOrderNo": 1121,
     "customerId": 1012,
     "description":  "Order for  XYZ Corp",
     "orderDate":  "02/10/2014",
     "deliveryDate":  "02/20/2014",
     "contact":  "Jelly Bean",
     "email":  "jelly.bean@example.com",
     "phone":  "01-2048096",
     "items": [
        {
             "itemNo": 1,
             "description":  "Product-100",
             "quantity": 12,
             "unitPrice": 5,
             "totalPrice": 60
        }
    ],
     "totalPrice": 225
}
```

## Implementation Notes

If the "@old" value sent by the client in the HTTP request, along with the "@new" value, does not match the existing value having key in region, then a 409 - CONFLICT error is returned indicating the mismatch in expected state. The "@old" and current value must match in order for the key to be assigned the "@new" value.

If a "CONFLICT" occurs, it is a simple matter for the client to issue a HTTP GET request for the Key (GET /geode/v1/orders/222) to get a updated copy of the value. CAS is similar to optimistic locking (as opposed to optimistic locking assuming the value will change between the time a client requests a value and subsequently updates the value) in that it assumes the client's state is up-to-date when the client tries to update, but if not then fail, hence the 409 - CONFLICT.
