Project

General

Profile

Actions

Task #1387

closed

ACC - optimalization (one account with more than 50 roles)

Added by Vít Švanda over 5 years ago. Updated about 5 years ago.

Status:
Closed
Priority:
High
Assignee:
Vít Švanda
Category:
Account managment
Target version:
Start date:
11/22/2018
Due date:
% Done:

100%

Estimated time:
44.00 h
Owner:
Actions #1

Updated by Vít Švanda over 5 years ago

  • Target version changed from Opal (9.4.0-rc.1) to Opal (9.4.0)
Actions #2

Updated by Vít Švanda about 5 years ago

  • Target version changed from Opal (9.4.0) to Quartz (9.6.0)
Actions #3

Updated by Vít Švanda about 5 years ago

  • Status changed from In Progress to New
Actions #4

Updated by Vít Švanda about 5 years ago

  • Target version changed from Quartz (9.6.0) to Pyrite (9.5.0)
Actions #5

Updated by Vít Švanda about 5 years ago

  • Estimated time set to 4.00 h
Actions #6

Updated by Vít Švanda about 5 years ago

  • Estimated time changed from 4.00 h to 44.00 h
Actions #7

Updated by Vít Švanda about 5 years ago

  • Status changed from New to In Progress
Actions #8

Updated by Vít Švanda about 5 years ago

Main problem occurrs on assigning new roles.

I created tests for compare progress of optimalization:

Assign 10 new roles -> 10 s
Assing 50 new roles -> 45 s
Assing 100 new roles -> 200 s
Assing 200 new roles -> 1000 s

Actions #9

Updated by Vít Švanda about 5 years ago

  • % Done changed from 0 to 50

Current state of optimalization:

Sync / H2 DB/ Include provisioning / Checking existing identity-account on change the UID - ON
Assing 50 new roles -> 45 s
Assing 100 new roles -> 96s
Assing 200 new roles -> 500s

Sync / H2 DB / Include provisioning/ Checking existing identity-account on change the UID - OFF
Assing 50 new roles -> 34 s
Assing 100 new roles -> 42s
Assing 200 new roles -> 187s

Actions #10

Updated by Vít Švanda about 5 years ago

  • Status changed from In Progress to Needs feedback
  • Assignee changed from Vít Švanda to Radek Tomiška
  • % Done changed from 50 to 90

Optimalization are here:

https://github.com/bcvsolutions/CzechIdMng/commit/7a8175fa3dc7b9f5cfbdfd65ff6cea057d87c838

Performence tests are here (by default are skipped):

https://github.com/bcvsolutions/CzechIdMng/commit/5f7e78a2b696eaef8991bdce1286658cfbf4804d

For bigger optimization is necessary to implement "elementary ACM" (#1534).

Actions #11

Updated by Vít Švanda about 5 years ago

I continued with optimalization of remove a identity-roles.

Delete is already implemented as elementary. I created performance test for delete:
--------------
Sync / H2 DB/ Include provisioning
Remove 100 roles -> 37s
Remove 200 roles -> 150s

For remove one identity-roles was used 449 selects (includes subselects).
--------------
This are not good results, mainly if the time for remove double of identity-roles spend four times more time.

Actions #12

Updated by Vít Švanda about 5 years ago

  • Status changed from Needs feedback to In Progress
  • Assignee changed from Radek Tomiška to Vít Švanda

I did optimalization with this results:
--------------
Sync / H2 DB/ Include provisioning
Remove 100 roles -> 18s
Remove 200 roles -> 44s

For remove one identity-roles was used 220 selects (includes subselects).
--------------
This are much more better results, mainly the time needed for remove more identity-roles is almost linear.

What was optimalized?:
- Mainly reduction of selects (counts instead select, more efective searching ...).
- Check on change of authorities are realized only if removed identity-role (role) has assignes some authorizations (IdentityRoleDeleteAuthoritiesProcessor).

Commit: https://github.com/bcvsolutions/CzechIdMng/commit/d896c9b9af13f4c88285bd2629ba59e0cac73231

Actions #13

Updated by Vít Švanda about 5 years ago

Next optimalizations for provisioning and fix (find of overridden attributes).
- Filtering in SysRoleSystemAttributes was refactored for using a toPredicate.

Commit: https://github.com/bcvsolutions/CzechIdMng/commit/6abb601ab2fdec2189c21e2bdcffde74ae7737b2

Actions #14

Updated by Vít Švanda about 5 years ago

I did next optimalization with this results:
--------------
Sync / H2 DB/ Include provisioning
Remove 100 roles -> 12s
Remove 200 roles -> 32s


--------------
Sync / H2 DB/ Provisioning skiped
Remove 200 roles (for identity, for on account)-> 3,7s


What was optimalized?:
- Optimalization in provisioning part (redundant selects ... ).
- Provisioning (for delete) is executed only for identity-roles with some mapped system.
- I implemented skip of provisioning to the delete identity-role processor. This skip is very useful (3,7s 32s) for situations, when we want to delete many roles for one user (on one account). In this case we can delete all identity-role with skip and only last one delete without skip.

Commit: https://github.com/bcvsolutions/CzechIdMng/commit/278cb219aaad714668659442cbbae80fdd1a11c0

Actions #15

Updated by Vít Švanda about 5 years ago

  • Status changed from In Progress to Needs feedback
  • Assignee changed from Vít Švanda to Radek Tomiška
Actions #16

Updated by Radek Tomiška about 5 years ago

  • Status changed from Needs feedback to Resolved
  • Assignee changed from Radek Tomiška to Vít Švanda
  • % Done changed from 90 to 100

I did test of account management a review a code, it looks nice. I was not able to broke it :)
Special thx for the rewrite of repositories find method int service.

Actions #17

Updated by Vít Švanda about 5 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF