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

golang: dynamic composition of variadic function parameter
Golang Accessing Template Variables From Included Templates [duplicate]
golang buffer channel unexpected result
How to add a Resource or Endpoint in a CoAP server program Golang
Use range channel in go error fatal [duplicate]
S3 GetObject returns content but reading from the body does not fill the buffer
How to import a variable from an init function (inside main.go) to a different file in go?
Why golang slice is empty after initialization?
How can I find function usage in files other than go?
Too many arguments to return error
Global variable declaration on Gradle
Using Go and Revel, getting error c.RenderArgs is Undefined (possibly outdated?)
Go 1.7 Cross Compilation from Windows to Linux/Ubuntu
How can i active Javascript? Use golang, PhantomJS(agouti)
How to detect dead RabbitMQ connection
Calling a method on a nil struct pointer doesn't panic. Why not?

Categories

HOME
phpword
polymer
jmeter
jax-rs
cakephp-3.4
spring-session
jtextpane
opengl-3
pattern-matching
fabric.io
mel
distribution
mxgraph
enterprise-architect
flatpak
dynamic-sql
intershop
chargify
vuejs
forgot-password
google-picker
boost-icl
poedit
visual-studio-extensions
direct3d11
perlbrew
definitelytyped
itunes
fable-f#
appirater
jasmine-node
ms-access-2003
inversion-of-control
ceylon
ntp
fossil
flatmap
android-augmented-reality
bc
magento-1.9.3
trigonometry
visa
laravel-elixir
apollostack
signal-strength
apache-spark-dataset
strftime
openal
opennms
launchctl
corruption
static-cast
boxing
headless
flac
objectscript
visual-studio-2008-sp1
slackware
jodd
rspec2
synonym
tooleap
dimension
android-wake-lock
omniauth-facebook
nupic
findfirst
halcon
exim4
httpruntime.cache
design-principles
directdraw
amiga
mirror
apache-commons-daemon
dbaccess
rapidsvn
jbake
contrast
human-computer-interface
raygun
unix-socket
websphere-esb
git-repo
multitasking
rfc5322
ora-06550
mt4j
eclipse-kepler
joomla-template
idn
saleslogix
boost-signals
lambdaj
httponly
screen-size
catransform3d
jqote
facebook-iframe
message-passing
nstokenfield
asynchronous-wcf-call
movieplayer

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