Remove need to parallel_generators server group

SAP Note [3215918](https://me.sap.com/notes/3215918) - Parallel RFC group "default" replacing group "parallel_generators"

This change removes the need to maintain the `parallel_generators` server group. The developer version of abapGit will now default to parallel processing (when activated in your abapGit settings). 

The option to set a server group via exit remains the same.

Ref #7074
This commit is contained in:
Marc Bernard 2024-12-18 16:18:07 +00:00
parent 1fac2a71e2
commit 652c697a4a
5 changed files with 212 additions and 10 deletions

View File

@ -42,6 +42,8 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
ENDMETHOD.
ENDCLASS.

View File

@ -2,11 +2,11 @@ CLASS zcl_abapgit_environment DEFINITION
PUBLIC
FINAL
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_factory .
GLOBAL FRIENDS zcl_abapgit_factory.
PUBLIC SECTION.
INTERFACES zif_abapgit_environment .
INTERFACES zif_abapgit_environment.
PROTECTED SECTION.
PRIVATE SECTION.
@ -16,7 +16,7 @@ CLASS zcl_abapgit_environment DEFINITION
METHODS is_system_changes_allowed
RETURNING
VALUE(rv_result) TYPE abap_bool .
VALUE(rv_result) TYPE abap_bool.
ENDCLASS.
@ -76,6 +76,49 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
" If check fails, see transactions RZ12
DATA:
lt_setup TYPE STANDARD TABLE OF rzllitab,
ls_setup LIKE LINE OF lt_setup,
lt_erfc_setup TYPE STANDARD TABLE OF rzlliclass,
lt_instances TYPE STANDARD TABLE OF msxxlist WITH DEFAULT KEY.
" Check if server group for parallel processing exists
CALL FUNCTION 'SMLG_GET_SETUP'
EXPORTING
grouptype = 'S'
TABLES
setup = lt_setup
erfc_setup = lt_erfc_setup
EXCEPTIONS
foreign_lock = 1
system_failure = 2
invalid_group_type = 3
OTHERS = 4.
IF sy-subrc <> 0.
RETURN.
ENDIF.
READ TABLE lt_setup INTO ls_setup WITH KEY classname = iv_group.
IF sy-subrc = 0 AND ls_setup-applserver IS NOT INITIAL.
" Check if assigned server instance exists
CALL FUNCTION 'TH_SERVER_LIST'
TABLES
list = lt_instances.
READ TABLE lt_instances TRANSPORTING NO FIELDS WITH KEY name = ls_setup-applserver.
IF sy-subrc = 0.
rv_checked = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~compare_with_inactive.
rv_result = zif_abapgit_environment~is_sap_cloud_platform( ).
ENDMETHOD.

View File

@ -39,6 +39,11 @@ INTERFACE zif_abapgit_environment
iv_group TYPE clike
RETURNING
VALUE(rv_free_work_processes) TYPE i.
METHODS check_parallel_processing
IMPORTING
iv_group TYPE clike
RETURNING
VALUE(rv_checked) TYPE abap_bool.
METHODS get_available_user_sessions
RETURNING
VALUE(rv_sessions) TYPE i.

View File

@ -99,6 +99,11 @@ CLASS zcl_abapgit_serialize DEFINITION
VALUE(ct_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
RAISING
zcx_abapgit_exception .
METHODS determine_rfc_server_group
RETURNING
VALUE(rv_group) TYPE rzlli_apcl
RAISING
zcx_abapgit_exception.
METHODS determine_max_processes
IMPORTING
!iv_force_sequential TYPE abap_bool DEFAULT abap_false
@ -255,11 +260,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
METHOD constructor.
DATA li_exit TYPE REF TO zif_abapgit_exit.
mv_group = 'parallel_generators'.
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->change_rfc_server_group( CHANGING cv_group = mv_group ).
mv_group = determine_rfc_server_group( ).
mo_dot_abapgit = io_dot_abapgit.
ms_local_settings = is_local_settings.
@ -334,6 +335,29 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
ENDMETHOD.
METHOD determine_rfc_server_group.
DATA:
li_exit TYPE REF TO zif_abapgit_exit,
lv_exists TYPE abap_bool.
" According to SAP Note 3215918 it's recommended NOT to use this group anymore.
" However, we keep it for compatibility. If it does not exist, we switch to the
" recommended DEFAULT behaviour.
rv_group = 'parallel_generators'.
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->change_rfc_server_group( CHANGING cv_group = rv_group ).
" Check if RFC server group exists and fallback to the default
lv_exists = zcl_abapgit_factory=>get_environment( )->check_parallel_processing( rv_group ).
IF lv_exists = abap_false.
rv_group = ''.
ENDIF.
ENDMETHOD.
METHOD files_local.
* serializes objects, including .abapgit.xml, apack, and takes into account local settings
@ -495,7 +519,6 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
rv_result = boolc( zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false
AND zcl_abapgit_persist_factory=>get_settings( )->read( )->get_parallel_proc_disabled( ) = abap_false
AND mv_group IS NOT INITIAL
" The function module below should always exist here as is_merged evaluated to false above.
" It does however not exist in the transpiled version which then causes unit tests to fail.
" Therefore the check needs to stay.
@ -557,6 +580,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
DO.
lv_task = |{ iv_task }-{ sy-index }|.
" An initial server group is handled like DEFAULT meaning all instances are used
CALL FUNCTION 'Z_ABAPGIT_SERIALIZE_PARALLEL'
STARTING NEW TASK lv_task
DESTINATION IN GROUP mv_group

View File

@ -1,5 +1,6 @@
CLASS ltcl_determine_max_processes DEFINITION DEFERRED.
CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes.
CLASS ltcl_determine_server_group DEFINITION DEFERRED.
CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes ltcl_determine_server_group.
CLASS ltd_settings DEFINITION FINAL FOR TESTING
DURATION SHORT
@ -67,6 +68,9 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
zif_abapgit_environment.
METHODS:
set_server_group
IMPORTING iv_group TYPE rzlli_apcl,
set_is_merged
IMPORTING iv_is_merged TYPE abap_bool,
@ -78,6 +82,7 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
PRIVATE SECTION.
DATA:
mv_group TYPE rzlli_apcl,
mv_is_merged TYPE abap_bool,
mv_available_sessions TYPE i,
mv_free_work_processes TYPE i.
@ -123,6 +128,14 @@ CLASS ltd_environment IMPLEMENTATION.
rv_free_work_processes = mv_free_work_processes.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
rv_checked = boolc( iv_group = mv_group ).
ENDMETHOD.
METHOD set_server_group.
mv_group = iv_group.
ENDMETHOD.
METHOD set_is_merged.
mv_is_merged = iv_is_merged.
ENDMETHOD.
@ -147,12 +160,16 @@ CLASS ltd_exit DEFINITION FINAL FOR TESTING
zif_abapgit_exit.
METHODS:
set_server_group
IMPORTING iv_group TYPE rzlli_apcl,
set_max_parallel_processes
IMPORTING
iv_max_parallel_processes TYPE i.
PRIVATE SECTION.
DATA:
mv_group TYPE rzlli_apcl,
mv_max_parallel_processes TYPE i.
ENDCLASS.
@ -188,6 +205,9 @@ CLASS ltd_exit IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_exit~change_rfc_server_group.
IF mv_group IS NOT INITIAL.
cv_group = mv_group.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_exit~change_supported_data_objects.
@ -241,6 +261,10 @@ CLASS ltd_exit IMPLEMENTATION.
METHOD zif_abapgit_exit~wall_message_repo.
ENDMETHOD.
METHOD set_server_group.
mv_group = iv_group.
ENDMETHOD.
METHOD set_max_parallel_processes.
mv_max_parallel_processes = iv_max_parallel_processes.
ENDMETHOD.
@ -248,6 +272,110 @@ CLASS ltd_exit IMPLEMENTATION.
ENDCLASS.
CLASS ltcl_determine_server_group DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
DATA:
mo_cut TYPE REF TO zcl_abapgit_serialize,
mo_environment_double TYPE REF TO ltd_environment,
mo_exit TYPE REF TO ltd_exit,
mv_act_group TYPE rzlli_apcl.
METHODS:
setup,
default_server_group FOR TESTING RAISING zcx_abapgit_exception,
legacy_server_group FOR TESTING RAISING zcx_abapgit_exception,
exit_server_group FOR TESTING RAISING zcx_abapgit_exception,
exit_not_exist_server_group FOR TESTING RAISING zcx_abapgit_exception,
teardown,
given_db_server_group
IMPORTING
iv_group TYPE rzlli_apcl,
given_exit_chg_server_group
IMPORTING
iv_group TYPE rzlli_apcl,
when_determine_server_group
RAISING
zcx_abapgit_exception,
then_we_shd_have_server_group
IMPORTING
iv_exp_group TYPE rzlli_apcl.
ENDCLASS.
CLASS ltcl_determine_server_group IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_environment_double.
zcl_abapgit_injector=>set_environment( mo_environment_double ).
CREATE OBJECT mo_exit.
zcl_abapgit_injector=>set_exit( mo_exit ).
TRY.
CREATE OBJECT mo_cut.
CATCH zcx_abapgit_exception.
cl_abap_unit_assert=>fail( 'Error creating serializer' ).
ENDTRY.
ENDMETHOD.
METHOD teardown.
CLEAR: mo_cut->mv_group.
ENDMETHOD.
METHOD default_server_group.
when_determine_server_group( ).
then_we_shd_have_server_group( '' ).
ENDMETHOD.
METHOD legacy_server_group.
given_db_server_group( 'parallel_generators' ).
when_determine_server_group( ).
then_we_shd_have_server_group( 'parallel_generators' ).
ENDMETHOD.
METHOD exit_server_group.
given_db_server_group( 'my_group' ).
given_exit_chg_server_group( 'my_group' ).
when_determine_server_group( ).
then_we_shd_have_server_group( 'my_group' ).
ENDMETHOD.
METHOD exit_not_exist_server_group.
given_exit_chg_server_group( 'my_servers' ).
when_determine_server_group( ).
then_we_shd_have_server_group( '' ).
ENDMETHOD.
METHOD given_db_server_group.
mo_environment_double->set_server_group( iv_group ).
ENDMETHOD.
METHOD given_exit_chg_server_group.
mo_exit->set_server_group( iv_group ).
ENDMETHOD.
METHOD when_determine_server_group.
mv_act_group = mo_cut->determine_rfc_server_group( ).
ENDMETHOD.
METHOD then_we_shd_have_server_group.
cl_abap_unit_assert=>assert_equals(
act = mv_act_group
exp = iv_exp_group ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.