performance optimization parallel mode (#5187)

* performance optimization parallel mode

in parallel mode a new session is created for each object to be serialized. method IS_TYPE_SUPPORTED is called in each new session with only one object type. however all objects are loaded via method SUPPORTED_LIST. this change implements a specific cache for method IS_TYPE_SUPPORTED.

* Update src/objects/zcl_abapgit_objects.clas.abap

Co-authored-by: Christian Günter <christianguenter@googlemail.com>

* moved type defintion to PRIVATE SECTION

Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Christian Günter <christianguenter@googlemail.com>
This commit is contained in:
manhofmann 2021-12-09 06:58:58 +01:00 committed by GitHub
parent b46c8b4599
commit a637caf864
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -88,6 +88,14 @@ CLASS zcl_abapgit_objects DEFINITION
PRIVATE SECTION.
TYPES:
BEGIN OF ty_supported_types,
obj_type TYPE tadir-object,
supported TYPE abap_bool,
END OF ty_supported_types.
TYPES: ty_supported_types_tt TYPE SORTED TABLE OF ty_supported_types WITH UNIQUE KEY obj_type.
TYPES:
BEGIN OF ty_obj_serializer_item,
item TYPE zif_abapgit_definitions=>ty_item,
@ -97,7 +105,8 @@ CLASS zcl_abapgit_objects DEFINITION
ty_obj_serializer_map TYPE SORTED TABLE OF ty_obj_serializer_item WITH UNIQUE KEY item .
CLASS-DATA gt_obj_serializer_map TYPE ty_obj_serializer_map .
CLASS-DATA gt_supported_obj_types TYPE ty_types_tt .
CLASS-DATA gt_supported_obj_types TYPE ty_supported_types_tt .
CLASS-DATA gv_supported_obj_types_loaded TYPE abap_bool .
CLASS-METHODS check_duplicates
IMPORTING
@ -177,7 +186,7 @@ ENDCLASS.
CLASS zcl_abapgit_objects IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
METHOD changed_by.
@ -888,13 +897,35 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
METHOD is_type_supported.
" If necessary, initialize list
IF gt_supported_obj_types IS INITIAL.
supported_list( ).
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
ls_supported_obj_type TYPE ty_supported_types.
FIELD-SYMBOLS <ls_supported_obj_type> TYPE ty_supported_types.
IF iv_obj_type IS INITIAL.
" empty object type should never exist
RETURN.
ENDIF.
READ TABLE gt_supported_obj_types TRANSPORTING NO FIELDS WITH TABLE KEY table_line = iv_obj_type.
rv_bool = boolc( sy-subrc = 0 ).
READ TABLE gt_supported_obj_types
ASSIGNING <ls_supported_obj_type>
WITH KEY obj_type = iv_obj_type.
IF sy-subrc <> 0.
ls_item-obj_type = iv_obj_type.
ls_supported_obj_type-obj_type = iv_obj_type.
ls_supported_obj_type-supported = is_supported( ls_item ).
INSERT ls_supported_obj_type INTO TABLE gt_supported_obj_types.
rv_bool = ls_supported_obj_type-supported.
RETURN.
ENDIF.
rv_bool = <ls_supported_obj_type>-supported.
ENDMETHOD.
@ -1021,15 +1052,22 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
METHOD supported_list.
DATA: lt_objects TYPE STANDARD TABLE OF ko100,
ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item TYPE zif_abapgit_definitions=>ty_item,
ls_supported_obj_type TYPE ty_supported_types.
FIELD-SYMBOLS <ls_object> LIKE LINE OF lt_objects.
FIELD-SYMBOLS <ls_supported_obj_type> TYPE ty_supported_types.
IF gt_supported_obj_types IS NOT INITIAL.
rt_types = gt_supported_obj_types.
IF gv_supported_obj_types_loaded = abap_true.
LOOP AT gt_supported_obj_types ASSIGNING <ls_supported_obj_type> WHERE supported = abap_true.
INSERT <ls_supported_obj_type>-obj_type INTO TABLE rt_types.
ENDLOOP.
RETURN.
ENDIF.
" delete content because it might be filled already by method IS_TYPE_SUPPORTED
CLEAR gt_supported_obj_types.
CALL FUNCTION 'TR_OBJECT_TABLE'
TABLES
wt_object_text = lt_objects
@ -1037,13 +1075,21 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
OTHERS = 1 ##FM_SUBRC_OK.
LOOP AT lt_objects ASSIGNING <ls_object> WHERE pgmid = 'R3TR'.
ls_item-obj_type = <ls_object>-object.
IF is_supported( ls_item ) = abap_true.
INSERT <ls_object>-object INTO TABLE rt_types.
ls_supported_obj_type-obj_type = <ls_object>-object.
ls_supported_obj_type-supported = is_supported( ls_item ).
INSERT ls_supported_obj_type INTO TABLE gt_supported_obj_types.
IF ls_supported_obj_type-supported = abap_true.
INSERT ls_supported_obj_type-obj_type INTO TABLE rt_types.
ENDIF.
ENDLOOP.
gt_supported_obj_types = rt_types.
gv_supported_obj_types_loaded = abap_true.
ENDMETHOD.