From 7a83c781ee9a1aaef9f69e1e2c446955146cbbfa Mon Sep 17 00:00:00 2001 From: Marc Bernard Date: Sat, 29 Mar 2025 12:18:40 +0000 Subject: [PATCH] Fix max parallel session If no user sessions are available, then parallel processing needs to be disabled. Ref https://github.com/abapGit/abapGit/issues/7148#issuecomment-2658482441 --- .../core/zcl_abapgit_serialize.clas.abap | 5 ++- ...cl_abapgit_serialize.clas.testclasses.abap | 35 ++++++++++--------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/objects/core/zcl_abapgit_serialize.clas.abap b/src/objects/core/zcl_abapgit_serialize.clas.abap index d2b5ffeac..396587de5 100644 --- a/src/objects/core/zcl_abapgit_serialize.clas.abap +++ b/src/objects/core/zcl_abapgit_serialize.clas.abap @@ -325,7 +325,10 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. IF sy-batch IS INITIAL. lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ). - IF rv_processes > lv_available_sessions AND lv_available_sessions <> 0. + IF lv_available_sessions = 0. + " No available session -> disable parallel processing + rv_processes = 1. + ELSEIF rv_processes > lv_available_sessions. rv_processes = lv_available_sessions. ENDIF. ENDIF. diff --git a/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap b/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap index 8d211f6e2..f175f6aa2 100644 --- a/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap @@ -84,7 +84,7 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING DATA: mv_group TYPE rzlli_apcl, mv_is_merged TYPE abap_bool, - mv_available_sessions TYPE i, + mv_available_sessions TYPE i VALUE 6, " system default mv_free_work_processes TYPE i. ENDCLASS. @@ -144,7 +144,6 @@ CLASS ltd_environment IMPLEMENTATION. mv_available_sessions = iv_available_sessions. ENDMETHOD. - METHOD set_free_work_processes. mv_free_work_processes = iv_free_work_processes. ENDMETHOD. @@ -395,6 +394,7 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE determine_max_processes_free FOR TESTING RAISING zcx_abapgit_exception, det_max_processes_not_free FOR TESTING RAISING zcx_abapgit_exception, + det_max_proc_none_available FOR TESTING RAISING zcx_abapgit_exception, det_max_proc_amdahls_law FOR TESTING RAISING zcx_abapgit_exception, determine_max_processes_no_pp FOR TESTING RAISING zcx_abapgit_exception, determine_max_processes_merged FOR TESTING RAISING zcx_abapgit_exception, @@ -460,19 +460,18 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD teardown. CLEAR: mo_cut->gv_max_processes. ENDMETHOD. - METHOD determine_max_processes_free. given_parallel_proc_disabled( abap_false ). given_is_merged( abap_false ). given_free_work_processes( 10 ). + given_available_sessions( 10 ). when_determine_max_processes( ). @@ -480,7 +479,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD det_max_processes_not_free. given_parallel_proc_disabled( abap_false ). @@ -493,12 +491,25 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. + METHOD det_max_proc_none_available. + + given_parallel_proc_disabled( abap_false ). + given_is_merged( abap_false ). + given_free_work_processes( 10 ). + given_available_sessions( 0 ). + + when_determine_max_processes( ). + + then_we_shd_have_n_processes( 1 ). + + ENDMETHOD. METHOD det_max_proc_amdahls_law. given_parallel_proc_disabled( abap_false ). given_is_merged( abap_false ). given_free_work_processes( 50 ). + given_available_sessions( 50 ). when_determine_max_processes( ). @@ -506,7 +517,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD determine_max_processes_no_pp. given_parallel_proc_disabled( abap_true ). @@ -518,7 +528,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD determine_max_processes_merged. given_parallel_proc_disabled( abap_false ). @@ -530,10 +539,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD determine_max_processes_exit. + given_free_work_processes( 10 ). + given_available_sessions( 10 ). given_exit_chg_max_processes( 7 ). + when_determine_max_processes( ). then_we_shd_have_n_processes( 7 ). @@ -552,7 +563,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD force. when_determine_max_processes( abap_true ). @@ -561,14 +571,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD given_parallel_proc_disabled. mo_settings_double->set_parallel_proc_disabled( iv_parallel_proc_disabled ). ENDMETHOD. - METHOD given_is_merged. mo_environment_double->set_is_merged( iv_is_merged ). @@ -581,14 +589,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD given_free_work_processes. mo_environment_double->set_free_work_processes( iv_free_work_processes ). ENDMETHOD. - METHOD when_determine_max_processes. mv_act_processes = mo_cut->determine_max_processes( @@ -597,7 +603,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD then_we_shd_have_n_processes. cl_abap_unit_assert=>assert_equals( @@ -606,7 +611,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD given_exit_chg_max_processes. mo_exit->set_max_parallel_processes( iv_max_processes ). @@ -794,7 +798,6 @@ CLASS ltcl_i18n DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. setup, test FOR TESTING RAISING zcx_abapgit_exception. - ENDCLASS.