in example/session_pool/table/table_session_pool_example.go [38:108]
func putBackToSessionPoolExample() {
// should create database test_db before executing
config := &client.PoolConfig{
Host: "127.0.0.1",
Port: "6667",
UserName: "root",
Password: "root",
Database: "test_db",
}
sessionPool := client.NewTableSessionPool(config, 3, 60000, 4000, false)
defer sessionPool.Close()
num := 4
successGetSessionNum := int32(0)
var wg sync.WaitGroup
wg.Add(num)
for i := 0; i < num; i++ {
dbName := "db" + strconv.Itoa(i)
go func() {
defer wg.Done()
session, err := sessionPool.GetSession()
if err != nil {
log.Println("Failed to create database "+dbName+"because ", err)
return
}
atomic.AddInt32(&successGetSessionNum, 1)
defer func() {
time.Sleep(6 * time.Second)
// put back to session pool
session.Close()
}()
checkError(session.ExecuteNonQueryStatement("create database " + dbName))
checkError(session.ExecuteNonQueryStatement("use " + dbName))
checkError(session.ExecuteNonQueryStatement("create table table_of_" + dbName + " (tag1 string tag, tag2 string tag, s1 text field, s2 text field)"))
}()
}
wg.Wait()
log.Println("success num is", successGetSessionNum)
log.Println("All session's database have been reset.")
// the using database will automatically reset to session pool's database after the session closed
wg.Add(5)
for i := 0; i < 5; i++ {
go func() {
defer wg.Done()
session, err := sessionPool.GetSession()
if err != nil {
log.Println("Failed to get session because ", err)
}
defer session.Close()
timeout := int64(3000)
dataSet, err := session.ExecuteQueryStatement("show tables", &timeout)
for {
hasNext, err := dataSet.Next()
if err != nil {
log.Fatal(err)
}
if !hasNext {
break
}
value, err := dataSet.GetString("TableName")
if err != nil {
log.Fatal(err)
}
log.Println("table is", value)
}
dataSet.Close()
}()
}
wg.Wait()
}