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
This commit is contained in:
Marc Bernard 2025-03-29 12:18:40 +00:00
parent 8984655d86
commit 7a83c781ee
2 changed files with 23 additions and 17 deletions

View File

@ -325,7 +325,10 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
IF sy-batch IS INITIAL. IF sy-batch IS INITIAL.
lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ). 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. rv_processes = lv_available_sessions.
ENDIF. ENDIF.
ENDIF. ENDIF.

View File

@ -84,7 +84,7 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
DATA: DATA:
mv_group TYPE rzlli_apcl, mv_group TYPE rzlli_apcl,
mv_is_merged TYPE abap_bool, 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. mv_free_work_processes TYPE i.
ENDCLASS. ENDCLASS.
@ -144,7 +144,6 @@ CLASS ltd_environment IMPLEMENTATION.
mv_available_sessions = iv_available_sessions. mv_available_sessions = iv_available_sessions.
ENDMETHOD. ENDMETHOD.
METHOD set_free_work_processes. METHOD set_free_work_processes.
mv_free_work_processes = iv_free_work_processes. mv_free_work_processes = iv_free_work_processes.
ENDMETHOD. 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, determine_max_processes_free FOR TESTING RAISING zcx_abapgit_exception,
det_max_processes_not_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, 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_no_pp FOR TESTING RAISING zcx_abapgit_exception,
determine_max_processes_merged 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. ENDMETHOD.
METHOD teardown. METHOD teardown.
CLEAR: mo_cut->gv_max_processes. CLEAR: mo_cut->gv_max_processes.
ENDMETHOD. ENDMETHOD.
METHOD determine_max_processes_free. METHOD determine_max_processes_free.
given_parallel_proc_disabled( abap_false ). given_parallel_proc_disabled( abap_false ).
given_is_merged( abap_false ). given_is_merged( abap_false ).
given_free_work_processes( 10 ). given_free_work_processes( 10 ).
given_available_sessions( 10 ).
when_determine_max_processes( ). when_determine_max_processes( ).
@ -480,7 +479,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD det_max_processes_not_free. METHOD det_max_processes_not_free.
given_parallel_proc_disabled( abap_false ). given_parallel_proc_disabled( abap_false ).
@ -493,12 +491,25 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. 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. METHOD det_max_proc_amdahls_law.
given_parallel_proc_disabled( abap_false ). given_parallel_proc_disabled( abap_false ).
given_is_merged( abap_false ). given_is_merged( abap_false ).
given_free_work_processes( 50 ). given_free_work_processes( 50 ).
given_available_sessions( 50 ).
when_determine_max_processes( ). when_determine_max_processes( ).
@ -506,7 +517,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD determine_max_processes_no_pp. METHOD determine_max_processes_no_pp.
given_parallel_proc_disabled( abap_true ). given_parallel_proc_disabled( abap_true ).
@ -518,7 +528,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD determine_max_processes_merged. METHOD determine_max_processes_merged.
given_parallel_proc_disabled( abap_false ). given_parallel_proc_disabled( abap_false ).
@ -530,10 +539,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD determine_max_processes_exit. METHOD determine_max_processes_exit.
given_free_work_processes( 10 ).
given_available_sessions( 10 ).
given_exit_chg_max_processes( 7 ). given_exit_chg_max_processes( 7 ).
when_determine_max_processes( ). when_determine_max_processes( ).
then_we_shd_have_n_processes( 7 ). then_we_shd_have_n_processes( 7 ).
@ -552,7 +563,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD force. METHOD force.
when_determine_max_processes( abap_true ). when_determine_max_processes( abap_true ).
@ -561,14 +571,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD given_parallel_proc_disabled. METHOD given_parallel_proc_disabled.
mo_settings_double->set_parallel_proc_disabled( iv_parallel_proc_disabled ). mo_settings_double->set_parallel_proc_disabled( iv_parallel_proc_disabled ).
ENDMETHOD. ENDMETHOD.
METHOD given_is_merged. METHOD given_is_merged.
mo_environment_double->set_is_merged( iv_is_merged ). mo_environment_double->set_is_merged( iv_is_merged ).
@ -581,14 +589,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD given_free_work_processes. METHOD given_free_work_processes.
mo_environment_double->set_free_work_processes( iv_free_work_processes ). mo_environment_double->set_free_work_processes( iv_free_work_processes ).
ENDMETHOD. ENDMETHOD.
METHOD when_determine_max_processes. METHOD when_determine_max_processes.
mv_act_processes = mo_cut->determine_max_processes( mv_act_processes = mo_cut->determine_max_processes(
@ -597,7 +603,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD then_we_shd_have_n_processes. METHOD then_we_shd_have_n_processes.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
@ -606,7 +611,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD given_exit_chg_max_processes. METHOD given_exit_chg_max_processes.
mo_exit->set_max_parallel_processes( iv_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, setup,
test FOR TESTING RAISING zcx_abapgit_exception. test FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS. ENDCLASS.