Skip to content

KAFKA-14214: Convert StandardAuthorizer to copy-on-write#12662

Closed
cmccabe wants to merge 1 commit intoapache:trunkfrom
cmccabe:KAFKA-14214-III
Closed

KAFKA-14214: Convert StandardAuthorizer to copy-on-write#12662
cmccabe wants to merge 1 commit intoapache:trunkfrom
cmccabe:KAFKA-14214-III

Conversation

@cmccabe
Copy link
Copy Markdown
Contributor

@cmccabe cmccabe commented Sep 19, 2022

Convert StandardAuthorizer to use copy-on-write data structures. The issue with the concurrent skiplist was that because it was modified while in use by StandardAuthorizer#authorize, we could sometimes expose an inconsistent state. For example, if we added a "deny principal foo", followed by "allow all", a request for principal foo might happen to see the second one, without seeing the first one, even though the first one was added first.

In order to efficiently implement prefix ACLs, store them in a prefix tree. This ensures that we can check all prefix ACLs for a path in logarithmic time. Also implement Authorizer#authorizeByResourceType. The default implementation of this function is quite slow, so it is good to have an implementation in StandardAuthorizer.

Finally, this PR renames AclAuthorizerBenchmark to AuthorizerBenchmark and extends it to report information about StandardAuthorizer as well as AclAuthorizer.

Convert StandardAuthorizer to use copy-on-write data structures.  The issue with the concurrent
skiplist was that because it was modified while in use by StandardAuthorizer#authorize, we could
sometimes expose an inconsistent state. For example, if we added a "deny principal foo", followed
by "allow all", a request for principal foo might happen to see the second one, without seeing the
first one, even though the first one was added first.

In order to efficiently implement prefix ACLs, store them in a prefix tree. This ensures that we
can check all prefix ACLs for a path in logarithmic time. Also implement
Authorizer#authorizeByResourceType. The default implementation of this function is quite slow, so
it is good to have an implementation in StandardAuthorizer.

Finally, this PR renames AclAuthorizerBenchmark to AuthorizerBenchmark and extends it to report
information about StandardAuthorizer as well as AclAuthorizer.

Co-authored-by: Akhilesh Chaganti <achaganti@confluent.io>
@divijvaidya
Copy link
Copy Markdown
Member

@cmccabe I guess this can be closed now since it is superseded by #13437 ?

@cmccabe
Copy link
Copy Markdown
Contributor Author

cmccabe commented Aug 9, 2023

@cmccabe I guess this can be closed now since it is superseded by #13437 ?

yes. thanks.

@cmccabe cmccabe closed this Aug 9, 2023
@cmccabe cmccabe deleted the KAFKA-14214-III branch August 9, 2023 05:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants