Author: kturner
Date: Wed Apr 10 19:06:07 2013
New Revision: 1466627

URL: http://svn.apache.org/r1466627
Log:
ACCUMULO-1044 added unit test for metdata bulk load filter

Added:
    
accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/
    
accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilterTest.java
Modified:
    
accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilter.java

Modified: 
accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilter.java
URL: 
http://svn.apache.org/viewvc/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilter.java?rev=1466627&r1=1466626&r2=1466627&view=diff
==============================================================================
--- 
accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilter.java
 (original)
+++ 
accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilter.java
 Wed Apr 10 19:06:07 2013
@@ -27,6 +27,7 @@ import org.apache.accumulo.core.iterator
 import org.apache.accumulo.core.iterators.IteratorEnvironment;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
 import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
+import org.apache.accumulo.server.zookeeper.TransactionWatcher.Arbitrator;
 import org.apache.accumulo.server.zookeeper.TransactionWatcher.ZooArbitrator;
 
 /**
@@ -40,7 +41,7 @@ public class MetadataBulkLoadFilter exte
   }
   
   Map<Long,Status> bulkTxStatusCache;
-  ZooArbitrator arbitrator;
+  Arbitrator arbitrator;
   
   @Override
   public boolean accept(Key k, Value v) {
@@ -78,6 +79,10 @@ public class MetadataBulkLoadFilter exte
     }
 
     bulkTxStatusCache = new HashMap<Long,MetadataBulkLoadFilter.Status>();
-    arbitrator = new ZooArbitrator();
+    arbitrator = getArbitrator();
+  }
+  
+  protected Arbitrator getArbitrator() {
+    return new ZooArbitrator();
   }
 }

Added: 
accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilterTest.java
URL: 
http://svn.apache.org/viewvc/accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilterTest.java?rev=1466627&view=auto
==============================================================================
--- 
accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilterTest.java
 (added)
+++ 
accumulo/branches/1.4/src/server/src/test/java/org/apache/accumulo/server/iterators/MetadataBulkLoadFilterTest.java
 Wed Apr 10 19:06:07 2013
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.server.iterators;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.TreeMap;
+
+import junit.framework.Assert;
+
+import org.apache.accumulo.core.Constants;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
+import org.apache.accumulo.core.data.ByteSequence;
+import org.apache.accumulo.core.data.Key;
+import org.apache.accumulo.core.data.Range;
+import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.iterators.IteratorEnvironment;
+import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
+import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
+import org.apache.accumulo.core.iterators.SortedMapIterator;
+import org.apache.accumulo.core.util.ColumnFQ;
+import org.apache.accumulo.server.zookeeper.TransactionWatcher.Arbitrator;
+import org.apache.hadoop.io.Text;
+import org.junit.Test;
+
+/**
+ * 
+ */
+public class MetadataBulkLoadFilterTest {
+  static class TestArbitrator implements Arbitrator {
+    @Override
+    public boolean transactionAlive(String type, long tid) throws Exception {
+      return tid == 5;
+    }
+    
+    @Override
+    public boolean transactionComplete(String type, long tid) throws Exception 
{
+      if (tid == 9)
+        throw new RuntimeException();
+      return tid != 5 && tid != 7;
+    }
+  }
+  
+  static class TestMetadataBulkLoadFilter extends MetadataBulkLoadFilter {
+    @Override
+    protected Arbitrator getArbitrator() {
+      return new TestArbitrator();
+    }
+  }
+  
+  private static void put(TreeMap<Key,Value> tm, String row, ColumnFQ cfq, 
String val) {
+    Key k = new Key(new Text(row), cfq.getColumnFamily(), 
cfq.getColumnQualifier());
+    tm.put(k, new Value(val.getBytes()));
+  }
+  
+  private static void put(TreeMap<Key,Value> tm, String row, Text cf, String 
cq, String val) {
+    Key k = new Key(new Text(row), cf, new Text(cq));
+    if (val == null) {
+      k.setDeleted(true);
+      tm.put(k, new Value("".getBytes()));
+    } else
+      tm.put(k, new Value(val.getBytes()));
+  }
+  
+  @Test
+  public void testBasic() throws IOException {
+    TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>();
+    TreeMap<Key,Value> expected = new TreeMap<Key,Value>();
+    
+    // following should not be deleted by filter
+    put(tm1, "2;m", Constants.METADATA_DIRECTORY_COLUMN, "/t1");
+    put(tm1, "2;m", Constants.METADATA_DATAFILE_COLUMN_FAMILY, "/t1/file1", 
"1,1");
+    put(tm1, "2;m", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t1/file1", 
"5");
+    put(tm1, "2;m", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t1/file3", 
"7");
+    put(tm1, "2;m", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t1/file4", 
"9");
+    put(tm1, "2<", Constants.METADATA_DIRECTORY_COLUMN, "/t2");
+    put(tm1, "2<", Constants.METADATA_DATAFILE_COLUMN_FAMILY, "/t2/file2", 
"1,1");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/file6", 
"5");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/file7", 
"7");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/file8", 
"9");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/fileC", 
null);
+    
+    expected.putAll(tm1);
+
+    // the following should be deleted by filter
+    put(tm1, "2;m", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t1/file5", 
"8");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/file9", 
"8");
+    put(tm1, "2<", Constants.METADATA_BULKFILE_COLUMN_FAMILY, "/t2/fileA", 
"2");
+    
+    TestMetadataBulkLoadFilter iter = new TestMetadataBulkLoadFilter();
+    iter.init(new SortedMapIterator(tm1), new HashMap<String,String>(), new 
IteratorEnvironment() {
+      
+      @Override
+      public SortedKeyValueIterator<Key,Value> reserveMapFileReader(String 
mapFileName) throws IOException {
+        // TODO Auto-generated method stub
+        return null;
+      }
+      
+      @Override
+      public void registerSideChannel(SortedKeyValueIterator<Key,Value> iter) {
+        // TODO Auto-generated method stub
+        
+      }
+      
+      @Override
+      public boolean isFullMajorCompaction() {
+        // TODO Auto-generated method stub
+        return false;
+      }
+      
+      @Override
+      public IteratorScope getIteratorScope() {
+        return IteratorScope.majc;
+      }
+      
+      @Override
+      public AccumuloConfiguration getConfig() {
+        return null;
+      }
+    });
+
+    iter.seek(new Range(), new ArrayList<ByteSequence>(), false);
+    
+    TreeMap<Key,Value> actual = new TreeMap<Key,Value>();
+    
+    while (iter.hasTop()) {
+      actual.put(iter.getTopKey(), iter.getTopValue());
+      iter.next();
+    }
+    
+    Assert.assertEquals(expected, actual);
+  }
+}


Reply via email to