TableStore C++ SDK採用傳回值的方式處理錯誤。可能發生錯誤的介面都會返回Optional<OTSError>對象。

  • Optional<T>是在tablestore/util/optional.hpp中定義的一個模板類。可以把它視為只能存放至多一個T對象的箱子。箱子裡有兩種情況,以此來判斷錯誤是否發生:

    • 如果有一個T對象,可以取出這個T對象來用。此時,Optional<T>::present()返回true,表示有錯誤發生。

    • 如果沒有T對象,此時Optional<T>::present()返回false,表示沒有錯誤。

  • OTSError對象表示一個具體的錯誤。它有5個欄位:

    • httpStatuserrorCode:HTTP返回碼和錯誤碼。除了錯誤碼參考之外,以下為僅在用戶端會發生的錯誤。
      6 OTSCouldntResolveHost 無法解析網域名稱。執行個體訪問地址有錯,或者網路不通。
      7 OTSCouldntConnect 無法串連服務端。本地host檔案配置錯誤。
      28 OTSRequestTimeout 請求逾時。
      35 OTSSslHandshakeFail HTTPS握手失敗。沒有安裝本地的認證。
      55 OTSWriteRequestFail 網路發送失敗。網路中斷。
      56 OTSCorruptedResponse 響應不完整。
      89 OTSNoAvailableConnection 沒有可用的串連。通常發生在用戶端剛剛構造時,或者因為並發的請求數超過了網路連接數。
    • message:錯誤的詳細說明。
    • requestId:每個發送到服務端的請求都會由服務端分配一個編號。如果響應正常返回,響應對象裡會有requestId。 如果服務端判斷請求出錯,那麼錯誤對象中會帶有requestId。 如果在請求發送之前,或者網路鏈路上出錯,那麼錯誤對象裡不會有requestId。
    • traceId:每個API調用都會由用戶端分配traceId。不同的API調用分配的traceId不同。同一個API調用涉及多次重試的,traceId相同,但是requestId可能不同。