From 0ea8aa0f437c7bc4a9636a709b32c8904684a07f Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Tue, 1 Apr 2025 18:03:01 +0200 Subject: [PATCH 1/2] update npm dependencies (#7167) --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 22ba5ee5a..b6ac3c201 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,14 @@ ] }, "devDependencies": { - "@abaplint/cli": "^2.113.105", + "@abaplint/cli": "^2.113.108", "@abaplint/database-sqlite": "^2.10.24", - "@abaplint/runtime": "^2.10.26", + "@abaplint/runtime": "^2.10.33", "express": "^4.21.2", - "@abaplint/transpiler-cli": "^2.10.26", + "@abaplint/transpiler-cli": "^2.10.33", "globals": "^16.0.0", "abapmerge": "^0.16.6", "c8": "^10.1.3", - "eslint": "^9.22.0" + "eslint": "^9.23.0" } } From e7af0fb6a06ef6783e49a7c0f38b75bb3d445cdc Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Tue, 1 Apr 2025 18:07:14 +0200 Subject: [PATCH 2/2] Fix "Maximum number of GUI sessions reached" (#7176) Co-authored-by: Lars Hvam --- .../core/zcl_abapgit_serialize.clas.abap | 46 ++++++++++++----- ...cl_abapgit_serialize.clas.testclasses.abap | 50 ++++++++++++------- 2 files changed, 67 insertions(+), 29 deletions(-) diff --git a/src/objects/core/zcl_abapgit_serialize.clas.abap b/src/objects/core/zcl_abapgit_serialize.clas.abap index d2b5ffeac..209eddd7c 100644 --- a/src/objects/core/zcl_abapgit_serialize.clas.abap +++ b/src/objects/core/zcl_abapgit_serialize.clas.abap @@ -128,6 +128,12 @@ CLASS zcl_abapgit_serialize DEFINITION RETURNING VALUE(rv_result) TYPE abap_bool. + METHODS is_no_parallel + IMPORTING + !iv_object_type TYPE tadir-object + RETURNING + VALUE(rv_result) TYPE abap_bool. + ENDCLASS. @@ -312,6 +318,21 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. ASSERT rv_processes >= 1. + " Avoid going over the maximum available user sessions + IF sy-batch IS INITIAL. + lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ). + + 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. + + ASSERT rv_processes >= 1. + + " Exit setting has highest priority to change maximum sessions li_exit = zcl_abapgit_exit=>get_instance( ). li_exit->change_max_parallel_processes( EXPORTING @@ -319,17 +340,6 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. CHANGING cv_max_processes = rv_processes ). - ASSERT rv_processes >= 1. " check exit above - - " Avoid going over the maximum available user sessions - 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. - rv_processes = lv_available_sessions. - ENDIF. - ENDIF. - ASSERT rv_processes >= 1. ENDMETHOD. @@ -515,6 +525,18 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. ENDMETHOD. + METHOD is_no_parallel. + + " Currently know object types that do not support parallel processing: + " ECTC/ECTD - ECATT Test Config/Data (see #7148) + " Should this list become longer, it should become a flag of the object type serializer + IF iv_object_type = 'ECTC' OR iv_object_type = 'ECTD'. + rv_result = abap_true. + ENDIF. + + ENDMETHOD. + + METHOD is_parallelization_possible. rv_result = boolc( zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false @@ -684,7 +706,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. iv_count = lv_count )->start( ). LOOP AT lt_tadir ASSIGNING . - IF lv_max = 1. + IF lv_max = 1 OR is_no_parallel( -object ) = abap_true. li_progress->show( iv_current = sy-tabix iv_text = |Serialize { -obj_name }, { lv_max } thread| ). diff --git a/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap b/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap index 8d211f6e2..6064f793e 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. @@ -395,10 +395,12 @@ 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, - determine_max_processes_exit FOR TESTING RAISING zcx_abapgit_exception, + determine_max_proc_exit_lower FOR TESTING RAISING zcx_abapgit_exception, + determine_max_proc_exit_higher FOR TESTING RAISING zcx_abapgit_exception, determine_max_processes_capped FOR TESTING RAISING zcx_abapgit_exception, force FOR TESTING RAISING zcx_abapgit_exception, @@ -460,19 +462,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 +481,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD det_max_processes_not_free. given_parallel_proc_disabled( abap_false ). @@ -493,12 +493,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 +519,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD determine_max_processes_no_pp. given_parallel_proc_disabled( abap_true ). @@ -518,7 +530,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD determine_max_processes_merged. given_parallel_proc_disabled( abap_false ). @@ -530,8 +541,10 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. + METHOD determine_max_proc_exit_lower. - METHOD determine_max_processes_exit. + given_free_work_processes( 26 ). + given_available_sessions( 11 ). given_exit_chg_max_processes( 7 ). when_determine_max_processes( ). @@ -539,6 +552,17 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. + METHOD determine_max_proc_exit_higher. + + given_free_work_processes( 20 ). + given_available_sessions( 15 ). + + given_exit_chg_max_processes( 30 ). + when_determine_max_processes( ). + then_we_shd_have_n_processes( 30 ). + + ENDMETHOD. + METHOD determine_max_processes_capped. given_parallel_proc_disabled( abap_false ). @@ -552,7 +576,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD force. when_determine_max_processes( abap_true ). @@ -561,14 +584,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 +602,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 +616,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD then_we_shd_have_n_processes. cl_abap_unit_assert=>assert_equals( @@ -606,7 +624,6 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. - METHOD given_exit_chg_max_processes. mo_exit->set_max_parallel_processes( iv_max_processes ). @@ -686,7 +703,6 @@ CLASS ltcl_serialize IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_tadir. - APPEND INITIAL LINE TO lt_tadir ASSIGNING . -object = 'ABCD'. -obj_name = 'OBJECT'. @@ -794,7 +810,6 @@ CLASS ltcl_i18n DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. setup, test FOR TESTING RAISING zcx_abapgit_exception. - ENDCLASS. @@ -871,4 +886,5 @@ CLASS ltcl_i18n IMPLEMENTATION. cl_abap_unit_assert=>assert_subrc( ). ENDMETHOD. + ENDCLASS.