> On Aug. 21, 2018, 8:34 p.m., Na Li wrote:
> > sentry-service/sentry-service-server/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
> > Lines 328 (patched)
> > <https://reviews.apache.org/r/61863/diff/4/?file=2075761#file2075761line328>
> >
> >     what is the purpose of adding this?
> >     
> >     IN package.jdo,
> >     
> >     <class name="MSentryRole" identity-type="datastore" table="SENTRY_ROLE" 
> > detachable="true">
> >     
> >     You can see the privileges and other fields are all in default fetching 
> > group
> >     
> >     "<field name = "privileges" table="SENTRY_ROLE_DB_PRIVILEGE_MAP" 
> > default-fetch-group="true">"
> >     
> >     So I don't think the code change here will make a difference. Have you 
> > tested that this change does improve performance?

default fetch group only fetches primitive types and String objects but not 
anything else. I did test performance improvement with show roles and show 
tables command and they were significantly faster


> On Aug. 21, 2018, 8:34 p.m., Na Li wrote:
> > sentry-service/sentry-service-server/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
> > Lines 365 (patched)
> > <https://reviews.apache.org/r/61863/diff/4/?file=2075761#file2075761line365>
> >
> >     privileges is in default fetch group of MSentryUser
> >     
> >     <class name="MSentryUser" identity-type="datastore" table="SENTRY_USER" 
> > detachable="true">
> >           <datastore-identity>
> >             <column name="USER_ID"/>
> >           </datastore-identity>
> >           <field name="userName">
> >             <column name="USER_NAME" length="128" jdbc-type="VARCHAR"/>
> >             <index name="SentryUserName" unique="true"/>
> >           </field>
> >           <field name = "createTime">
> >             <column name = "CREATE_TIME" jdbc-type="BIGINT"/>
> >           </field>
> >     
> >           <field name="roles" mapped-by="users">
> >              <collection 
> > element-type="org.apache.sentry.provider.db.service.model.MSentryRole"/>
> >           </field>
> >     
> >           <field name = "privileges" table="SENTRY_USER_DB_PRIVILEGE_MAP" 
> > default-fetch-group="true">

That means the attributes of privileges will be fetched in default-fetch-group, 
but not the privilege object when fetching sentry_users


> On Aug. 21, 2018, 8:34 p.m., Na Li wrote:
> > sentry-service/sentry-service-server/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
> > Lines 1466 (patched)
> > <https://reviews.apache.org/r/61863/diff/4/?file=2075761#file2075761line1466>
> >
> >     This will make roles fetched for privileges automatically

It should make privilege fetch for roles and users


> On Aug. 21, 2018, 8:34 p.m., Na Li wrote:
> > sentry-service/sentry-service-server/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
> > Line 2239 (original), 2280 (patched)
> > <https://reviews.apache.org/r/61863/diff/4/?file=2075761#file2075761line2280>
> >
> >     can you reduce overhead by
> >     
> >     result.add(convertToTsentryRole( role, mgroup.getGroupName))? 
> >     
> >       private TSentryRole convertToTSentryRole(MSentryRole mSentryRole, 
> > String groupName) {
> >         String roleName = mSentryRole.getRoleName().intern();
> >         
> >         Set<TSentryGroup> sentryGroups = new HashSet<>(1);
> >         sentryGroups.add(new TSentryGroup(groupName.intern());
> >          
> >         
> >     
> >         return new TSentryRole(roleName, sentryGroups, 
> > EMPTY_GRANTOR_PRINCIPAL);
> >       }
> >       
> >       In this way, you don't need to need to mSentryRole.getGroups(), which 
> > should cause another call to DB to get the groups of a role.
> >       
> >       In this way, we only have DB access to get a group and its roles. No 
> > fetching of privileges and other groups of each role that is associated 
> > with the specific group

I wasn't sure if all groups needed to be fetched for that role. I think I could 
do that in a different ticket. Let me know if you agree


- Arjun


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/61863/#review207690
-----------------------------------------------------------


On Aug. 21, 2018, 7:19 p.m., Arjun Mishra wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/61863/
> -----------------------------------------------------------
> 
> (Updated Aug. 21, 2018, 7:19 p.m.)
> 
> 
> Review request for sentry, kalyan kumar kalvagadda, Na Li, and Sergio Pena.
> 
> 
> Repository: sentry
> 
> 
> Description
> -------
> 
> Right now when we get privileges from sentry, we pass in a provider like set 
> of groups. Then we create a MSentryGroup object for each group and then get 
> roles using the .getRoles() method. This is bad since we only need the 
> roleNames for the group and not the entire Role object.  
> Instead running a SQL like query and just getting roleNames will drastically 
> improve performance
> 
> 
> Diffs
> -----
> 
>   
> sentry-service/sentry-service-server/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
>  0ef6a208f 
> 
> 
> Diff: https://reviews.apache.org/r/61863/diff/4/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Arjun Mishra
> 
>

Reply via email to