func sessionManagementProber()

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
}