hbck源码系列(四)--表的完整性检查和修复(3)之Check
一,完整性检查
1检查表在HDFS的完整性
二.checkRegionChain方法
完整性检查,主要检查工作在checkRegionChain方法,该方法主要两个作用:
1.根据检查条件,检查异常
2.根据检查条件,修复异常
检查条件和异常都指什么?
2.1 异常
@O verride
公共无效handleRegionStartKeyNotEmpty(HbckInfo喜)抛出IOException异常的异常{
errors.reportError(ERROR_CODE。FIRST_REGION_STARTKEY_NOT_EMPTY,“
第一区域应具有空关键字开始,你需要”
在HDFS +“创建一个新的区域和regioninfo,以堵塞漏洞。“,
getTableInfo(),hi);
}
@覆盖
公共无效handleRegionEndKeyNotEmpty(字节[] curEndKey)抛出IOException异常的异常{
errors.reportError(ERROR_CODE。LAST_REGION_ENDKEY_NOT_EMPTY,“
最后的区域应该具有空关键字结束。你需要”
+“创建HDFS一个新的区域和regioninfo堵塞洞。”
}
@覆盖
公共无效handleDegenerateRegion(HbckInfo HI)抛出IOException异常的异常{
errors.reportError(ERROR_CODE。DEGENERATE_REGION,
“区域具有相同的开始和结束键。”,getTableInfo(),喜);
}
@覆盖
公共无效handleDuplicateStartKeys(HbckInfo R1,R2 HbckInfo)抛出IOException异常{
字节[]键= r1.getStartKey();
// DUP开始键
errors.reportError(ERROR_CODE DUPE_STARTKEYS,
“多个区域具有相同的startkey:”
。+字节toStringBinary(键),getTableInfo()中,R1);
errors.reportError(ERROR_CODE DUPE_STARTKEYS,
“多个区域具有相同的起始键:”
。+字节toStringBinary(键),getTableInfo()中,R 2);
}
@覆盖
公共无效handleSplit(HbckInfo R1,R2 HbckInfo)抛出IOException异常{
字节[]键= r1.getStartKey();
// DUP开始键
errors.reportError(ERROR_CODE DUPE_ENDKEYS,
“多个区域具有相同的regionID:”
。+字节toStringBinary(键),getTableInfo()中,R1);
errors.reportError(ERROR_CODE DUPE_ENDKEYS,
“多个区域具有相同的regionID:”
。+字节toStringBinary(键),getTableInfo()中,R 2);
}
@覆盖
公共无效handleOverlapInRegionChain(HbckInfo HI1,HI2 HbckInfo)抛出IOException异常的异常{
errors.reportError(ERROR_CODE。OVERLAP_IN_REGION_CHAIN,“
有在该区域连锁的重叠。”,
getTableInfo(),HI1,HI2);
}
@覆盖
公共无效handleHoleInRegionChain(字节[] holeStart,字节[] holeStop)抛出IOException异常的异常{
errors.reportError(
ERROR_CODE。HOLE_IN_REGION_CHAIN,“
有在之间的区域中链上具有空穴”
+字节。toStringBinary( holeStart)+“和”
+字节toStringBinary(holeStop)
+“你需要。
在HDFS中创建一个新的.regioninfo和区域”+“DIR来插入漏洞。”);
}
};
2.2检查条件
之前说过表的完整性检查主要是检查表的hole、overlap和orphan等情况,检查条件是判断上述异常的依据,在源码中的判断依据是什么,这里根据不同的情况,描述不同的检查条件,详见各个章节。
- hole
- orphan
- overlap
- others