[
https://issues.apache.org/jira/browse/CASSANDRA-8892?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksey Yeschenko resolved CASSANDRA-8892.
------------------------------------------
Resolution: Duplicate
Closing as duplicate of CASSANDRA-6123 for now.
> Read after write inconsistent even on single-node cluster
> ---------------------------------------------------------
>
> Key: CASSANDRA-8892
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8892
> Project: Cassandra
> Issue Type: Bug
> Environment: Centos 6.6, Cassandra 2.0.12
> Reporter: Dan Kinder
> Priority: Minor
>
> Posted on mailing list, original email:
> I had been having the same problem as in those older post:
> http://mail-archives.apache.org/mod_mbox/cassandra-user/201411.mbox/%3CCAORswtz+W4Eg2CoYdnEcYYxp9dARWsotaCkyvS5M7+Uo6HT1=a...@mail.gmail.com%3E
> To summarize it, on my local box with just one cassandra node I can update
> and then select the updated row and get an incorrect response.
> My understanding is this may have to do with not having fine-grained enough
> timestamp resolution, but regardless I'm wondering: is this actually a bug or
> is there any way to mitigate it? It causes sporadic failures in our unit
> tests, and having to Sleep() between tests isn't ideal. At least confirming
> it's a bug would be nice though.
> For those interested, here's a little go program that can reproduce the
> issue. When I run it I typically see:
> {noformat}
> Expected 100 but got: 99
> Expected 1000 but got: 999
> {noformat}
> --- main.go: ---
> {code}
> package main
> import (
> "fmt"
> "github.com/gocql/gocql"
> )
> func main() {
> cf := gocql.NewCluster("localhost")
> db, _ := cf.CreateSession()
> // Keyspace ut = "update test"
> err := db.Query(`CREATE KEYSPACE IF NOT EXISTS ut
> WITH REPLICATION = {'class': 'SimpleStrategy',
> 'replication_factor': 1 }`).Exec()
> if err != nil {
> panic(err.Error())
> }
> err = db.Query("CREATE TABLE IF NOT EXISTS ut.test (key text, val text,
> PRIMARY KEY(key))").Exec()
> if err != nil { panic(err.Error())
> }
> err = db.Query("TRUNCATE ut.test").Exec()
> if err != nil {
> panic(err.Error())
>
> }
>
> err = db.Query("INSERT INTO ut.test (key) VALUES ('foo')").Exec()
>
> if err != nil {
>
> panic(err.Error())
>
> }
>
>
> for i := 0; i < 10000; i++ {
>
> val := fmt.Sprintf("%d", i)
>
> db.Query("UPDATE ut.test SET val = ? WHERE key = 'foo'", val).Exec()
>
>
>
> var result string
> db.Query("SELECT val FROM ut.test WHERE key = 'foo'").Scan(&result)
> if result != val {
> fmt.Printf("Expected %v but got: %v\n", val, result)
> }
> }
>
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)