You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/04/23 22:48:13 UTC

svn commit: r1471135 - in /hbase/trunk: ./ hbase-client/src/main/java/org/apache/hadoop/hbase/ hbase-server/src/test/java/org/apache/hadoop/hbase/

Author: stack
Date: Tue Apr 23 20:48:12 2013
New Revision: 1471135

URL: http://svn.apache.org/r1471135
Log:
HBASE-7579 HTableDescriptor equals method fails if results are returned in a different order; REVERT AGAIN -- BROKE BUILD

Modified:
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java
    hbase/trunk/pom.xml

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java?rev=1471135&r1=1471134&r2=1471135&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java Tue Apr 23 20:48:12 2013
@@ -1125,10 +1125,12 @@ public class HColumnDescriptor implement
   public int compareTo(HColumnDescriptor o) {
     int result = Bytes.compareTo(this.name, o.getName());
     if (result == 0) {
-      // The maps interface should compare values, even if they're in different orders
-      if (!this.values.equals(o.values)) {
-        return 1;
-      }
+      // punt on comparison for ordering, just calculate difference
+      result = this.values.hashCode() - o.values.hashCode();
+      if (result < 0)
+        result = -1;
+      else if (result > 0)
+        result = 1;
     }
     if (result == 0) {
       result = this.configuration.hashCode() - o.configuration.hashCode();

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java?rev=1471135&r1=1471134&r2=1471135&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java Tue Apr 23 20:48:12 2013
@@ -225,7 +225,9 @@ public class HTableDescriptor implements
    * catalog tables, <code>.META.</code> and <code>-ROOT-</code>.
    */
   protected HTableDescriptor(final byte [] name, HColumnDescriptor[] families) {
-    setName(name);
+    this.name = name.clone();
+    this.nameAsString = Bytes.toString(this.name);
+    setMetaFlags(name);
     for(HColumnDescriptor descriptor : families) {
       this.families.put(descriptor.getName(), descriptor);
     }
@@ -237,7 +239,12 @@ public class HTableDescriptor implements
    */
   protected HTableDescriptor(final byte [] name, HColumnDescriptor[] families,
       Map<ImmutableBytesWritable,ImmutableBytesWritable> values) {
-    this(name.clone(), families);
+    this.name = name.clone();
+    this.nameAsString = Bytes.toString(this.name);
+    setMetaFlags(name);
+    for(HColumnDescriptor descriptor : families) {
+      this.families.put(descriptor.getName(), descriptor);
+    }
     for (Map.Entry<ImmutableBytesWritable, ImmutableBytesWritable> entry:
         values.entrySet()) {
       setValue(entry.getKey(), entry.getValue());
@@ -277,7 +284,9 @@ public class HTableDescriptor implements
    */
   public HTableDescriptor(final byte [] name) {
     super();
-    setName(name);
+    setMetaFlags(this.name);
+    this.name = this.isMetaRegion()? name: isLegalTableName(name);
+    this.nameAsString = Bytes.toString(this.name);
   }
 
   /**
@@ -289,7 +298,9 @@ public class HTableDescriptor implements
    */
   public HTableDescriptor(final HTableDescriptor desc) {
     super();
-    setName(desc.name.clone());
+    this.name = desc.name.clone();
+    this.nameAsString = Bytes.toString(this.name);
+    setMetaFlags(this.name);
     for (HColumnDescriptor c: desc.families.values()) {
       this.families.put(c.getName(), new HColumnDescriptor(c));
     }
@@ -639,13 +650,9 @@ public class HTableDescriptor implements
    * Set the name of the table.
    *
    * @param name name of table
-   * @throws IllegalArgumentException if passed a table name
-   * that is made of other than 'word' characters, underscore or period: i.e.
-   * <code>[a-zA-Z_0-9.].
-   * @see <a href="HADOOP-1581">HADOOP-1581 HBASE: Un-openable tablename bug</a>
    */
   public void setName(byte[] name) {
-    this.name = isMetaTable(name) ? name : isLegalTableName(name);
+    this.name = name;
     this.nameAsString = Bytes.toString(this.name);
     setMetaFlags(this.name);
   }
@@ -980,34 +987,39 @@ public class HTableDescriptor implements
    */
   @Override
   public int compareTo(final HTableDescriptor other) {
-    // Check name matches
     int result = Bytes.compareTo(this.name, other.name);
-    if (result != 0) return result;
-
-    // Check size matches
-    result = families.size() - other.families.size();
-    if (result != 0) return result;
-
-    // Compare that all column families
-    for (Iterator<HColumnDescriptor> it = families.values().iterator(),
-         it2 = other.families.values().iterator(); it.hasNext(); ) {
-      result = it.next().compareTo(it2.next());
-      if (result != 0) {
-        return result;
-      }
+    if (result == 0) {
+      result = families.size() - other.families.size();
     }
-
-    // Compare values
-    if (!values.equals(other.values)) {
-      return 1;
+    if (result == 0 && families.size() != other.families.size()) {
+      result = Integer.valueOf(families.size()).compareTo(
+          Integer.valueOf(other.families.size()));
+    }
+    if (result == 0) {
+      for (Iterator<HColumnDescriptor> it = families.values().iterator(),
+          it2 = other.families.values().iterator(); it.hasNext(); ) {
+        result = it.next().compareTo(it2.next());
+        if (result != 0) {
+          break;
+        }
+      }
     }
-
-    // Compare configuration
-    if (!configuration.equals(other.configuration)) {
-      return 1;
+    if (result == 0) {
+      // punt on comparison for ordering, just calculate difference
+      result = this.values.hashCode() - other.values.hashCode();
+      if (result < 0)
+        result = -1;
+      else if (result > 0)
+        result = 1;
+    }
+    if (result == 0) {
+      result = this.configuration.hashCode() - other.configuration.hashCode();
+      if (result < 0)
+        result = -1;
+      else if (result > 0)
+        result = 1;
     }
-
-    return 0;
+    return result;
   }
 
   /**

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java?rev=1471135&r1=1471134&r2=1471135&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java Tue Apr 23 20:48:12 2013
@@ -18,14 +18,12 @@
 package org.apache.hadoop.hbase;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.io.compress.Compression;
 import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
-import org.apache.hadoop.hbase.io.hfile.BlockType;
 import org.apache.hadoop.hbase.regionserver.BloomType;
 import org.junit.experimental.categories.Category;
 
@@ -96,71 +94,4 @@ public class TestHColumnDescriptor {
     desc.removeConfiguration(key);
     assertEquals(null, desc.getConfigurationValue(key));
   }
-
-  @Test
-  public void testEqualsWithFamilyName() {
-    final String name1 = "someFamilyName";
-    HColumnDescriptor hcd1 = new HColumnDescriptor(name1);
-    HColumnDescriptor hcd2 = new HColumnDescriptor("someOtherFamilyName");
-    HColumnDescriptor hcd3 = new HColumnDescriptor(name1);
-
-    assertFalse(hcd1.equals(hcd2));
-    assertFalse(hcd2.equals(hcd1));
-
-    assertTrue(hcd3.equals(hcd1));
-    assertTrue(hcd1.equals(hcd3));
-  }
-
-  @Test
-  public void testEqualsWithAdditionalProperties() {
-    final String name1 = "someFamilyName";
-    HColumnDescriptor hcd1 = new HColumnDescriptor(name1);
-    HColumnDescriptor hcd2 = new HColumnDescriptor(name1);
-    hcd2.setBlocksize(4);
-
-    assertFalse(hcd1.equals(hcd2));
-    assertFalse(hcd2.equals(hcd1));
-
-    hcd1.setBlocksize(4);
-
-    assertTrue(hcd2.equals(hcd1));
-    assertTrue(hcd1.equals(hcd2));
-  }
-
-  @Test
-  public void testEqualsWithDifferentNumberOfProperties() {
-    final String name1 = "someFamilyName";
-    HColumnDescriptor hcd1 = new HColumnDescriptor(name1);
-    HColumnDescriptor hcd2 = new HColumnDescriptor(name1);
-    hcd2.setBlocksize(4);
-    hcd1.setBlocksize(4);
-
-    assertTrue(hcd2.equals(hcd1));
-    assertTrue(hcd1.equals(hcd2));
-
-    hcd2.setBloomFilterType(BloomType.ROW);
-
-    assertFalse(hcd1.equals(hcd2));
-    assertFalse(hcd2.equals(hcd1));
-  }
-
-  @Test
-  public void testEqualsWithDifferentOrderingOfProperties() {
-    final String name1 = "someFamilyName";
-    HColumnDescriptor hcd1 = new HColumnDescriptor(name1);
-    HColumnDescriptor hcd2 = new HColumnDescriptor(name1);
-    hcd2.setBlocksize(4);
-    hcd2.setBloomFilterType(BloomType.ROW);
-    hcd1.setBloomFilterType(BloomType.ROW);
-    hcd1.setBlocksize(4);
-
-    assertTrue(hcd2.equals(hcd1));
-    assertTrue(hcd1.equals(hcd2));
-  }
-
-  @Test
-  public void testEqualityWithSameObject() {
-    HColumnDescriptor hcd1 = new HColumnDescriptor("someName");
-    assertTrue(hcd1.equals(hcd1));
-  }
 }

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java?rev=1471135&r1=1471134&r2=1471135&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHTableDescriptor.java Tue Apr 23 20:48:12 2013
@@ -198,173 +198,4 @@ public class TestHTableDescriptor {
     desc.removeConfiguration(key);
     assertEquals(null, desc.getConfigurationValue(key));
   }
-
-  @Test
-  public void testEqualsWithDifferentProperties() {
-    // Test basic property difference
-    HTableDescriptor h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    HTableDescriptor h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n2"));
-
-    assertFalse(h2.equals(h1));
-    assertFalse(h1.equals(h2));
-
-    h2.setName(Bytes.toBytes("n1"));
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testEqualsWithDifferentNumberOfItems() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    // Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someOtherName"));
-
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd1);
-    h1.addFamily(hcd2);
-
-    assertFalse(h2.equals(h1));
-    assertFalse(h1.equals(h2));
-
-    h2.addFamily(hcd2);
-
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testNotEqualsWithDifferentHCDs() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    // Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someOtherName"));
-
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd2);
-
-    assertFalse(h2.equals(h1));
-    assertFalse(h1.equals(h2));
-  }
-
-  @Test
-  public void testEqualsWithDifferentHCDObjects() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    // Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someName"));
-
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd2);
-
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testNotEqualsWithDifferentItems() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    // Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someOtherName"));
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd2);
-
-    assertFalse(h2.equals(h1));
-    assertFalse(h1.equals(h2));
-  }
-
-  @Test
-  public void testEqualsWithDifferentOrderingsOfItems() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    //Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someOtherName"));
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd2);
-    h1.addFamily(hcd2);
-    h2.addFamily(hcd1);
-
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testSingleItemEquals() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    //Test diff # of items
-    h1 = new HTableDescriptor();
-    h1.setName(Bytes.toBytes("n1"));
-
-    h2 = new HTableDescriptor();
-    h2.setName(Bytes.toBytes("n1"));
-
-    HColumnDescriptor hcd1 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    HColumnDescriptor hcd2 = new HColumnDescriptor(Bytes.toBytes("someName"));
-    h1.addFamily(hcd1);
-    h2.addFamily(hcd2);
-
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testEmptyEquals() {
-    HTableDescriptor h1 = new HTableDescriptor();
-    HTableDescriptor h2 = new HTableDescriptor();
-
-    assertTrue(h2.equals(h1));
-    assertTrue(h1.equals(h2));
-  }
-
-  @Test
-  public void testEqualityWithSameObject() {
-    HTableDescriptor htd = new HTableDescriptor("someName");
-    assertTrue(htd.equals(htd));
-  }
 }

Modified: hbase/trunk/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/pom.xml?rev=1471135&r1=1471134&r2=1471135&view=diff
==============================================================================
--- hbase/trunk/pom.xml (original)
+++ hbase/trunk/pom.xml Tue Apr 23 20:48:12 2013
@@ -668,7 +668,7 @@
               <exclude>docs/*</exclude>
               <!-- auto-gen docs -->
               <!--It don't like freebsd license-->
-              <exclude>**/src/site/resources/css/freebsd_docbook.css</exclude>
+              <exclude>**/src/main/site/resources/css/freebsd_docbook.css</exclude>
               <!--  exclude source control files -->
               <exclude>.git/**</exclude>
               <exclude>.svn/**</exclude>