HBASE-12156 TableName cache doesn't used for once of valueOf methods (Andrey Stepachev)
This commit is contained in:
parent
5aea36d4d4
commit
0dfe556f31
|
@ -446,7 +446,7 @@ public final class TableName implements Comparable<TableName> {
|
|||
}
|
||||
|
||||
for (TableName tn : tableCache) {
|
||||
if (Arrays.equals(tn.getQualifier(), namespace) &&
|
||||
if (Arrays.equals(tn.getQualifier(), qualifier) &&
|
||||
Arrays.equals(tn.getNamespace(), namespace)) {
|
||||
return tn;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,14 @@
|
|||
*/
|
||||
package org.apache.hadoop.hbase.util;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import org.apache.hadoop.hbase.SmallTests;
|
||||
|
@ -92,4 +100,84 @@ public class TestTableName extends TestWatcher {
|
|||
}
|
||||
}
|
||||
|
||||
class Names {
|
||||
String ns;
|
||||
byte[] nsb;
|
||||
String tn;
|
||||
byte[] tnb;
|
||||
String nn;
|
||||
byte[] nnb;
|
||||
|
||||
Names(String ns, String tn) {
|
||||
this.ns = ns;
|
||||
nsb = ns.getBytes();
|
||||
this.tn = tn;
|
||||
tnb = tn.getBytes();
|
||||
nn = this.ns + ":" + this.tn;
|
||||
nnb = nn.getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Names names = (Names) o;
|
||||
|
||||
if (!ns.equals(names.ns)) return false;
|
||||
if (!tn.equals(names.tn)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = ns.hashCode();
|
||||
result = 31 * result + tn.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Names[] names = new Names[] {
|
||||
new Names("n1", "n1"),
|
||||
new Names("n2", "n2"),
|
||||
new Names("table1", "table1"),
|
||||
new Names("table2", "table2"),
|
||||
new Names("table2", "table1"),
|
||||
new Names("table1", "table2"),
|
||||
new Names("n1", "table1"),
|
||||
new Names("n1", "table1"),
|
||||
new Names("n2", "table2"),
|
||||
new Names("n2", "table2")
|
||||
};
|
||||
|
||||
@Test
|
||||
public void testValueOf() {
|
||||
|
||||
Map<String, TableName> inCache = new HashMap<>();
|
||||
// fill cache
|
||||
for (Names name : names) {
|
||||
inCache.put(name.nn, TableName.valueOf(name.ns, name.tn));
|
||||
}
|
||||
for (Names name : names) {
|
||||
assertSame(inCache.get(name.nn), validateNames(TableName.valueOf(name.ns, name.tn), name));
|
||||
assertSame(inCache.get(name.nn), validateNames(TableName.valueOf(name.nsb, name.tnb), name));
|
||||
assertSame(inCache.get(name.nn), validateNames(TableName.valueOf(name.nn), name));
|
||||
assertSame(inCache.get(name.nn), validateNames(TableName.valueOf(name.nnb), name));
|
||||
assertSame(inCache.get(name.nn), validateNames(TableName.valueOf(
|
||||
ByteBuffer.wrap(name.nsb), ByteBuffer.wrap(name.tnb)), name));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private TableName validateNames(TableName expected, Names names) {
|
||||
assertEquals(expected.getNameAsString(), names.nn);
|
||||
assertArrayEquals(expected.getName(), names.nnb);
|
||||
assertEquals(expected.getQualifierAsString(), names.tn);
|
||||
assertArrayEquals(expected.getQualifier(), names.tnb);
|
||||
assertEquals(expected.getNamespaceAsString(), names.ns);
|
||||
assertArrayEquals(expected.getNamespace(), names.nsb);
|
||||
return expected;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue