You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Huaxiang Sun (Jira)" <ji...@apache.org> on 2020/07/15 00:57:00 UTC

[jira] [Commented] (HBASE-24734) Wrong comparator opening Region when 'split-to-WAL' enabled.

    [ https://issues.apache.org/jira/browse/HBASE-24734?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17157785#comment-17157785 ] 

Huaxiang Sun commented on HBASE-24734:
--------------------------------------

Yeah, it seems that it does not user meta comparator for meta hfile, containsRange() does not consider the meta case.

> Wrong comparator opening Region when 'split-to-WAL' enabled.
> ------------------------------------------------------------
>
>                 Key: HBASE-24734
>                 URL: https://issues.apache.org/jira/browse/HBASE-24734
>             Project: HBase
>          Issue Type: Sub-task
>          Components: HFile, MTTR
>            Reporter: Michael Stack
>            Priority: Major
>
> Came across this when we were testing the 'split-to-hfile' feature running ITBLL:
>  
> {code:java}
> 2020-07-10 10:16:49,983 INFO org.apache.hadoop.hbase.regionserver.HRegion: Closing region hbase:meta,,1.15882307402020-07-10 10:16:49,997 INFO org.apache.hadoop.hbase.regionserver.HRegion: Closed hbase:meta,,1.15882307402020-07-10 10:16:49,998 WARN org.apache.hadoop.hbase.regionserver.handler.AssignRegionHandler: Fatal error occurred while opening region hbase:meta,,1.1588230740, aborting...java.lang.IllegalArgumentException: Invalid range: IntegrationTestBigLinkedList,,1594350463222.8f89e01a5245e79946e22d8a8ab4698b. > IntegrationTestBigLinkedList,\x10\x02J\xA1,1594349535271.be24dc276f686e6dcc7fb9d3f91c8387.        at org.apache.hadoop.hbase.client.RegionInfoBuilder$MutableRegionInfo.containsRange(RegionInfoBuilder.java:300)        at org.apache.hadoop.hbase.regionserver.HStore.tryCommitRecoveredHFile(HStore.java:1111)        at org.apache.hadoop.hbase.regionserver.HRegion.loadRecoveredHFilesIfAny(HRegion.java:5442)        at org.apache.hadoop.hbase.regionserver.HRegion.initializeRegionInternals(HRegion.java:1010)        at org.apache.hadoop.hbase.regionserver.HRegion.initialize(HRegion.java:950)        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:7490)        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegionFromTableDir(HRegion.java:7448)        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:7424)        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:7382)        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:7333)        at org.apache.hadoop.hbase.regionserver.handler.AssignRegionHandler.process(AssignRegionHandler.java:135)        at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:104)        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)        at java.base/java.lang.Thread.run(Thread.java:834)2020-07-10 10:16:50,005 ERROR org.apache.hadoop.hbase.regionserver.HRegionServer: ***** ABORTING region server hbasedn149.example.org,16020,1594375563853: Failed to open region hbase:meta,,1.1588230740 and can not recover *****java.lang.IllegalArgumentException: Invalid range: IntegrationTestBigLinkedList,,1594350463222.8f89e01a5245e79946e22d8a8ab4698b. > IntegrationTestBigLinkedList,\x10\x02J\xA1,1594349535271.be24dc276f686e6dcc7fb9d3f91c8387.
>  {code}
> Seems basic case of wrong comparator. Below passes if I use the meta comparator
> {code:java}
>  @Test
> public void testBinaryKeys() throws Exception {
>   Set<Cell> set = new TreeSet<>(CellComparatorImpl.COMPARATOR);
>   final byte [] fam = Bytes.toBytes("col");
>   final byte [] qf = Bytes.toBytes("umn");
>   final byte [] nb = new byte[0];
>   Cell [] keys = {
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("aaaaa,\u0000\u0000,2"), fam, qf, 2, nb)),
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("aaaaa,\u0001,3"), fam, qf, 3, nb)),
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("aaaaa,,1"), fam, qf, 1, nb)),
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("aaaaa,\u1000,5"), fam, qf, 5, nb)),
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("aaaaa,a,4"), fam, qf, 4, nb)),
>       createByteBufferKeyValueFromKeyValue(
>           new KeyValue(Bytes.toBytes("a,a,0"), fam, qf, 0, nb)),
>   };
>   // Add to set with bad comparator
>   Collections.addAll(set, keys);
>   // This will output the keys incorrectly.
>   boolean assertion = false;
>   int count = 0;
>   try {
>     for (Cell k: set) {
>       assertTrue("count=" + count + ", " + k.toString(), count++ == k.getTimestamp());
>     }
>   } catch (AssertionError e) {
>     // Expected
>     assertion = true;
>   }
>   assertTrue(assertion);
>   // Make set with good comparator
>   set = new TreeSet<>(CellComparatorImpl.META_COMPARATOR);
>   Collections.addAll(set, keys);
>   count = 0;
>   for (Cell k: set) {
>     assertTrue("count=" + count + ", " + k.toString(), count++ == k.getTimestamp());
>   }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)