Uploaded image for project: 'Jackrabbit Oak'
  1. Jackrabbit Oak
  2. OAK-4119

Improvements Take 1



    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.2.19, 1.4.7, 1.5.2, 1.6.0
    • core
    • None


      First bunch of potential improvements to be tested/verified using the benchmarks:


      • dedicated index for rep:members property defined by nt rep:MemberReferences (=> mod in UserInitializer)
      • adjust nt-handling in IdentifierManager.getReferences : if a single nt name is specified in the nodeTypeNames param it is inserted in the query statement instead of looking for nt:base
      • simplified, new version of IdentifierManager.getReferences to match needs of membership lookup where propName and a single nt-name is given. see below (in OAK-4119_3.patch)
      • introduce hasAnyReferenceInPath, which allows to search for any references being located in a give subtree of the repository (escaping fixed in OAK-4119_3.patch)
      • MembershipProvider.MemberReferenceIterator: keeping track of processed references is optional i.e. an implementation detail
      • MembershipProvider.AbstractMemberIterator: no more protected fields (patch OAK-4119_2)
      • MembershipProvider.AbstractMemberIterator: breadth-first iteration before performing queries for the inherited members/membership (patch OAK-4119_2)


      • MembershipProvider: introduce shortcut if a Group doesn't have any members
      • MembershipProvider: keep old logic if the target Group has (potentially) pending changes
      • MembershipProvider: for unmodified Groups use reverse membership lookup of the target authorizable instead (patch OAK-4119_2: further optimizes 'hasMembership' as the AbstractMemberIterator doesn't need to search for the complete membership; limiting the number of queries to be executed. see above)
      • GroupImpl: add shortcut if member to be tested is a Group representing the EveryonePrincipal


      • introduce shortcut if a Group doesn't have any members
      • keep old logic if target Group (potentially) has pending changes or if the number of members is small (=> threshold with MembershipProvider)
      • minor change with the old behavior, which does no longer keep track of processed references, which is not needed here
      • for unmodified Groups with plenty of members use IdentifierManager.hasAnyReferenceInPath
      • All modifications in MembershipProvider


      • GroupImpl: drop extra test for circular membership, which is anyway enforced by the UserValidator => needs adjustment of test-cases that expect this to be detected immediately => intoducing save-call to verify if cycles are properly detected latest during commit.
      • UserValidator: if isMember is improved by the changes above, the check for circular membership would be faster as well


      • introduce new methods on MembershipProvider and MembershipWriter that don't take a single contentID but rather a Map of contentID:memberID and returns the set of memberIDs that could not be processed successfully.
      • consequently finding the best rep:members property and avoiding duplicate membership is performed only once for the batch of ids to be added
      • Note: once best-property reaches threshold new member-ref nodes will be created


      • introduce new methods on MembershipProvider and MembershipWriter that don't take a single contentID but rather a Map of contentID:memberID and returns the set of memberIDs that could not be processed successfully.
      • consequently for a given batch of ids the declared member are traversed only once


        1. RemoveMemberTest_with_batch_20160512_161848.csv
          652 kB
          Angela Schreiber
        2. RemoveMembersTest_besteffort_20160512_122352.csv
          660 kB
          Angela Schreiber
        3. OAK-4119.patch
          41 kB
          Angela Schreiber
        4. OAK-4119_tests.patch
          44 kB
          Angela Schreiber
        5. OAK-4119_3.patch
          56 kB
          Angela Schreiber
        6. OAK-4119_2.patch
          47 kB
          Angela Schreiber
        7. MemberMemberOf_notNested_profiling_20160314_094452.csv
          425 kB
          Angela Schreiber
        8. MemberMemberOf_nested_profiling_20160314_085505.csv
          435 kB
          Angela Schreiber
        9. MemberIsMember_notNested_profiling_20160314_123150.csv
          476 kB
          Angela Schreiber
        10. MemberIsMember_nested_profiling_20160314_142612.csv
          473 kB
          Angela Schreiber
        11. MemberIsDeclaredMember_notNested_profiling_20160314_115026.csv
          425 kB
          Angela Schreiber
        12. MemberDeclaredMemberOf_notNested_profiling_20160314_103003.csv
          430 kB
          Angela Schreiber
        13. MemberDeclaredMemberOf_nested_profiling_20160314_111037.csv
          440 kB
          Angela Schreiber
        14. IsMemberTest_notNested_profiling_20160315_115809.csv
          170 kB
          Angela Schreiber
        15. IsMemberTest_nested_profiling_20160315_134252.csv
          178 kB
          Angela Schreiber
        16. IsDeclaredMemberTest_notNested_profiling_20160314_172728.csv
          119 kB
          Angela Schreiber
        17. AddMemberTest_with_batch_20160315_150518.csv
          424 kB
          Angela Schreiber
        18. AddMemberTest_20160314_152515.csv
          103 kB
          Angela Schreiber
        19. AddMembersTest_besteffort_20160314_163025.csv
          496 kB
          Angela Schreiber

        Issue Links



              angela Angela Schreiber
              angela Angela Schreiber
              0 Vote for this issue
              4 Start watching this issue