All Products
Search
Document Center

Tablestore:Penanganan error Go SDK

Last Updated:Aug 05, 2026

SDK Tablestore Go menggunakan exception untuk menangani error. Topik ini menjelaskan cara Tablestore menangani error, informasi yang terdapat dalam exception, serta kebijakan retry yang tersedia.

Metode

Tablestore Go SDK melemparkan exception saat terjadi error. Panggilan API dianggap berhasil jika tidak melemparkan exception; sebaliknya, operasi tersebut gagal.

Catatan

Untuk operasi batch, seperti BatchGetRow dan BatchWriteRow, Anda harus memeriksa tidak hanya exception tetapi juga status setiap baris. Panggilan API secara keseluruhan dianggap berhasil hanya jika semua baris diproses dengan sukses.

Pengecualian

Saat menggunakan Tablestore Go SDK, exception biasanya dikembalikan sebagai parameter kedua dari nilai kembali suatu metode. Oleh karena itu, sebelum mengambil data yang dikembalikan, periksa apakah parameter err bernilai non-nil.

Jika terjadi error di sisi server pada Tablestore, parameter err akan berisi requestId. requestId adalah identifier unik universal (UUID) yang secara unik mengidentifikasi permintaan tersebut. Jika Anda tidak dapat menyelesaikan masalah, catat requestId ini dan submit a ticket.

Kode berikut memberikan contoh cara menangani exception:

client := tablestore.NewClient(endpoint, instanceName, accessKeyId, accessKeySecret)
listTables, err := client.ListTable()
if err != nil {
    // Tangani exception.
    fmt.Println(err.Error())
} else {
    // Tidak ada exception.
    for _, table := range listTables.TableNames {
        fmt.Println("TableName: ", table)
    }
}

Upaya Ulang

Go SDK menyediakan kebijakan retry default. Anda juga dapat menyesuaikan logika retry.

Kebijakan Coba Lagi Default

Go SDK melakukan retry dengan backoff ketika terjadi error pembatasan kecepatan (throttling) atau error internal di sisi server selama operasi baca. Jumlah maksimum retry default adalah 10, dan durasi total maksimum retry default adalah 5 detik. Anda dapat memodifikasi tablestore.TableStoreConfig untuk mengatur parameter kebijakan retry default. Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

Nilai default

RetryTimes

Jumlah maksimum retry.

10

MaxRetryTime

Durasi total maksimum untuk retry.

5s

DefaultRetryInterval

Nilai jitter untuk kebijakan retry backoff eksponensial. Ini mencegah beberapa klien yang gagal mengirim permintaan retry secara bersamaan.

10 ms

MaxRetryInterval

Interval waktu maksimum antara dua retry.

320 ms

Transport

Mengelola properti transport dasar dari klien HTTP. Nilai default adalah nil.

Jika Anda mengatur parameter ini, parameter HTTPTimeout.ConnectionTimeout, MaxIdleConnections, dan IdleConnTimeout tidak berlaku.

nil

HTTPTimeout.ConnectionTimeout

Durasi timeout untuk membuat koneksi jaringan HTTP baru.

15s

HTTPTimeout.RequestTimeout

Waktu maksimum klien HTTP menunggu respons server setelah mengirim permintaan.

30s

MaxIdleConnections

Jumlah maksimum koneksi idle untuk host HTTP.

2000

IdleConnTimeout

Durasi maksimum koneksi idle untuk host HTTP tetap terbuka di kolam koneksi tanpa digunakan kembali.

25s

Logika retry kustom

Untuk memodifikasi logika retry default atau membuat logika retry kustom, Anda dapat mengatur parameter berikut untuk TableStoreClient.

Parameter

Deskripsi

Nilai default

CustomizedRetryFunc

Jika Anda mengatur CustomizedRetryFunc, SDK pertama-tama memeriksa metode ini untuk menentukan apakah akan melakukan retry.

  • Jika CustomizedRetryFunc tidak diatur (nil), SDK menjalankan logika retry default.

  • Jika CustomizedRetryFunc tidak nil dan menentukan bahwa retry diperlukan, SDK melakukan retry berdasarkan logika retry kustom.

  • Jika CustomizedRetryFunc tidak nil dan menentukan bahwa retry tidak diperlukan, SDK memeriksa nilai KeepDefaultRetryStrategyWhileUsingCustomizedRetryFunc untuk tindakan lebih lanjut.

    • Jika KeepDefaultRetryStrategyWhileUsingCustomizedRetryFunc bernilai false, tidak ada retry yang dilakukan.

    • Jika KeepDefaultRetryStrategyWhileUsingCustomizedRetryFunc bernilai true, SDK kemudian memeriksa logika retry default untuk menentukan apakah akan melakukan retry.

nil

KeepDefaultRetryStrategyWhileUsingCustomizedRetryFunc

true

Contoh berikut menunjukkan cara menyesuaikan logika retry:

Retry semua error

Contoh berikut menunjukkan cara melakukan retry untuk semua error.

func alwaysRetry(errorCode string, errorMsg string, action string, httpStatus int) bool {
	return true
}
func main() {
    client := tablestore.NewClient(endpoint, instanceName, accessKeyId, accessKeySecret)
  	client.CustomizedRetryFunc = alwaysRetry
    // lakukan sesuatu
}

Jangan retry semua error

Contoh berikut menunjukkan cara menonaktifkan retry untuk semua error.

func alwaysNotRetry(errorCode string, errorMsg string, action string, httpStatus int) bool {
	return false
}
func main() {
    client := tablestore.NewClient(endpoint, instanceName, accessKeyId, accessKeySecret)
  	client.CustomizedRetryFunc = alwaysNotRetry
    client.KeepDefaultRetryStrategyWhileUsingCustomizedRetryFunc = false
    // lakukan sesuatu
}

Callback saat retry

Untuk menjalankan operasi yang telah ditentukan saat SDK melakukan retry, Anda dapat mengatur parameter berikut untuk TableStoreClient.

Parameter

Deskripsi

Nilai default

RetryNotify

Metode callback yang dipicu saat SDK melakukan retry.

nil

Contoh berikut menunjukkan cara mengatur trace ID sisi bisnis untuk setiap permintaan dan mencetak trace ID tersebut saat terjadi retry.

func userRetryNotify(traceId, requestId string, err error, action string, backoffDuration time.Duration) {
    // Logika kustom yang dipanggil saat retry dipicu.
    fmt.Println("Retry for traceId: " + traceId + ", timestamp: " + strconv.FormatInt(time.Now().UnixNano(), 10))
}

func alwaysRetry(errorCode string, errorMsg string, action string, httpStatus int) bool {
    return true
}

func main() {
    client := tablestore.NewClient(endpoint, instanceName, accessKeyId, accessKeySecret)
    client.CustomizedRetryFunc = alwaysRetry
    client.RetryNotify = userRetryNotify

    request := &tablestore.DescribeTableRequest{TableName: "tableNotExist"}
    // Atur trace ID sisi bisnis untuk permintaan.
    request.ExtraRequestInfo.SetTraceID("test_TraceId_" + strconv.FormatInt(time.Now().UnixNano(), 10))
    // lakukan sesuatu
    res, err := client.DescribeTable(request)

    if err != nil {
        fmt.Println(err.Error())
    } else {
        fmt.Println(res.ResponseInfo.RequestId)
    }
}

Output berikut merupakan contohnya:

Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752655394000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752683437000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752708603000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752760519000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752814590000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097752916539000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097753110943000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097753454311000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097753798531000
Retry for traceId: test_TraceId_1711097752255675000, timestamp: 1711097754165411000
OTSObjectNotExist Requested table does not exist. 0006143b-fdd6-5050-10ef-700b045590fc