You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by md...@apache.org on 2013/11/11 20:49:52 UTC

[04/10] git commit: ACCUMULO-1434 Added 'empty' node to CV parse tree

ACCUMULO-1434 Added 'empty' node to CV parse tree


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/d059d007
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/d059d007
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/d059d007

Branch: refs/heads/master
Commit: d059d007766920b58946a52e2c051ab19b8e8bda
Parents: 6648056
Author: Mike Drob <md...@mdrob.com>
Authored: Mon Nov 11 14:10:20 2013 -0500
Committer: Mike Drob <md...@mdrob.com>
Committed: Mon Nov 11 14:16:34 2013 -0500

----------------------------------------------------------------------
 .../accumulo/core/security/ColumnVisibility.java       | 13 +++++++++++--
 .../accumulo/core/security/ColumnVisibilityTest.java   |  7 +++++++
 2 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/d059d007/src/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
----------------------------------------------------------------------
diff --git a/src/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java b/src/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
index a7ac8e0..e628c23 100644
--- a/src/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
+++ b/src/core/src/main/java/org/apache/accumulo/core/security/ColumnVisibility.java
@@ -46,8 +46,13 @@ public class ColumnVisibility {
   }
   
   public static enum NodeType {
-    TERM, OR, AND,
+    EMPTY, TERM, OR, AND,
   }
+
+  /**
+   * All empty nodes are equal and represent the same value.
+   */
+  private static final Node EMPTY_NODE = new Node(NodeType.EMPTY);
   
   public static class Node {
     public final static List<Node> EMPTY = Collections.emptyList();
@@ -104,6 +109,8 @@ public class ColumnVisibility {
       if (diff != 0)
         return diff;
       switch (a.type) {
+        case EMPTY:
+          return 0; // All empty nodes are the same
         case TERM:
           return WritableComparator.compareBytes(text, a.start, a.end - a.start, text, b.start, b.end - b.start);
         case OR:
@@ -255,6 +262,8 @@ public class ColumnVisibility {
     if (expression != null && expression.length > 0) {
       ColumnVisibilityParser p = new ColumnVisibilityParser();
       node = p.parse(expression);
+    } else {
+      node = EMPTY_NODE;
     }
     this.expression = expression;
   }
@@ -263,7 +272,7 @@ public class ColumnVisibility {
    * Empty visibility. Normally, elements with empty visibility can be seen by everyone. Though, one could change this behavior with filters.
    */
   public ColumnVisibility() {
-    expression = new byte[0];
+    this(new byte[] {});
   }
   
   /**

http://git-wip-us.apache.org/repos/asf/accumulo/blob/d059d007/src/core/src/test/java/org/apache/accumulo/core/security/ColumnVisibilityTest.java
----------------------------------------------------------------------
diff --git a/src/core/src/test/java/org/apache/accumulo/core/security/ColumnVisibilityTest.java b/src/core/src/test/java/org/apache/accumulo/core/security/ColumnVisibilityTest.java
index df1863a..e698599 100644
--- a/src/core/src/test/java/org/apache/accumulo/core/security/ColumnVisibilityTest.java
+++ b/src/core/src/test/java/org/apache/accumulo/core/security/ColumnVisibilityTest.java
@@ -47,6 +47,13 @@ public class ColumnVisibilityTest {
   }
   
   @Test
+  public void testEmptyFlatten() {
+    // empty visibility is valid
+    new ColumnVisibility().flatten();
+    new ColumnVisibility("").flatten();
+  }
+
+  @Test
   public void testSimple() {
     shouldNotThrow("test", "(one)");
   }