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

How to get ajax post request value in Go lang?
Most flexible function signature in golang [closed]
Is there a package to marshal in and out of x-www-form-urlencoding in golang
Kill ListenAndServe in GoLang
Create a suffix tree in golang
Generate all possible n-character passwords
Why is this code Undefined Behavior?
Json data adapter
undefined error when build go file
Cross-compiling Go on Windows 64 (TDM-GCC-64) to .linux file, but keeps compiling to .exe file despite GOOS=linux
Transfer a big file in golang
Mapping struct to mysql table, and binding row to struct
Where are my GO Binaries going?
revel's .flash and .error
Unable to unmarshal number into Go Value
The last element of a slice

Categories

HOME
phpmyadmin
youtube-data-api-v3
numbers
jwplayer
solaris
socket.io
carousel
nested-if
mapbox
drop-down-menu
alamofire
ipmitool
altera
bourbon
springfox
pimcore
expressionengine3
android-maps
quantlib
testcomplete
autolisp
hard-drive
gojs
activexobject
carriage-return
reverse
parse-tree
salesforce-communities
git-rewrite-history
xdocreport
amazon-ses
node-mssql
projects-and-solutions
recurrent-neural-network
railstutorial.org
demo
odoo-website
escpos
movilizer
glm-math
congestion-control
strftime
httr
flask-restful
magento-2.0.7
clarifai
vugen
tinymce-3
amq
ngmaterial
er-diagram
css-transforms
shinobi
ampps
bootstrap-tags-input
testrail
node-request
cubism.js
hadoop-2.7.2
tinkerpop3
file-uri
observablecollection
shopping
relativelayout
ons-api
page.js
evolus-pencil
ember-cli-rails
umlgraph
sip-server
iso-prolog
create.js
functional-java
twitter-bootstrap-rails
ora-06550
hibernate-entitymanager
solace-mq
jammer
asdf
merb
pclzip
superscrollorama
argouml
pyunit
oracle-enterprise-linux
pinch
automationelement
uipagecontrol
clrstoredprocedure
http-daemon
django-paypal
easyb
glui
alsb
wysiwym
technical-debt
wspbuilder
idatareader

Resources

Database Users
RDBMS discuss
Database Dev&Adm
javascript
java
csharp
php
android
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App