Hitachi

Hitachi Command Suite Configuration Manager REST API リファレンスガイド


付録I.2 リトライ処理のコード例

API実行時に、リトライ処理を組み込むためのコード例について説明します。

リトライ処理のコード例

API(function_xxx)の実行に失敗した場合に、返却されるステータスコードやエラーオブジェクトのエラーメッセージがリトライ条件に該当するかどうかを判定します。このサンプルコードでは、HTTPステータスコードに503(Service unavailable)が返るときと、エラーオブジェクトのメッセージIDでリトライを判断する条件のときに、リトライするよう記載しています。リトライ条件に合致した場合は、指定したリトライ上限回数や間隔でAPIをリトライします。

retry_error_list = ["KART30095-E", "KART30096-E", "KART30003-E", "KART30090-E", ...]
retry_count = 1

from requests.structures import CaseInsensitiveDict

while True:
    url = block_storage_api.function_xxx()
    r = requests.post(url, headers=headers, auth=USER_CREDENTIAL,
                      verify=False)
    if r.status_code == http.client.OK or r.status_code == http.client.ACCEPTED:
        # Succeeded #
        print("Succeeded")
        break
    else:
        # failed #
        error_code = CaseInsensitiveDict(r.json())["messageId"]
        if r.status_code == http.client.SERVICE_UNAVAILABLE or error_code in retry_error_list:
            if retry_count > MAX_RETRY_COUNT:
                raise Exception("Timeout Error! "
                                "Operation was not completed.")
            print("Retry API")
            time.sleep(WAIT_TIME)
            retry_count += 1
        else:
            raise requests.HTTPError(r)
# Succeeded #

APIの実行に成功した場合の処理です。

このコード例では、ステータスコードが200(http.client.OK)と202(http.client.ACCEPTED)の両方を定義しています。処理を実装する際には、APIの処理方式(同期処理と非同期処理)に合わせて定義してください。

# failed #

APIの実行に失敗した場合に、リトライを行う処理です。

ステータスコードが503(http.client.SERVICE_UNAVAILABLE)、またはエラーメッセージがretry_error_listに定義したメッセージIDに合致した場合、指定したリトライ上限回数(MAX_RETRY_COUNT)や間隔(WAIT_TIME)でAPIをリトライします。リトライ上限回数や間隔は、ご利用のシステム設計や運用に合わせて適切に設定してください。