You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Marcel Reutegger (JIRA)" <ji...@apache.org> on 2012/10/25 14:41:21 UTC

[jira] [Created] (OAK-399) LoginModuleImpl does not use QueryIndexProviders

Marcel Reutegger created OAK-399:
------------------------------------

             Summary: LoginModuleImpl does not use QueryIndexProviders
                 Key: OAK-399
                 URL: https://issues.apache.org/jira/browse/OAK-399
             Project: Jackrabbit Oak
          Issue Type: Improvement
          Components: core
    Affects Versions: 0.5
            Reporter: Marcel Reutegger


The LoginModuleImpl (actually in the base class AbstractLoginModule.getRoot()) creates a RootImpl without any QueryIndexProviders. This results in very poor query performance when the userId is resolved in the IdentifierManager:

        at org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder.getProperty(MemoryNodeBuilder.java:331)
        at org.apache.jackrabbit.oak.core.TreeImpl.internalGetProperty(TreeImpl.java:527)
        at org.apache.jackrabbit.oak.core.TreeImpl.getProperty(TreeImpl.java:143)
        at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:249)
        at org.apache.jackrabbit.oak.query.ast.PropertyValueImpl.currentProperty(PropertyValueImpl.java:98)
        at org.apache.jackrabbit.oak.query.ast.ComparisonImpl.evaluate(ComparisonImpl.java:64)
        at org.apache.jackrabbit.oak.query.ast.SelectorImpl.next(SelectorImpl.java:146)
        at org.apache.jackrabbit.oak.query.Query$RowIterator.fetchNext(Query.java:447)
        at org.apache.jackrabbit.oak.query.Query$RowIterator.hasNext(Query.java:471)
        at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:294)
        at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:283)
        at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getTree(IdentifierManager.java:117)
        at org.apache.jackrabbit.oak.security.user.AuthorizableBaseProvider.getByID(AuthorizableBaseProvider.java:43)
        at org.apache.jackrabbit.oak.security.user.UserProvider.getAuthorizable(UserProvider.java:176)
        at org.apache.jackrabbit.oak.security.user.UserManagerImpl.getAuthorizable(UserManagerImpl.java:93)
        at org.apache.jackrabbit.oak.security.authentication.user.UserAuthentication.authenticate(UserAuthentication.java:82)
        at org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl.login(LoginModuleImpl.java:120)

The query engine basically has to traverse the whole repository to find the node with the given jcr:uuid.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (OAK-399) LoginModuleImpl does not use QueryIndexProviders

Posted by "angela (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OAK-399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13484328#comment-13484328 ] 

angela commented on OAK-399:
----------------------------

the RootImpl is created the RepositoryCallback not in the loginmodule... and you might 
have noticed that there is already a TODO mentioning exactly this problem both in the
callback and in the RootImpl.

the problem is that the RootImpl constructor sets the queryIndex to 
an empty CompositeQueryIndexProvider instead of the onces configured in the setup.


                
> LoginModuleImpl does not use QueryIndexProviders
> ------------------------------------------------
>
>                 Key: OAK-399
>                 URL: https://issues.apache.org/jira/browse/OAK-399
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 0.5
>            Reporter: Marcel Reutegger
>
> The LoginModuleImpl (actually in the base class AbstractLoginModule.getRoot()) creates a RootImpl without any QueryIndexProviders. This results in very poor query performance when the userId is resolved in the IdentifierManager:
>         at org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder.getProperty(MemoryNodeBuilder.java:331)
>         at org.apache.jackrabbit.oak.core.TreeImpl.internalGetProperty(TreeImpl.java:527)
>         at org.apache.jackrabbit.oak.core.TreeImpl.getProperty(TreeImpl.java:143)
>         at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:249)
>         at org.apache.jackrabbit.oak.query.ast.PropertyValueImpl.currentProperty(PropertyValueImpl.java:98)
>         at org.apache.jackrabbit.oak.query.ast.ComparisonImpl.evaluate(ComparisonImpl.java:64)
>         at org.apache.jackrabbit.oak.query.ast.SelectorImpl.next(SelectorImpl.java:146)
>         at org.apache.jackrabbit.oak.query.Query$RowIterator.fetchNext(Query.java:447)
>         at org.apache.jackrabbit.oak.query.Query$RowIterator.hasNext(Query.java:471)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:294)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:283)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getTree(IdentifierManager.java:117)
>         at org.apache.jackrabbit.oak.security.user.AuthorizableBaseProvider.getByID(AuthorizableBaseProvider.java:43)
>         at org.apache.jackrabbit.oak.security.user.UserProvider.getAuthorizable(UserProvider.java:176)
>         at org.apache.jackrabbit.oak.security.user.UserManagerImpl.getAuthorizable(UserManagerImpl.java:93)
>         at org.apache.jackrabbit.oak.security.authentication.user.UserAuthentication.authenticate(UserAuthentication.java:82)
>         at org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl.login(LoginModuleImpl.java:120)
> The query engine basically has to traverse the whole repository to find the node with the given jcr:uuid.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (OAK-399) RootImpl(NodeStore store) does not use configured index providers

Posted by "angela (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OAK-399?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

angela updated OAK-399:
-----------------------

    Summary: RootImpl(NodeStore store) does not use configured index providers  (was: LoginModuleImpl does not use QueryIndexProviders)

i currently see the following options to fix that:

- drop RootImpl constructor that only gets the NodeStore
  -> RepositoryCallback needs to get a new contentsession or root passed an
     cannot create the root itself (see corresponding TODO there). as discussed
     with marcel, we initially thought that the login should rather just 
     create the root on demand instead of having a new contentsession or root
     being created for each login even if it's not used.

- leave the constructor but make sure the root knows about the
  configured index providers
                
> RootImpl(NodeStore store) does not use configured index providers
> -----------------------------------------------------------------
>
>                 Key: OAK-399
>                 URL: https://issues.apache.org/jira/browse/OAK-399
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 0.5
>            Reporter: Marcel Reutegger
>
> The LoginModuleImpl (actually in the base class AbstractLoginModule.getRoot()) creates a RootImpl without any QueryIndexProviders. This results in very poor query performance when the userId is resolved in the IdentifierManager:
>         at org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder.getProperty(MemoryNodeBuilder.java:331)
>         at org.apache.jackrabbit.oak.core.TreeImpl.internalGetProperty(TreeImpl.java:527)
>         at org.apache.jackrabbit.oak.core.TreeImpl.getProperty(TreeImpl.java:143)
>         at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:249)
>         at org.apache.jackrabbit.oak.query.ast.PropertyValueImpl.currentProperty(PropertyValueImpl.java:98)
>         at org.apache.jackrabbit.oak.query.ast.ComparisonImpl.evaluate(ComparisonImpl.java:64)
>         at org.apache.jackrabbit.oak.query.ast.SelectorImpl.next(SelectorImpl.java:146)
>         at org.apache.jackrabbit.oak.query.Query$RowIterator.fetchNext(Query.java:447)
>         at org.apache.jackrabbit.oak.query.Query$RowIterator.hasNext(Query.java:471)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:294)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:283)
>         at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getTree(IdentifierManager.java:117)
>         at org.apache.jackrabbit.oak.security.user.AuthorizableBaseProvider.getByID(AuthorizableBaseProvider.java:43)
>         at org.apache.jackrabbit.oak.security.user.UserProvider.getAuthorizable(UserProvider.java:176)
>         at org.apache.jackrabbit.oak.security.user.UserManagerImpl.getAuthorizable(UserManagerImpl.java:93)
>         at org.apache.jackrabbit.oak.security.authentication.user.UserAuthentication.authenticate(UserAuthentication.java:82)
>         at org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl.login(LoginModuleImpl.java:120)
> The query engine basically has to traverse the whole repository to find the node with the given jcr:uuid.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira