Rumah >pembangunan bahagian belakang >Golang >Ralat Google Cloud Spanner: Kumpulan sesi tidak sah

Ralat Google Cloud Spanner: Kumpulan sesi tidak sah

王林
王林ke hadapan
2024-02-08 22:36:09896semak imbas

Google Cloud Spanner 错误:会话池无效

editor php Strawberry membawakan anda penyelesaian kepada ralat Google Cloud Spanner. Apabila menggunakan Google Cloud Spanner, kadangkala anda menghadapi ralat "Kolam sesi tidak sah". Ralat ini biasanya disebabkan oleh konfigurasi kolam sambungan yang salah atau melebihi had. Dalam artikel ini, kami akan memperincikan cara mengenal pasti dan menyelesaikan isu ini supaya aplikasi anda berjaya menggunakan perkhidmatan Google Cloud Spanner.

Kandungan soalan

Saya mempunyai kod Go berikut menggunakan pustaka 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
}
...
}

Ini menghasilkan log ralat berikut:

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

Saya tidak percaya pelayan dapat mengakses pangkalan data yang ditentukan oleh Google Cloud Spanner, tetapi saya tidak mendapat ralat penciptaan klien Spanner. Bagaimana untuk membetulkan ralat kumpulan sesi tidak sah ini? invalid session pool 错误?

解决方法

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

Penyelesaian🎜🎜Anda menutup klien di dalam createClient sebelum kembali. Alih keluar defer dataClient.Close() dan ia akan berfungsi seperti yang anda jangkakan. 🎜
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
}

Atas ialah kandungan terperinci Ralat Google Cloud Spanner: Kumpulan sesi tidak sah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam