Skip to content

Commit

Permalink
perf(GraphQL): Part-4: Child auth queries are derived from auth filte…
Browse files Browse the repository at this point in the history
…red parents (GRAPHQL-854) (#7111)

This PR optimizes auth query rewriting by deriving child auth queries from auth filtered parents instead of all possible parents. This reduces the number of `touched_uids` at deep levels. This performance benefit comes into effect when there are a lot of nested levels in auth rules.
  • Loading branch information
abhimanyusinghgaur committed Dec 11, 2020
1 parent 004ca03 commit e2d93de
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 144 deletions.
32 changes: 16 additions & 16 deletions graphql/resolve/auth_delete_test.yaml
Expand Up @@ -197,10 +197,10 @@
}
ticket(func: uid(Ticket5)) {
title : Ticket.title
onColumn : Ticket.onColumn @filter(uid(Column15)) {
inProject : Column.inProject @filter(uid(Project13)) {
roles : Project.roles @filter(uid(Role11)) {
assignedTo : Role.assignedTo @filter(uid(User10)) {
onColumn : Ticket.onColumn @filter(uid(Column6)) {
inProject : Column.inProject @filter(uid(Project8)) {
roles : Project.roles @filter(uid(Role10)) {
assignedTo : Role.assignedTo @filter(uid(User12)) {
username : User.username
age : User.age
dgraph.uid : uid
Expand All @@ -225,27 +225,27 @@
}
}
var(func: uid(Ticket5)) {
Column6 as Ticket.onColumn
Column7 as Ticket.onColumn
}
Column15 as var(func: uid(Column6)) @filter(uid(ColumnAuth14))
Column6 as var(func: uid(Column7)) @filter(uid(ColumnAuth15))
var(func: uid(Column6)) {
Project7 as Column.inProject
Project9 as Column.inProject
}
Project13 as var(func: uid(Project7)) @filter(uid(ProjectAuth12))
var(func: uid(Project7)) {
Role8 as Project.roles
Project8 as var(func: uid(Project9)) @filter(uid(ProjectAuth14))
var(func: uid(Project8)) {
Role11 as Project.roles
}
Role11 as var(func: uid(Role8))
var(func: uid(Role8)) {
User9 as Role.assignedTo
Role10 as var(func: uid(Role11))
var(func: uid(Role10)) {
User13 as Role.assignedTo
}
User10 as var(func: uid(User9))
ProjectAuth12 as var(func: uid(Project7)) @cascade {
User12 as var(func: uid(User13))
ProjectAuth14 as var(func: uid(Project9)) @cascade {
roles : Project.roles @filter(eq(Role.permission, "VIEW")) {
assignedTo : Role.assignedTo @filter(eq(User.username, "user1"))
}
}
ColumnAuth14 as var(func: uid(Column6)) @cascade {
ColumnAuth15 as var(func: uid(Column7)) @cascade {
inProject : Column.inProject {
roles : Project.roles @filter(eq(Role.permission, "VIEW")) {
assignedTo : Role.assignedTo @filter(eq(User.username, "user1"))
Expand Down

0 comments on commit e2d93de

Please sign in to comment.