34 lines
744 B
Go
34 lines
744 B
Go
package scylla
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/config"
|
|
"github.com/gocql/gocql"
|
|
)
|
|
|
|
func NewDB(config *config.ScyllaConfig) (*gocql.Session, error) {
|
|
cluster := gocql.NewCluster(config.Hosts...)
|
|
cluster.Keyspace = config.Keyspace
|
|
cluster.Consistency = gocql.LocalQuorum
|
|
cluster.Authenticator = gocql.PasswordAuthenticator{
|
|
Username: config.User,
|
|
Password: config.Password,
|
|
}
|
|
cluster.PoolConfig.HostSelectionPolicy = gocql.TokenAwareHostPolicy(
|
|
gocql.DCAwareRoundRobinPolicy(config.DataCenter),
|
|
)
|
|
|
|
var session *gocql.Session
|
|
var err error
|
|
for range 20 {
|
|
session, err = cluster.CreateSession()
|
|
if err == nil {
|
|
return session, nil
|
|
}
|
|
time.Sleep(3 * time.Second)
|
|
}
|
|
|
|
return nil, err
|
|
}
|