[ 
https://issues.apache.org/jira/browse/CASSANDRA-11592?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15245681#comment-15245681
 ] 

Nick Tan commented on CASSANDRA-11592:
--------------------------------------

thanks [~slebresne]

yes, i'm using the 'simple int with LWT' approach for now, at least it fulfills 
the requirement with putting aside the performance.

> Feature Request - Conditional update on counters
> ------------------------------------------------
>
>                 Key: CASSANDRA-11592
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11592
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Nick Tan
>            Priority: Minor
>
> hi folks
> what i'd like to do is have a atomic update on counters if it's value is less 
> than some value.
> let's take a example, saying there is a `room`, the capacity is 50 peoples, 
> now i'd like to track the number of peoples join the room. if the counter 
> exceed the room capacity, i'd like to get error notified.
> table define:
> {code:sql}
> CREATE TABLE IF NOT EXISTS room (
>     id uuid,
>     name text,
>     capacity int,
>     PRIMARY KEY(id)
> )
> CREATE TABLE IF NOT EXISTS people_in_room (
>     room_id uuid,
>     num counter,    -- the current number of people in the room
>     PRIMARY KEY(room_id)
> );
> {code}
> pseudo update:
> {code}
> UPDATE people_in_room SET num=num+1 WHERE room_id = :room_id IF num < 
> :room_capacity;
> {code}
> the expected result is, if current num exceeds the room capacity (aka. the IF 
> clause is false), i'd like to get `Applied` column with value of 'false' 
> returned immediately.
> in this way, i can perform the atomic update for counters.
> otherwise, i need to 1) read the current counter, 2) increase it and check if 
> it exceeds the capacity in the application code. but, however, if there are 
> concurrent requests come to the app at the same time, this way is broken.
> thanks



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to