HBASE-7928 Scanning .META. with startRow and/or stopRow is not giving proper results; REVERT. NEEDS SOME MORE WORK
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1453175 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
935e8d57d3
commit
d3b6e25aef
|
@ -529,30 +529,9 @@ public class HTable implements HTableInterface {
|
||||||
if (scan.getCaching() <= 0) {
|
if (scan.getCaching() <= 0) {
|
||||||
scan.setCaching(getScannerCaching());
|
scan.setCaching(getScannerCaching());
|
||||||
}
|
}
|
||||||
if (Bytes.equals(this.getTableName(), HConstants.META_TABLE_NAME)) {
|
|
||||||
changeStartAndStopRowIfMeta(scan);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ClientScanner(getConfiguration(), scan, getTableName(),
|
return new ClientScanner(getConfiguration(), scan, getTableName(),
|
||||||
this.connection);
|
this.connection);
|
||||||
}
|
}
|
||||||
private void changeStartAndStopRowIfMeta(final Scan scan) {
|
|
||||||
if (scan.getStartRow() != null && scan.getStartRow().length != 0
|
|
||||||
&& !isValidMetaTableRow(scan.getStartRow())) {
|
|
||||||
scan.setStartRow(Bytes.add(scan.getStartRow(), HConstants.META_ROW_DELIMITER_BYTES,
|
|
||||||
Bytes.toBytes(HConstants.ZEROES)));
|
|
||||||
}
|
|
||||||
if (scan.getStopRow() != null && scan.getStopRow().length != 0
|
|
||||||
&& !isValidMetaTableRow(scan.getStopRow())) {
|
|
||||||
scan.setStopRow(Bytes.add(scan.getStopRow(), HConstants.META_ROW_DELIMITER_BYTES,
|
|
||||||
Bytes.toBytes(HConstants.NINES)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isValidMetaTableRow(byte[] metaRow) {
|
|
||||||
return (com.google.common.primitives.Bytes
|
|
||||||
.indexOf(metaRow, HConstants.META_ROW_DELIMITER_BYTES) != -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
|
|
@ -358,8 +358,6 @@ public final class HConstants {
|
||||||
|
|
||||||
/** delimiter used between portions of a region name */
|
/** delimiter used between portions of a region name */
|
||||||
public static final int META_ROW_DELIMITER = ',';
|
public static final int META_ROW_DELIMITER = ',';
|
||||||
|
|
||||||
public static final byte[] META_ROW_DELIMITER_BYTES = Bytes.toBytes(",,");
|
|
||||||
|
|
||||||
/** The catalog family as a string*/
|
/** The catalog family as a string*/
|
||||||
public static final String CATALOG_FAMILY_STR = "info";
|
public static final String CATALOG_FAMILY_STR = "info";
|
||||||
|
|
|
@ -536,38 +536,6 @@ public class TestAdmin {
|
||||||
assertTrue(regionList.size() == min || regionList.size() == max);
|
assertTrue(regionList.size() == min || regionList.size() == max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testHBASE7928() throws Exception {
|
|
||||||
final byte[] tableName = Bytes.toBytes("a");
|
|
||||||
final byte[] tableName1 = Bytes.toBytes("b");
|
|
||||||
final byte[] tableName2 = Bytes.toBytes("c");
|
|
||||||
try {
|
|
||||||
|
|
||||||
TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY).close();
|
|
||||||
|
|
||||||
TEST_UTIL.createTable(tableName1, HConstants.CATALOG_FAMILY).close();
|
|
||||||
|
|
||||||
TEST_UTIL.createTable(tableName2, HConstants.CATALOG_FAMILY).close();
|
|
||||||
while (!admin.isTableAvailable(tableName2)) {
|
|
||||||
Thread.sleep(1);
|
|
||||||
}
|
|
||||||
Scan s = new Scan();
|
|
||||||
s.setStartRow(Bytes.toBytes("a1"));
|
|
||||||
s.setStopRow(Bytes.toBytes("b1"));
|
|
||||||
HTable table = new HTable(admin.getConfiguration(), HConstants.META_TABLE_NAME);
|
|
||||||
ResultScanner scanner = table.getScanner(s);
|
|
||||||
Result[] result = scanner.next(5);
|
|
||||||
assertEquals("Only one row should be selected", 1, result.length);
|
|
||||||
} finally {
|
|
||||||
admin.disableTable(tableName);
|
|
||||||
admin.deleteTable(tableName);
|
|
||||||
admin.disableTable(tableName1);
|
|
||||||
admin.deleteTable(tableName1);
|
|
||||||
admin.disableTable(tableName2);
|
|
||||||
admin.deleteTable(tableName2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateTableWithRegions() throws IOException, InterruptedException {
|
public void testCreateTableWithRegions() throws IOException, InterruptedException {
|
||||||
|
|
Loading…
Reference in New Issue