From a637caf864b65c5cee3084c2aa3c15ebdec7954e Mon Sep 17 00:00:00 2001 From: manhofmann <66171315+manhofmann@users.noreply.github.com> Date: Thu, 9 Dec 2021 06:58:58 +0100 Subject: [PATCH] performance optimization parallel mode (#5187) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 * moved type defintion to PRIVATE SECTION Co-authored-by: Lars Hvam Co-authored-by: Christian Günter --- src/objects/zcl_abapgit_objects.clas.abap | 76 ++++++++++++++++++----- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index c2a76474d..0423e07c7 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -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 @@ -172,12 +181,12 @@ CLASS zcl_abapgit_objects DEFINITION CLASS-METHODS change_package_assignments IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item - !ii_log TYPE REF TO zif_abapgit_log. + !ii_log TYPE REF TO zif_abapgit_log . 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 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 + 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 = -supported. ENDMETHOD. @@ -1020,16 +1051,23 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. METHOD supported_list. - DATA: lt_objects TYPE STANDARD TABLE OF ko100, - ls_item TYPE zif_abapgit_definitions=>ty_item. + DATA: lt_objects TYPE STANDARD TABLE OF ko100, + ls_item TYPE zif_abapgit_definitions=>ty_item, + ls_supported_obj_type TYPE ty_supported_types. FIELD-SYMBOLS LIKE LINE OF lt_objects. + FIELD-SYMBOLS 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 WHERE supported = abap_true. + INSERT -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 WHERE pgmid = 'R3TR'. + ls_item-obj_type = -object. - IF is_supported( ls_item ) = abap_true. - INSERT -object INTO TABLE rt_types. + ls_supported_obj_type-obj_type = -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.