in cloudprober/spannerprobers.go [50:114]
func sessionManagementProber(client *spanner.Client, metrics map[string]int64) error {
ctx := context.Background()
reqCreate := &spannerpb.CreateSessionRequest{
Database: database,
}
start := time.Now()
session, err := client.CreateSession(ctx, reqCreate)
if err != nil {
return err
}
if session == nil {
return errors.New("failded to create a new session")
}
metrics["create_session_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
// DeleteSession
defer func() {
start = time.Now()
reqDelete := &spannerpb.DeleteSessionRequest{
Name: session.Name,
}
client.DeleteSession(ctx, reqDelete)
metrics["delete_session_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
}()
// GetSession
reqGet := &spannerpb.GetSessionRequest{
Name: session.Name,
}
start = time.Now()
respGet, err := client.GetSession(ctx, reqGet)
if err != nil {
return err
}
if reqGet == nil || respGet.Name != session.Name {
return errors.New("fail to get the session")
}
metrics["get_session_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
// ListSessions
reqList := &spannerpb.ListSessionsRequest{
Database: database,
}
start = time.Now()
it := client.ListSessions(ctx, reqList)
inList := false
for {
resp, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
return err
}
if resp.Name == session.Name {
inList = true
break
}
}
metrics["list_sessions_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
if !inList {
return errors.New("list sessions failed")
}
return nil
}