diff --git a/ecs/crm-datafetch/src/system_var/environments.py b/ecs/crm-datafetch/src/system_var/environments.py index 297cfb2b..c457386f 100644 --- a/ecs/crm-datafetch/src/system_var/environments.py +++ b/ecs/crm-datafetch/src/system_var/environments.py @@ -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のレコード件数取得処理のタイムアウト秒数 CRM_GET_RECORD_COUNT_TIMEOUT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_TIMEOUT, 300)) -# CRMのレコード件数取得処理の最大リトライ試行回数 -CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT, 3)) +# CRMのレコード件数取得処理の最大リトライ試行回数(処理の実施総回数) +CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT, 4)) # CRMのレコード件数取得処理のリトライ時の初回待ち秒数 CRM_GET_RECORD_COUNT_RETRY_INTERVAL = int(os.environ.get(constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL, 5)) # 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のレコード取得処理のタイムアウト秒数 CRM_FETCH_RECORD_TIMEOUT = int(os.environ.get(constants.CRM_FETCH_RECORD_TIMEOUT, 300)) -# CRMのレコード取得処理の最大リトライ試行回数 -CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT, 3)) +# CRMのレコード取得処理の最大リトライ試行回数(処理の実施総回数) +CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT = int(os.environ.get(constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT, 4)) # CRMのレコード取得処理のリトライ時の初回待ち秒数 CRM_FETCH_RECORD_RETRY_INTERVAL = int(os.environ.get(constants.CRM_FETCH_RECORD_RETRY_INTERVAL, 5)) # CRMのレコード取得処理のリトライ時の最小待ち秒数 diff --git a/ecs/crm-datafetch/tests/test_fetch_crm_data_process.py b/ecs/crm-datafetch/tests/test_fetch_crm_data_process.py index 66f5577e..6b17477f 100644 --- a/ecs/crm-datafetch/tests/test_fetch_crm_data_process.py +++ b/ecs/crm-datafetch/tests/test_fetch_crm_data_process.py @@ -217,7 +217,7 @@ class TestFetchCrmDataProcess: 2. データ件数取得処理で読み取りタイムアウト例外が発生した場合、リトライした結果復旧し、正常終了すること 3. データ件数取得処理で予期せぬ例外が発生した場合、リトライした結果復旧し、正常終了すること Arranges: - - データ件数取得処理の最大リトライ試行回数を3に設定する + - データ件数取得処理の最大リトライ試行回数を4に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - データ件数取得処理の初回に接続タイムアウト例外が発生するようにする 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_MIN_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: # モック化 mock_counter_inst = mock_counter.return_value - mock_counter_inst.describe.side_effect = [1, 2, 3] - mock_counter_inst.increment.side_effect = [2, 3, 4] + mock_counter_inst.describe.side_effect = [1, 2, 3, 4] + mock_counter_inst.increment.side_effect = [2, 3, 4, 5] mock_builder_inst = mock_soql_builder.return_value mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = '' @@ -271,15 +271,15 @@ class TestFetchCrmDataProcess: 2. データ件数取得処理で読み取りタイムアウト例外が発生した場合、リトライした結果復旧せず、異常終了すること 3. データ件数取得処理で予期せぬ例外が発生した場合、リトライした結果復旧せず、異常終了すること Arranges: - - データ件数取得処理の最大リトライ試行回数を3に設定する + - データ件数取得処理の最大リトライ試行回数を4に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - - データ件数取得処理の1回目、2回目、3回目で接続タイムアウト例外が発生するようにする + - データ件数取得処理の1回目、2回目、3回目、4回目で接続タイムアウト例外が発生するようにする 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_MIN_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: # モック化 mock_counter_inst = mock_counter.return_value - mock_counter_inst.describe.side_effect = [1, 2, 3] - mock_counter_inst.increment.side_effect = [2, 3, 4] + mock_counter_inst.describe.side_effect = [1, 2, 3, 4] + mock_counter_inst.increment.side_effect = [2, 3, 4, 5] mock_builder_inst = mock_soql_builder.return_value mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_fetch_soql.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 # Act with pytest.raises(SalesforceAPIException) as e: @@ -304,16 +304,16 @@ class TestFetchCrmDataProcess: # Assert - # 取得は3回行われる - assert mock_counter_inst.describe.call_count == 3 - # 足し込みは2回のみ - assert mock_counter_inst.increment.call_count == 2 + # 取得は4回行われる + assert mock_counter_inst.describe.call_count == 4 + # 足し込みは3回のみ + assert mock_counter_inst.increment.call_count == 3 assert generate_log_message_tuple( log_level=logging.WARNING, log_message=expect_message) in caplog.record_tuples 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 e.value.error_id == 'E-FETCH-01' @@ -333,7 +333,7 @@ class TestFetchCrmDataProcess: 2. レコード取得処理で読み取りタイムアウト例外が発生した場合、リトライした結果復旧し、正常終了すること 3. レコード取得処理で予期せぬ例外が発生した場合、リトライした結果復旧し、正常終了すること Arranges: - - レコード取得処理の最大リトライ試行回数を3に設定する + - レコード取得処理の最大リトライ試行回数を4に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - レコード取得処理の初回に接続タイムアウト例外が発生するようにする 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_MIN_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: # モック化 mock_counter_inst = mock_counter.return_value - mock_counter_inst.describe.side_effect = [1, 2, 3] - mock_counter_inst.increment.side_effect = [2, 3, 4] + mock_counter_inst.describe.side_effect = [1, 2, 3, 4] + mock_counter_inst.increment.side_effect = [2, 3, 4, 5] mock_builder_inst = mock_soql_builder.return_value mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = '' @@ -387,15 +387,15 @@ class TestFetchCrmDataProcess: 2. レコード取得処理で読み取りタイムアウト例外が発生した場合、リトライした結果復旧せず、異常終了すること 3. レコード取得処理で予期せぬ例外が発生した場合、リトライした結果復旧せず、異常終了すること Arranges: - - レコード取得処理の最大リトライ試行回数を3に設定する + - レコード取得処理の最大リトライ試行回数を4に設定する - timeout_env_nameに指定されたリトライタイムアウト時間の秒数を1に設定する - - レコード取得処理の1回目、2回目、3回目で接続タイムアウト例外が発生するようにする + - レコード取得処理の1回目、2回目、3回目、4回目で接続タイムアウト例外が発生するようにする 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_MIN_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: # モック化 mock_counter_inst = mock_counter.return_value - mock_counter_inst.describe.side_effect = [1, 2, 3] - mock_counter_inst.increment.side_effect = [2, 3, 4] + mock_counter_inst.describe.side_effect = [1, 2, 3, 4] + mock_counter_inst.increment.side_effect = [2, 3, 4, 5] mock_builder_inst = mock_soql_builder.return_value mock_builder_inst.create_count_soql.return_value = '' mock_builder_inst.create_fetch_soql.return_value = '' mock_client_inst = mock_api_client.return_value 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 with pytest.raises(SalesforceAPIException) as e: fetch_crm_data_process(common_target_object, common_last_fetch_datetime) # Assert - # 取得は3回行われる - assert mock_counter_inst.describe.call_count == 3 - # 足し込みは2回のみ - assert mock_counter_inst.increment.call_count == 2 + # 取得は4回行われる + assert mock_counter_inst.describe.call_count == 4 + # 足し込みは3回のみ + assert mock_counter_inst.increment.call_count == 3 assert generate_log_message_tuple( log_level=logging.WARNING, log_message=expect_message) in caplog.record_tuples 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 e.value.error_id == 'E-FETCH-02' diff --git a/s3/config/crm/task_settings/task_settings.env b/s3/config/crm/task_settings/task_settings.env index 445aaa73..3ae4d809 100644 --- a/s3/config/crm/task_settings/task_settings.env +++ b/s3/config/crm/task_settings/task_settings.env @@ -1,12 +1,12 @@ LOG_LEVEL=INFO CRM_AUTH_TIMEOUT=100 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_MIN_INTERVAL=5 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL=50 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_MIN_INTERVAL=5 CRM_FETCH_RECORD_RETRY_MAX_INTERVAL=50