fix: リトライ回数を2回から3回にする修正

This commit is contained in:
Y_SAKAI 2022-09-01 11:42:14 +09:00
parent 551224f11f
commit d1cc31b1e8
3 changed files with 36 additions and 36 deletions

View File

@ -9,8 +9,8 @@ LOG_LEVEL = os.environ.get(constants.LOG_LEVEL, constants.LOG_LEVEL_INFO)
CRM_AUTH_TIMEOUT = int(os.environ.get(constants.CRM_AUTH_TIMEOUT, 100)) CRM_AUTH_TIMEOUT = int(os.environ.get(constants.CRM_AUTH_TIMEOUT, 100))
# CRMのレコード件数取得処理のタイムアウト秒数 # CRMのレコード件数取得処理のタイムアウト秒数
CRM_GET_RECORD_COUNT_TIMEOUT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_TIMEOUT, 300)) CRM_GET_RECORD_COUNT_TIMEOUT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_TIMEOUT, 300))
# CRMのレコード件数取得処理の最大リトライ試行回数 # CRMのレコード件数取得処理の最大リトライ試行回数(処理の実施総回数)
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT, 3)) CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT, 4))
# CRMのレコード件数取得処理のリトライ時の初回待ち秒数 # CRMのレコード件数取得処理のリトライ時の初回待ち秒数
CRM_GET_RECORD_COUNT_RETRY_INTERVAL = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL, 5)) CRM_GET_RECORD_COUNT_RETRY_INTERVAL = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL, 5))
# CRMのレコード件数取得処理のリトライ時の最小待ち秒数 # CRMのレコード件数取得処理のリトライ時の最小待ち秒数
@ -19,8 +19,8 @@ CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL = int(os.environ.get(constants.CRM_GET_R
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL, 50)) CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL, 50))
# CRMのレコード取得処理のタイムアウト秒数 # CRMのレコード取得処理のタイムアウト秒数
CRM_FETCH_RECORD_TIMEOUT = int(os.environ.get(constants.CRM_FETCH_RECORD_TIMEOUT, 300)) CRM_FETCH_RECORD_TIMEOUT = int(os.environ.get(constants.CRM_FETCH_RECORD_TIMEOUT, 300))
# CRMのレコード取得処理の最大リトライ試行回数 # CRMのレコード取得処理の最大リトライ試行回数(処理の実施総回数)
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT, 3)) CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT, 4))
# CRMのレコード取得処理のリトライ時の初回待ち秒数 # CRMのレコード取得処理のリトライ時の初回待ち秒数
CRM_FETCH_RECORD_RETRY_INTERVAL = int(os.environ.get(constants.CRM_FETCH_RECORD_RETRY_INTERVAL, 5)) CRM_FETCH_RECORD_RETRY_INTERVAL = int(os.environ.get(constants.CRM_FETCH_RECORD_RETRY_INTERVAL, 5))
# CRMのレコード取得処理のリトライ時の最小待ち秒数 # CRMのレコード取得処理のリトライ時の最小待ち秒数

View File

@ -217,7 +217,7 @@ class TestFetchCrmDataProcess:
2. データ件数取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧し正常終了すること 2. データ件数取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧し正常終了すること
3. データ件数取得処理で予期せぬ例外が発生した場合リトライした結果復旧し正常終了すること 3. データ件数取得処理で予期せぬ例外が発生した場合リトライした結果復旧し正常終了すること
Arranges: Arranges:
- データ件数取得処理の最大リトライ試行回数を3に設定する - データ件数取得処理の最大リトライ試行回数を4に設定する
- timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する
- データ件数取得処理の初回に接続タイムアウト例外が発生するようにする - データ件数取得処理の初回に接続タイムアウト例外が発生するようにする
Expects: Expects:
@ -225,7 +225,7 @@ class TestFetchCrmDataProcess:
- データ件数取得に失敗した旨のエラーが出力されない - データ件数取得に失敗した旨のエラーが出力されない
""" """
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 3) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 4)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1)
@ -236,8 +236,8 @@ class TestFetchCrmDataProcess:
patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client: patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client:
# モック化 # モック化
mock_counter_inst = mock_counter.return_value mock_counter_inst = mock_counter.return_value
mock_counter_inst.describe.side_effect = [1, 2, 3] mock_counter_inst.describe.side_effect = [1, 2, 3, 4]
mock_counter_inst.increment.side_effect = [2, 3, 4] mock_counter_inst.increment.side_effect = [2, 3, 4, 5]
mock_builder_inst = mock_soql_builder.return_value mock_builder_inst = mock_soql_builder.return_value
mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_count_soql.return_value = ''
mock_builder_inst.create_fetch_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = ''
@ -271,15 +271,15 @@ class TestFetchCrmDataProcess:
2. データ件数取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧せず異常終了すること 2. データ件数取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧せず異常終了すること
3. データ件数取得処理で予期せぬ例外が発生した場合リトライした結果復旧せず異常終了すること 3. データ件数取得処理で予期せぬ例外が発生した場合リトライした結果復旧せず異常終了すること
Arranges: Arranges:
- データ件数取得処理の最大リトライ試行回数を3に設定する - データ件数取得処理の最大リトライ試行回数を4に設定する
- timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する
- データ件数取得処理の1回目2回目3回目で接続タイムアウト例外が発生するようにする - データ件数取得処理の1回目2回目3回目4回目で接続タイムアウト例外が発生するようにする
Expects: Expects:
- 異常終了する - 異常終了する
- データ件数取得に失敗した旨のエラーが出力される - データ件数取得に失敗した旨のエラーが出力される
""" """
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 3) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 4)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1)
@ -290,13 +290,13 @@ class TestFetchCrmDataProcess:
patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client: patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client:
# モック化 # モック化
mock_counter_inst = mock_counter.return_value mock_counter_inst = mock_counter.return_value
mock_counter_inst.describe.side_effect = [1, 2, 3] mock_counter_inst.describe.side_effect = [1, 2, 3, 4]
mock_counter_inst.increment.side_effect = [2, 3, 4] mock_counter_inst.increment.side_effect = [2, 3, 4, 5]
mock_builder_inst = mock_soql_builder.return_value mock_builder_inst = mock_soql_builder.return_value
mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_count_soql.return_value = ''
mock_builder_inst.create_fetch_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = ''
mock_client_inst = mock_api_client.return_value mock_client_inst = mock_api_client.return_value
mock_client_inst.fetch_sf_count.side_effect = [exception, exception, exception] mock_client_inst.fetch_sf_count.side_effect = [exception, exception, exception, exception]
mock_client_inst.fetch_sf_data.return_value = common_expect mock_client_inst.fetch_sf_data.return_value = common_expect
# Act # Act
with pytest.raises(SalesforceAPIException) as e: with pytest.raises(SalesforceAPIException) as e:
@ -304,16 +304,16 @@ class TestFetchCrmDataProcess:
# Assert # Assert
# 取得は3回行われる # 取得は4回行われる
assert mock_counter_inst.describe.call_count == 3 assert mock_counter_inst.describe.call_count == 4
# 足し込みは2回のみ # 足し込みは3回のみ
assert mock_counter_inst.increment.call_count == 2 assert mock_counter_inst.increment.call_count == 3
assert generate_log_message_tuple( assert generate_log_message_tuple(
log_level=logging.WARNING, log_level=logging.WARNING,
log_message=expect_message) in caplog.record_tuples log_message=expect_message) in caplog.record_tuples
called_log_counts = len([log for log in caplog.messages if log == expect_message]) called_log_counts = len([log for log in caplog.messages if log == expect_message])
assert called_log_counts == 2 assert called_log_counts == 3
assert generate_log_message_tuple(log_message='I-FETCH-06 [Account] のCRMからのデータ取得処理を終了します') not in caplog.record_tuples assert generate_log_message_tuple(log_message='I-FETCH-06 [Account] のCRMからのデータ取得処理を終了します') not in caplog.record_tuples
assert e.value.error_id == 'E-FETCH-01' assert e.value.error_id == 'E-FETCH-01'
@ -333,7 +333,7 @@ class TestFetchCrmDataProcess:
2. レコード取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧し正常終了すること 2. レコード取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧し正常終了すること
3. レコード取得処理で予期せぬ例外が発生した場合リトライした結果復旧し正常終了すること 3. レコード取得処理で予期せぬ例外が発生した場合リトライした結果復旧し正常終了すること
Arranges: Arranges:
- レコード取得処理の最大リトライ試行回数を3に設定する - レコード取得処理の最大リトライ試行回数を4に設定する
- timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する
- レコード取得処理の初回に接続タイムアウト例外が発生するようにする - レコード取得処理の初回に接続タイムアウト例外が発生するようにする
Expects: Expects:
@ -341,7 +341,7 @@ class TestFetchCrmDataProcess:
- データレコード取得に失敗した旨のエラーが出力されない - データレコード取得に失敗した旨のエラーが出力されない
""" """
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 3) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT', 4)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_GET_RECORD_COUNT_RETRY_INTERVAL', 1)
@ -352,8 +352,8 @@ class TestFetchCrmDataProcess:
patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client: patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client:
# モック化 # モック化
mock_counter_inst = mock_counter.return_value mock_counter_inst = mock_counter.return_value
mock_counter_inst.describe.side_effect = [1, 2, 3] mock_counter_inst.describe.side_effect = [1, 2, 3, 4]
mock_counter_inst.increment.side_effect = [2, 3, 4] mock_counter_inst.increment.side_effect = [2, 3, 4, 5]
mock_builder_inst = mock_soql_builder.return_value mock_builder_inst = mock_soql_builder.return_value
mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_count_soql.return_value = ''
mock_builder_inst.create_fetch_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = ''
@ -387,15 +387,15 @@ class TestFetchCrmDataProcess:
2. レコード取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧せず異常終了すること 2. レコード取得処理で読み取りタイムアウト例外が発生した場合リトライした結果復旧せず異常終了すること
3. レコード取得処理で予期せぬ例外が発生した場合リトライした結果復旧せず異常終了すること 3. レコード取得処理で予期せぬ例外が発生した場合リトライした結果復旧せず異常終了すること
Arranges: Arranges:
- レコード取得処理の最大リトライ試行回数を3に設定する - レコード取得処理の最大リトライ試行回数を4に設定する
- timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する
- レコード取得処理の1回目2回目3回目で接続タイムアウト例外が発生するようにする - レコード取得処理の1回目2回目3回目4回目で接続タイムアウト例外が発生するようにする
Expects: Expects:
- 異常終了する - 異常終了する
- データレコード取得に失敗した旨のエラーが出力される - データレコード取得に失敗した旨のエラーが出力される
""" """
monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT', 3) monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT', 4)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL', 1)
monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_INTERVAL', 1) monkeypatch.setattr('src.fetch_crm_data_process.CRM_FETCH_RECORD_RETRY_INTERVAL', 1)
@ -406,30 +406,30 @@ class TestFetchCrmDataProcess:
patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client: patch('src.fetch_crm_data_process.SalesforceApiClient') as mock_api_client:
# モック化 # モック化
mock_counter_inst = mock_counter.return_value mock_counter_inst = mock_counter.return_value
mock_counter_inst.describe.side_effect = [1, 2, 3] mock_counter_inst.describe.side_effect = [1, 2, 3, 4]
mock_counter_inst.increment.side_effect = [2, 3, 4] mock_counter_inst.increment.side_effect = [2, 3, 4, 5]
mock_builder_inst = mock_soql_builder.return_value mock_builder_inst = mock_soql_builder.return_value
mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_count_soql.return_value = ''
mock_builder_inst.create_fetch_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = ''
mock_client_inst = mock_api_client.return_value mock_client_inst = mock_api_client.return_value
mock_client_inst.fetch_sf_count.return_value = 1 mock_client_inst.fetch_sf_count.return_value = 1
mock_client_inst.fetch_sf_data.side_effect = [exception, exception, exception] mock_client_inst.fetch_sf_data.side_effect = [exception, exception, exception, exception]
# Act # Act
with pytest.raises(SalesforceAPIException) as e: with pytest.raises(SalesforceAPIException) as e:
fetch_crm_data_process(common_target_object, common_last_fetch_datetime) fetch_crm_data_process(common_target_object, common_last_fetch_datetime)
# Assert # Assert
# 取得は3回行われる # 取得は4回行われる
assert mock_counter_inst.describe.call_count == 3 assert mock_counter_inst.describe.call_count == 4
# 足し込みは2回のみ # 足し込みは3回のみ
assert mock_counter_inst.increment.call_count == 2 assert mock_counter_inst.increment.call_count == 3
assert generate_log_message_tuple( assert generate_log_message_tuple(
log_level=logging.WARNING, log_level=logging.WARNING,
log_message=expect_message) in caplog.record_tuples log_message=expect_message) in caplog.record_tuples
called_log_counts = len([log for log in caplog.messages if log == expect_message]) called_log_counts = len([log for log in caplog.messages if log == expect_message])
assert called_log_counts == 2 assert called_log_counts == 3
assert generate_log_message_tuple(log_message='I-FETCH-06 [Account] のCRMからのデータ取得処理を終了します') not in caplog.record_tuples assert generate_log_message_tuple(log_message='I-FETCH-06 [Account] のCRMからのデータ取得処理を終了します') not in caplog.record_tuples
assert e.value.error_id == 'E-FETCH-02' assert e.value.error_id == 'E-FETCH-02'

View File

@ -1,12 +1,12 @@
LOG_LEVEL=INFO LOG_LEVEL=INFO
CRM_AUTH_TIMEOUT=100 CRM_AUTH_TIMEOUT=100
CRM_GET_RECORD_COUNT_TIMEOUT=300 CRM_GET_RECORD_COUNT_TIMEOUT=300
CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT=3 CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT=4
CRM_GET_RECORD_COUNT_RETRY_INTERVAL=5 CRM_GET_RECORD_COUNT_RETRY_INTERVAL=5
CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL=5 CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL=5
CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL=50 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL=50
CRM_FETCH_RECORD_TIMEOUT=300 CRM_FETCH_RECORD_TIMEOUT=300
CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT=3 CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT=4
CRM_FETCH_RECORD_RETRY_INTERVAL=5 CRM_FETCH_RECORD_RETRY_INTERVAL=5
CRM_FETCH_RECORD_RETRY_MIN_INTERVAL=5 CRM_FETCH_RECORD_RETRY_MIN_INTERVAL=5
CRM_FETCH_RECORD_RETRY_MAX_INTERVAL=50 CRM_FETCH_RECORD_RETRY_MAX_INTERVAL=50