You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2012/12/27 22:06:06 UTC

svn commit: r1426328 - in /accumulo/trunk/core/src: main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java

Author: kturner
Date: Thu Dec 27 21:06:06 2012
New Revision: 1426328

URL: http://svn.apache.org/viewvc?rev=1426328&view=rev
Log:
ACCUMULO-360 made AccumuloFileOutputFormat reject bad visibilities 

Modified:
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java
    accumulo/trunk/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java?rev=1426328&r1=1426327&r2=1426328&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java Thu Dec 27 21:06:06 2012
@@ -17,6 +17,7 @@
 package org.apache.accumulo.core.client.mapreduce;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Map.Entry;
 
 import org.apache.accumulo.core.client.Instance;
@@ -24,11 +25,14 @@ import org.apache.accumulo.core.client.Z
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.ConfigurationCopy;
 import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.data.ArrayByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.file.FileOperations;
 import org.apache.accumulo.core.file.FileSKVWriter;
+import org.apache.accumulo.core.security.ColumnVisibility;
 import org.apache.accumulo.core.util.ArgumentChecker;
+import org.apache.commons.collections.map.LRUMap;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.mapreduce.Job;
@@ -160,6 +164,8 @@ public class AccumuloFileOutputFormat ex
     final String extension = acuConf.get(Property.TABLE_FILE_TYPE);
     final Path file = this.getDefaultWorkFile(context, "." + extension);
     
+    final LRUMap validVisibilities = new LRUMap(1000);
+
     return new RecordWriter<Key,Value>() {
       FileSKVWriter out = null;
       
@@ -171,6 +177,14 @@ public class AccumuloFileOutputFormat ex
       
       @Override
       public void write(Key key, Value value) throws IOException {
+        
+        Boolean wasChecked = (Boolean) validVisibilities.get(key.getColumnVisibilityData());
+        if (wasChecked == null) {
+          byte[] cv = key.getColumnVisibilityData().toArray();
+          new ColumnVisibility(cv);
+          validVisibilities.put(new ArrayByteSequence(Arrays.copyOf(cv, cv.length)), Boolean.TRUE);
+        }
+
         if (out == null) {
           out = FileOperations.getInstance().openWriter(file.toString(), file.getFileSystem(conf), conf, acuConf);
           out.startDefaultLocalityGroup();

Modified: accumulo/trunk/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java?rev=1426328&r1=1426327&r2=1426328&view=diff
==============================================================================
--- accumulo/trunk/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java (original)
+++ accumulo/trunk/core/src/test/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormatTest.java Thu Dec 27 21:06:06 2012
@@ -87,6 +87,23 @@ public class AccumuloFileOutputFormatTes
   }
   
   @Test
+  public void writeBadVisibility() throws IOException, InterruptedException {
+    AccumuloFileOutputFormat afof = new AccumuloFileOutputFormat();
+    RecordWriter<Key,Value> rw = afof.getRecordWriter(tac);
+    
+    Path file = afof.getDefaultWorkFile(tac, ".rf");
+
+    rw.write(new Key("r1", "cf1", "cq1", "A&B"), new Value("".getBytes()));
+    rw.write(new Key("r1", "cf1", "cq2", "A&B"), new Value("".getBytes()));
+    try {
+      rw.write(new Key("r1", "cf1", "cq2", "A&"), new Value("".getBytes()));
+      assertFalse(true);
+    } catch (Exception e) {}
+    
+    file.getFileSystem(tac.getConfiguration()).delete(file.getParent(), true);
+  }
+
+  @Test
   public void validateConfiguration() throws IOException, InterruptedException {
     
     int a = 7;