[
https://issues.apache.org/jira/browse/HBASE-4377?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13139121#comment-13139121
]
stack commented on HBASE-4377:
------------------------------
We want this?
{code}
+ } catch (Exception e) {
+ // Do nothing.
+ }
{code}
Why not let the test fail if we can't delete the table?
I see we do this deleteTable in a few places w/ above ignore of IOE (the
deleteTable method is same in two places)
Nit: Belwo is a little wonky. No biggie.
{code}
+ HTableDescriptor[] htbls = // new HBaseAdmin(conf).listTables();
+ TEST_UTIL.getHBaseAdmin().listTables();
{code}
Nit: No biggie. Rewrite below if new patch made:
{code}
+ * This testing base class provides create a minicluster and testing table
table
+ * and shutsdown the cluster afterwards. It provides methods to wipes out meta,
+ * inject errors into meta and the file system.
{code}
This define is repeated:
{code}+ protected final static byte[][] splits = new byte[][] {
Bytes.toBytes("A"),
+ Bytes.toBytes("B"), Bytes.toBytes("C") };
{code}
Then there is : + byte[] splits = { 'A', 'B', 'C', 'D' };
Should we be looking for the missing region in the filesystem if we find a hole
in meta before we go ahead and create a region to plug the hole? Do we do that?
FYI, for future, I think there is utility in HRegion to do the below (with
defines for .regioninfo) and for writing it (Maybe there is a reason you did
the below manually?):
{code}
+ Path p = new Path(rootDir + "/" + htd.getNameAsString(),
+ hri.getEncodedName());
+ fs.mkdirs(p);
+ Path riPath = new Path(p, ".regioninfo");
{code}
FYI, there is utility in MetaReader to do this;
{code}
+ protected int scanMeta() throws IOException {
+ int count = 0;
+ HTable meta = new HTable(conf, HTableDescriptor.META_TABLEDESC.getName());
+ ResultScanner scanner = meta.getScanner(new Scan());
+ LOG.info("Table: " + Bytes.toString(meta.getTableName()));
+ for (Result res : scanner) {
+ LOG.info(Bytes.toString(res.getRow()));
+ count++;
+ }
+ return count;
+ }
{code}
Do we need setTableName? Should below be moved into HRI?
{code}
+ if (getTableName() == null || getTableName().length == 0) {
+ byte [] newTableName = HRegionInfo.getTableName(this.getRegionName());
+ LOG.debug(Bytes.toString(newTableName)+": .regioninfo doesn't have
tableName value, but we are getting it from regionName :)");
+ this.setTableName(newTableName);
+ }
{code}
This will be ok? We'll have perms to go here? If we don't we will just fail
which should be fine.
{code}
+ Path backupDir = new Path(rootDir.getParent(), rootDir.getName() + "-"
+ + now);
{code}
Next time, you could have made a method out of this and used it for meta and
root passing in 'root' or 'meta' and backupRoot -- its repeated code:
{code}
+ if (fs.exists(root)) {
+ fs.rename(root, backupRoot);
+ } else {
+ LOG.info("No previous -ROOT- exists. Continuing.");
+ }
{code}
Should you test the result of fs.rename? It returns a boolean true if it
succeeds and false if not?
Thats enough for now.
> [hbck] Offline rebuild .META. from fs data only.
> ------------------------------------------------
>
> Key: HBASE-4377
> URL: https://issues.apache.org/jira/browse/HBASE-4377
> Project: HBase
> Issue Type: New Feature
> Affects Versions: 0.92.0
> Reporter: Jonathan Hsieh
> Assignee: Jonathan Hsieh
> Attachments:
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data-.0.90-v4.patch,
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data-.0.90.v3.patch,
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data-.patch,
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data-.trunk.v3.patch,
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data.0.92.v1.patch,
> 0001-HBASE-4377-hbck-Offline-rebuild-.META.-from-fs-data.0.92.v2.patch,
> EXT_AC.regioninfo, EXT_ATU_05f84d32cbc0bdabf00e00bc2f3570f0.regioninfo,
> hbase-4377-trunk.v2.patch, hbase-4377.trunk.v3.txt, hbase-4377.trunk.v4.txt,
> hbase-4377.trunk.v5.txt
>
>
> In a worst case situation, it may be helpful to have an offline .META.
> rebuilder that just looks at the file system's .regioninfos and rebuilds meta
> from scratch. Users could move bad regions out until there is a clean
> rebuild.
> It would likely fill in region split holes. Follow on work could given
> options to merge or select regions that overlap, or do online rebuilds.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira