You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ji...@apache.org on 2007/06/03 10:52:06 UTC

svn commit: r543862 - in /lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase: AbstractMergeTestBase.java TestMerge.java TestMergeMeta.java TestMergeTable.java

Author: jimk
Date: Sun Jun  3 01:52:06 2007
New Revision: 543862

URL: http://svn.apache.org/viewvc?view=rev&rev=543862
Log:
HADOOP-1391. Split test case for merge into two so it does not time out in Hudson

Added:
    lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java
    lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeMeta.java
    lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeTable.java
Removed:
    lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMerge.java

Added: lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java?view=auto&rev=543862
==============================================================================
--- lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java (added)
+++ lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java Sun Jun  3 01:52:06 2007
@@ -0,0 +1,146 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed 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.hadoop.hbase;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Random;
+
+import org.apache.hadoop.dfs.MiniDFSCluster;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.BytesWritable;
+import org.apache.hadoop.io.Text;
+
+/** Abstract base class for merge tests */
+public abstract class AbstractMergeTestBase extends HBaseTestCase {
+  protected static final Text COLUMN_NAME = new Text("contents:");
+  protected Random rand;
+  protected HTableDescriptor desc;
+  protected BytesWritable value;
+
+  protected MiniDFSCluster dfsCluster;
+  protected FileSystem fs;
+  protected Path dir;
+
+  public void setUp() throws Exception {
+    super.setUp();
+    rand = new Random();
+    desc = new HTableDescriptor("test");
+    desc.addFamily(new HColumnDescriptor(COLUMN_NAME.toString()));
+    
+    // We will use the same value for the rows as that is not really important here
+    
+    String partialValue = String.valueOf(System.currentTimeMillis());
+    StringBuilder val = new StringBuilder();
+    while(val.length() < 1024) {
+      val.append(partialValue);
+    }
+    try {
+      value = new BytesWritable(val.toString().getBytes(HConstants.UTF8_ENCODING));
+      
+    } catch(UnsupportedEncodingException e) {
+      fail();
+    }
+
+    try {
+      dfsCluster = new MiniDFSCluster(conf, 2, true, (String[])null);
+      fs = dfsCluster.getFileSystem();
+      dir = new Path("/hbase");
+      fs.mkdirs(dir);
+      
+    } catch(Throwable t) {
+      t.printStackTrace();
+      fail();
+    }
+
+    // We create three data regions: The first is too large to merge since it 
+    // will be > 64 MB in size. The second two will be smaller and will be 
+    // selected for merging.
+    
+    // To ensure that the first region is larger than 64MB we need to write at
+    // least 65536 rows. We will make certain by writing 70000
+
+    try {
+      Text row_70001 = new Text("row_70001");
+      Text row_80001 = new Text("row_80001");
+      
+      HRegion[] regions = {
+        createAregion(null, row_70001, 1, 70000),
+        createAregion(row_70001, row_80001, 70001, 10000),
+        createAregion(row_80001, null, 80001, 10000)
+      };
+      
+      // Now create the root and meta regions and insert the data regions
+      // created above into the meta
+      
+      HRegion root = HRegion.createNewHRegion(fs, dir, conf, 
+          HGlobals.rootTableDesc, 0L, null, null);
+      HRegion meta = HRegion.createNewHRegion(fs, dir, conf,
+          HGlobals.metaTableDesc, 1L, null, null);
+    
+      HRegion.addRegionToMeta(root, meta);
+      
+      for(int i = 0; i < regions.length; i++) {
+        HRegion.addRegionToMeta(meta, regions[i]);
+      }
+      
+      root.close();
+      root.getLog().close();
+      fs.delete(new Path(root.getRegionDir(), HConstants.HREGION_LOGDIR_NAME));
+      meta.close();
+      meta.getLog().close();
+      fs.delete(new Path(meta.getRegionDir(), HConstants.HREGION_LOGDIR_NAME));
+      
+    } catch(Throwable t) {
+      t.printStackTrace();
+      fail();
+    }
+  }
+
+  public void tearDown() throws Exception {
+    super.tearDown();
+    dfsCluster.shutdown();
+  }
+
+  private HRegion createAregion(Text startKey, Text endKey, int firstRow, int nrows)
+      throws IOException {
+    HRegion region = HRegion.createNewHRegion(fs, dir, conf, desc,
+        rand.nextLong(), startKey, endKey);
+    
+    System.out.println("created region " + region.getRegionName());
+
+    for(int i = firstRow; i < firstRow + nrows; i++) {
+      long lockid = region.startUpdate(new Text("row_"
+          + String.format("%1$05d", i)));
+
+      region.put(lockid, COLUMN_NAME, value);
+      region.commit(lockid);
+      if(i % 10000 == 0) {
+        System.out.println("Flushing write #" + i);
+        region.flushcache(false);
+      }
+    }
+    System.out.println("Rolling log...");
+    region.log.rollWriter();
+    region.compactStores();
+    region.close();
+    region.getLog().close();
+    fs.delete(new Path(region.getRegionDir(), HConstants.HREGION_LOGDIR_NAME));
+    region.getRegionInfo().offLine = true;
+    return region;
+  }
+}

Added: lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeMeta.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeMeta.java?view=auto&rev=543862
==============================================================================
--- lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeMeta.java (added)
+++ lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeMeta.java Sun Jun  3 01:52:06 2007
@@ -0,0 +1,30 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed 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.hadoop.hbase;
+
+/** Tests region merging */
+public class TestMergeMeta extends AbstractMergeTestBase {
+  
+  public void testMergeMeta() {
+    try {
+      HMerge.merge(conf, fs, HConstants.META_TABLE_NAME);
+      
+    } catch(Throwable t) {
+      t.printStackTrace();
+      fail();
+    }
+  }
+}  

Added: lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeTable.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeTable.java?view=auto&rev=543862
==============================================================================
--- lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeTable.java (added)
+++ lucene/hadoop/trunk/src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestMergeTable.java Sun Jun  3 01:52:06 2007
@@ -0,0 +1,35 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed 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.hadoop.hbase;
+
+public class TestMergeTable extends AbstractMergeTestBase {
+
+  public void testMergeTable() {
+    try {
+      MiniHBaseCluster hCluster = new MiniHBaseCluster(conf, 1, dfsCluster);
+      try {
+        HMerge.merge(conf, fs, desc.getName());
+      
+      } finally {
+        hCluster.shutdown();
+      }
+      
+    } catch(Throwable t) {
+      t.printStackTrace();
+      fail();
+    }
+  }
+}