go


Make a blocking/consistent/predictable reply/request on ScyllaDB via GoCQL


Sometimes when running a command it shows a timeout (gocql: no response received from cassandra within timeout period), for example:
package main
import "fmt"
import "github.com/gocql/gocql"
import "time"
import "log"
func main() {
clust := gocql.NewCluster(`172.17.0.2`) // docker#localhost
clust.Keyspace = `test4`
clust.RetryPolicy = &gocql.SimpleRetryPolicy{NumRetries: 3}
db, err := clust.CreateSession()
defer db.Close()
if err != nil {
log.Fatal(err)
return
}
fmt.Println(`test4: scylladb`)
if err := db.Query(`DROP TABLE test4`).Exec(); err != nil {
log.Println(err)
}
if err := db.Query(`CREATE TABLE test4 (bucket text, k text, v TEXT, PRIMARY KEY(bucket,k))`).Exec(); err != nil {
log.Fatal(err)
return
}
const max = 999
const jump = 40
t := time.Now()
for x := 1; x <= max; x++ {
err = db.Query(fmt.Sprintf(`INSERT INTO test4(bucket,k,v)VALUES('foo','%05d','%05d')`, x, x)).Exec()
if err != nil {
log.Fatal(err)
return
}
if x % 200 == 0 {
fmt.Print(`.`)
}
}
dur := time.Now().Sub(t)
fmt.Printf("INSERT: %v (%.2f ms/op)\n", dur, float64(dur.Nanoseconds()) / 1000000 / max)
t = time.Now()
for x := 1; x <= max; x++ {
err = db.Query(fmt.Sprintf(`UPDATE test4 SET v = '%06d' WHERE bucket = 'foo' AND k = '%05d'`, x, x)).Exec()
if err != nil {
log.Fatal(err)
return
}
if x % 200 == 0 {
fmt.Print(`.`)
}
}
dur = time.Now().Sub(t)
fmt.Printf("UPDATE: %v (%.2f ms/op)\n", dur, float64(dur.Nanoseconds()) / 1000000 / max)
t = time.Now()
ops := int64(0)
for y := 2; y < jump; y++ {
for x := max - 1; x > 0; x -= y {
ops++
iter := db.Query(fmt.Sprintf(`SELECT k, v FROM test4 WHERE bucket = 'foo' AND k >= '%05d' ORDER BY k ASC LIMIT %d`, x, y * y)).Iter()
for {
m := map[string]interface{}{}
if !iter.MapScan(m) {
break
}
}
iter.Close()
if ops % 500 == 0 {
fmt.Print(`.`)
}
}
for x := 1; x < max; x += y {
ops++
iter := db.Query(fmt.Sprintf(`SELECT k, v FROM test4 WHERE bucket = 'foo' AND k <= '%05d' ORDER BY k DESC LIMIT %d`, x, y * y)).Iter()
for {
m := map[string]interface{}{}
if !iter.MapScan(m) {
break
}
}
iter.Close()
if ops % 500 == 0 {
fmt.Print(`.`)
}
}
}
dur = time.Now().Sub(t)
fmt.Printf("SELECT: %v (%.2f ms/op)\n", dur, float64(dur.Nanoseconds()) / 1000000 / float64(ops))
}
It shows inconsistent output:
$ go run scylla.go
test4: scylladb
2017/05/16 12:09:05 gocql: no response received from cassandra within timeout period
2017/05/16 12:09:05 gocql: no response received from cassandra within timeout period
exit status 1
$ go run scylla.go
test4: scylladb
....INSERT: 188.277521ms (0.19 ms/op)
....UPDATE: 150.403282ms (0.15 ms/op)
.............SELECT: 5.357779756s (0.82 ms/op)
$ go run scylla.go
test4: scylladb
2017/05/16 12:09:50 gocql: no response received from cassandra within timeout period
....INSERT: 142.91132ms (0.14 ms/op)
....UPDATE: 144.272872ms (0.14 ms/op)
.............SELECT: 5.268130283s (0.81 ms/op)
$ go run scylla.go
test4: scylladb
2017/05/16 12:10:00 gocql: no response received from cassandra within timeout period
2017/05/16 12:10:00 gocql: no response received from cassandra within timeout period
exit status 1
$ go run scylla.go
test4: scylladb
....INSERT: 184.402052ms (0.18 ms/op)
....UPDATE: 158.200184ms (0.16 ms/op)
.............SELECT: 5.345212835s (0.82 ms/op)
How to make it consistent? I need to be sure if a command completed successfully.. Or should I loop the DROP TABLE/CREATE TABLE command manually?

Related Links

Indentation in Go: tabs or spaces?
Golang parse a json with DYNAMIC key
How to remove an item from a slice by calling a method on the slice
“Bounded” meaning in programming
flag package in Go - do I have to always set default value?
How to iterate over different types in loop in Go?
What's the difference between new(Struct) and &Struct{} in Go?
What is err.(*os.PathError) in Go?
Slice of Writers vs pointers to Writers
converting a 6 byte slice to to little endian
Why does golang compiler think the variable is declared but not used?
Golang: Get underlying struct having the fields name as a string
Go web server does not process /delete/ pattern correctly [closed]
How to compare two version number strings in golang
Integrating existing C code to Go. Convert unsigned char poiner result to []byte
undefined attributes in an slice of node structs

Categories

HOME
spark-streaming
fuelux
cheerio
time-complexity
jax-rs
serialization
oracle-apex-5
nuget
carousel
soa
ado.net
pearson-correlation
missing-data
mvc5
azure-container-service
pkcs#11
elasticsearch-5
little-proxy
owin
job-scheduling
forgot-password
symfony-console
swagger-2.0
question2answer
parcelable
exploit
mount
expressionengine3
pic32
licensing
has-and-belongs-to-many
browser-sync
dst
simplecv
code-snippets
android-gridview
login-script
reactjs.net
jwplayer6
sql-delete
sharepoint-workflow
raft
swagger-php
jpad
tex
xdocreport
apns-php
mongoose-schema
resolution
vaadin-elements
fwrite
jboss-4.2.x
wpas
git-flow
oozie-coordinator
janus
template-toolkit
google-photos
ampps
choice
slackware
installshield-2010
avspeechsynthesizer
stream-processing
project-organization
halcon
piracy-prevention
mobiledoc-kit
vhosts
dllimport
.bash-profile
visual-sourcesafe-2005
iced-coffeescript
sha512
ansi
fail2ban
public-html
qtwebengine
apache-spark-1.3
angular-gettext
imagefilter
human-computer-interface
create.js
ss7
personalization
tinyxml
ios8-extension
spring-remoting
file-not-found
dsym
twitter-bootstrap-rails
cfcache
windows-embedded-standard
bin
artemis
inappsettingskit
epiceditor
twisted.web
alice
asplinkbutton
sqlclr
idn
panda3d
mkv
cakephp-1.2
josql
isa-swizzling
box2d-iphone
google-maps-mobile
winmain
strsep
socketserver
pos-for-.net
lobo-cobra
tui
cldc
sifr3
fdf

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App