HBASE-22970 split parents show as overlaps in the HBCK Report

Check if overlap is split parent.

Cleaned up the HBCK Report page too with some notes that it is made of
two reports; have the two sections display the same.
This commit is contained in:
stack 2019-09-03 14:48:04 -07:00
parent a904c92316
commit e631798961
3 changed files with 33 additions and 17 deletions

View File

@ -799,11 +799,11 @@ public interface RegionInfo {
} }
int startKeyCompare = Bytes.compareTo(getStartKey(), other.getStartKey()); int startKeyCompare = Bytes.compareTo(getStartKey(), other.getStartKey());
if (startKeyCompare == 0) { if (startKeyCompare == 0) {
return true; return !this.isSplitParent();
} }
if (startKeyCompare < 0) { if (startKeyCompare < 0) {
if (isLast()) { if (isLast()) {
return true; return !this.isSplitParent();
} }
return Bytes.compareTo(getEndKey(), other.getStartKey()) > 0; return Bytes.compareTo(getEndKey(), other.getStartKey()) > 0;
} }

View File

@ -76,6 +76,11 @@
<jsp:include page="redirect.jsp" /> <jsp:include page="redirect.jsp" />
<% } else { %> <% } else { %>
<div class="row">
<div class="page-header">
<p><span>This page displays two reports. Only the report titles show if reports are empty.</span></p>
</div>
</div>
<div class="row"> <div class="row">
<div class="page-header"> <div class="page-header">
<h1>HBCK Chore Report</h1> <h1>HBCK Chore Report</h1>
@ -83,20 +88,20 @@
<% if (hbckChore.isDisabled()) { %> <% if (hbckChore.isDisabled()) { %>
<span>HBCK chore is currently disabled. Set hbase.master.hbck.chore.interval > 0 in the config & do a rolling-restart to enable it.</span> <span>HBCK chore is currently disabled. Set hbase.master.hbck.chore.interval > 0 in the config & do a rolling-restart to enable it.</span>
<% } else { %> <% } else { %>
<span>Checking started at <%= iso8601start %> and generated report at <%= iso8601end %>. Execute 'hbck_chore_run' in hbase shell to generate a new sub-report.</span> <span>Checking started at <%= iso8601start %> and generated report at <%= iso8601end %>. Execute <i>hbck_chore_run</i> in hbase shell to generate a new sub-report.</span>
<% } %> <% } %>
</p> </p>
</div> </div>
</div> </div>
<% if (inconsistentRegions != null && inconsistentRegions.size() > 0) { %>
<div class="row"> <div class="row">
<div class="page-header"> <div class="page-header">
<h2>Inconsistent Regions</h2> <h2>Inconsistent Regions</h2>
</div> </div>
</div> </div>
<% if (inconsistentRegions != null && inconsistentRegions.size() > 0) { %>
<p> <p>
<span> <span>
There are three cases: 1. Master thought this region opened, but no regionserver reported it (Fix: use assigns There are three cases: 1. Master thought this region opened, but no regionserver reported it (Fix: use assigns
@ -127,13 +132,13 @@
</table> </table>
<% } %> <% } %>
<% if (orphanRegionsOnRS != null && orphanRegionsOnRS.size() > 0) { %>
<div class="row"> <div class="row">
<div class="page-header"> <div class="page-header">
<h2>Orphan Regions on RegionServer</h2> <h2>Orphan Regions on RegionServer</h2>
</div> </div>
</div> </div>
<% if (orphanRegionsOnRS != null && orphanRegionsOnRS.size() > 0) { %>
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
<th>Region Encoded Name</th> <th>Region Encoded Name</th>
@ -150,13 +155,13 @@
</table> </table>
<% } %> <% } %>
<% if (orphanRegionsOnFS != null && orphanRegionsOnFS.size() > 0) { %>
<div class="row"> <div class="row">
<div class="page-header"> <div class="page-header">
<h2>Orphan Regions on FileSystem</h2> <h2>Orphan Regions on FileSystem</h2>
</div> </div>
</div> </div>
<% if (orphanRegionsOnFS != null && orphanRegionsOnFS.size() > 0) { %>
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
<th>Region Encoded Name</th> <th>Region Encoded Name</th>
@ -173,20 +178,24 @@
</table> </table>
<% } %> <% } %>
<div class="row inner_header"> <%
<div class="page-header">
<h1>CatalogJanitor <em>hbase:meta</em> Consistency Issues</h1>
</div>
</div>
<% if (report != null && !report.isEmpty()) {
zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(report.getCreateTime()),
ZoneId.systemDefault());
String iso8601reportTime = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()), zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),
ZoneId.systemDefault()); ZoneId.systemDefault());
String iso8601Now = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); String iso8601Now = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
String iso8601reportTime = "-1";
if (report != null) {
zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(report.getCreateTime()),
ZoneId.systemDefault());
iso8601reportTime = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
%> %>
<p>Report created: <%= iso8601reportTime %> (now=<%= iso8601Now %>). Run <i>catalogjanitor_run</i> in hbase shell to generate a new sub-report.</p> <div class="row inner_header">
<div class="page-header">
<h1>CatalogJanitor <em>hbase:meta</em> Consistency Issues</h1>
<p><span>Report created: <%= iso8601reportTime %> (now=<%= iso8601Now %>). Run <i>catalogjanitor_run</i> in hbase shell to generate a new sub-report.</span></p>
</div>
</div>
<% if (report != null && !report.isEmpty()) { %>
<% if (!report.getHoles().isEmpty()) { %> <% if (!report.getHoles().isEmpty()) { %>
<div class="row inner_header"> <div class="row inner_header">
<div class="page-header"> <div class="page-header">

View File

@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.RegionInfoBuilder; import org.apache.hadoop.hbase.client.RegionInfoBuilder;
import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.exceptions.DeserializationException;
import org.apache.hadoop.hbase.testclassification.RegionServerTests; import org.apache.hadoop.hbase.testclassification.RegionServerTests;
@ -124,6 +125,12 @@ public class TestHRegionInfo {
assertTrue(abri.isOverlap(adri)); assertTrue(abri.isOverlap(adri));
assertFalse(dri.isOverlap(ari)); assertFalse(dri.isOverlap(ari));
assertTrue(abri.isOverlap(adri)); assertTrue(abri.isOverlap(adri));
assertTrue(adri.isOverlap(abri));
// Check that splitParent is not reported as an overlap.
RegionInfo splitParent = RegionInfoBuilder.newBuilder(adri.getTable()).
setStartKey(adri.getStartKey()).setEndKey(adri.getEndKey()).setOffline(true).
setSplit(true).build();
assertFalse(splitParent.isOverlap(abri));
} }
@Test @Test