This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo-access.git


The following commit(s) were added to refs/heads/main by this push:
     new bd5cc2d  adds optimization for empty authorizations (#70)
bd5cc2d is described below

commit bd5cc2d072e3f79f6190fd39416c43dfd8a4fd31
Author: Keith Turner <ktur...@apache.org>
AuthorDate: Mon Jul 8 09:29:04 2024 -0700

    adds optimization for empty authorizations (#70)
---
 .../java/org/apache/accumulo/access/Authorizations.java  | 16 ++++++++++++++--
 .../org/apache/accumulo/access/AuthorizationTest.java    | 11 ++++++++++-
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/apache/accumulo/access/Authorizations.java 
b/src/main/java/org/apache/accumulo/access/Authorizations.java
index d3bd568..eb333a7 100644
--- a/src/main/java/org/apache/accumulo/access/Authorizations.java
+++ b/src/main/java/org/apache/accumulo/access/Authorizations.java
@@ -33,6 +33,8 @@ import java.util.Set;
  */
 public final class Authorizations {
 
+  private static final Authorizations EMPTY = new Authorizations(Set.of());
+
   private final Set<String> authorizations;
 
   private Authorizations(Set<String> authorizations) {
@@ -68,6 +70,13 @@ public final class Authorizations {
     return authorizations.toString();
   }
 
+  /**
+   * @return a pre-allocated empty Authorizations object
+   */
+  public static Authorizations of() {
+    return EMPTY;
+  }
+
   /**
    * Creates an Authorizations object from the set of input authorization 
strings.
    *
@@ -75,7 +84,10 @@ public final class Authorizations {
    * @return Authorizations object
    */
   public static Authorizations of(Set<String> authorizations) {
-    return new Authorizations(authorizations);
+    if (authorizations.isEmpty()) {
+      return EMPTY;
+    } else {
+      return new Authorizations(authorizations);
+    }
   }
-
 }
diff --git a/src/test/java/org/apache/accumulo/access/AuthorizationTest.java 
b/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
index 22636ae..1e1e764 100644
--- a/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
+++ b/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
@@ -20,6 +20,7 @@ package org.apache.accumulo.access;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 import java.util.Set;
 
@@ -39,7 +40,15 @@ public class AuthorizationTest {
 
     assertNotEquals(auths1, auths3);
     assertNotEquals(auths1.hashCode(), auths3.hashCode());
-
   }
 
+  @Test
+  public void testEmpty() {
+    // check if new object is allocated
+    assertSame(Authorizations.of(), Authorizations.of());
+    // check if optimization is working
+    assertSame(Authorizations.of(), Authorizations.of(Set.of()));
+    assertEquals(Set.of(), Authorizations.of().asSet());
+    assertSame(Set.of(), Authorizations.of().asSet());
+  }
 }

Reply via email to