Heim >Backend-Entwicklung >Golang >Google Cloud Spanner-Fehler: Ungültiger Sitzungspool

Google Cloud Spanner-Fehler: Ungültiger Sitzungspool

王林
王林nach vorne
2024-02-08 22:36:09859Durchsuche

Der

Google Cloud Spanner 错误:会话池无效

php-Editor Strawberry bietet Ihnen eine Lösung für den Google Cloud Spanner-Fehler. Bei der Verwendung von Google Cloud Spanner tritt manchmal der Fehler „Ungültiger Sitzungspool“ auf. Dieser Fehler wird normalerweise durch eine falsche Konfiguration des Verbindungspools oder eine Überschreitung des Grenzwerts verursacht. In diesem Artikel erfahren Sie, wie Sie dieses Problem identifizieren und beheben, damit Ihre Anwendung den Google Cloud Spanner-Dienst erfolgreich nutzen kann.

Frageninhalt

Ich habe den folgenden Go-Code, der die Spanner-Bibliothek verwendet:

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
}
...
}

Dies führt zu folgendem Fehlerprotokoll:

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

Ich glaube nicht, dass der Server auf die von Google Cloud Spanner angegebene Datenbank zugreifen kann, aber ich erhalte keinen Fehler bei der Erstellung des Spanner-Clients. Wie kann dieser Fehler durch einen ungültigen Sitzungspool behoben werden? invalid session pool 错误?

解决方法

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

Workaround🎜🎜Sie schließen den Client in createClient, bevor Sie zurückkehren. Entfernen Sie defer dataClient.Close() und es sollte wie erwartet funktionieren. 🎜
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
}

Das obige ist der detaillierte Inhalt vonGoogle Cloud Spanner-Fehler: Ungültiger Sitzungspool. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen