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>