Maison >développement back-end >Golang >Erreur Google Cloud Spanner : pool de sessions non valide

Erreur Google Cloud Spanner : pool de sessions non valide

王林
王林avant
2024-02-08 22:36:09859parcourir

Google Cloud Spanner 错误:会话池无效

l'éditeur php Strawberry vous apporte une solution à l'erreur Google Cloud Spanner. Lorsque vous utilisez Google Cloud Spanner, vous rencontrez parfois une erreur « Pool de sessions non valide ». Cette erreur est généralement causée par une configuration incorrecte du pool de connexions ou par un dépassement de la limite. Dans cet article, nous détaillerons comment identifier et résoudre ce problème afin que votre application puisse utiliser avec succès le service Google Cloud Spanner.

Contenu de la question

J'ai le code Go suivant utilisant la bibliothèque Spanner :

package main

import (
    "log/slog"
    "log"
    "fmt"
    "context"

    "cloud.google.com/go/spanner"
)


func createClient(ctx context.Context, db string) (*spanner.Client, error) {
    sessionPoolConfig := spanner.SessionPoolConfig{
        TrackSessionHandles: true,
        InactiveTransactionRemovalOptions: spanner.InactiveTransactionRemovalOptions{
            ActionOnInactiveTransaction: spanner.WarnAndClose,
        },
    }
    dataClient, err := spanner.NewClientWithConfig(
        ctx, db, spanner.ClientConfig{SessionPoolConfig: sessionPoolConfig},
    )
        if err != nil {
        slog.Error("failed to create the spanner client", "err", err)
                return nil, err
        }
        defer dataClient.Close()

        _ = dataClient

        return dataClient, nil
}

var dbLink = "projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME"

func main() {
    ctx := context.Background()

    snapperClient, err := createClient(ctx, dbLink)
    if err != nil {
        log.Fatalf("failed to create a spanner client, error=%s", err.Error())
}

    row, err := spannerClient.Single().ReadRow(ctx, "DATA_TABLE", spanner.Key{THE_KEY}, []string{"THE_COLUMN"})
    if err != nil {
        slog.Error("failed to get the DATA from spanner", "error", err.Error())
        return nil, err
}
...
}

Cela entraîne le journal d'erreurs suivant :

2023/11/30 22:40:03 ERROR failed to get the DATA from spanner id=4 error="spanner: code = \"InvalidArgument\", desc = \"invalid session pool\""

Je ne pense pas que le serveur soit capable d'accéder à la base de données spécifiée par Google Cloud Spanner, mais je ne reçois pas l'erreur de création du client Spanner. Comment corriger cette erreur pool de sessions invalides ? invalid session pool 错误?

解决方法

您在返回之前关闭 createClient 内部的客户端。删除 defer dataClient.Close()

Solution de contournement🎜🎜Vous fermez le client dans createClient avant de revenir. Supprimez defer dataClient.Close() et cela devrait fonctionner comme prévu. 🎜
func createClient(ctx context.Context, db string) (*spanner.Client, error) {
    sessionPoolConfig := spanner.SessionPoolConfig{
        TrackSessionHandles: true,
        InactiveTransactionRemovalOptions: spanner.InactiveTransactionRemovalOptions{
            ActionOnInactiveTransaction: spanner.WarnAndClose,
        },
    }
    dataClient, err := spanner.NewClientWithConfig(
        ctx, db, spanner.ClientConfig{SessionPoolConfig: sessionPoolConfig},
    )
    if err != nil {
        slog.Error("failed to create the spanner client", "err", err)
        return nil, err
    }
    // Remove this
    defer dataClient.Close()
    // Also this isn't doing anything
    _ = dataClient

    return dataClient, nil
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer