[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13620021#comment-13620021 ] Chenghao Jiang commented on HBASE-8192: --- [~jmhsieh]: Hi. I just don't know what to do next and need some help. Thanks. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Assignee: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt, 8192-v7-with-a-test-case.txt, 8192-v8-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13620058#comment-13620058 ] Chenghao Jiang commented on HBASE-8192: --- [~ndimiduk]That test error is tracked in [https://issues.apache.org/jira/browse/HBASE-8164]. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Assignee: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt, 8192-v7-with-a-test-case.txt, 8192-v8-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13620060#comment-13620060 ] Chenghao Jiang commented on HBASE-8192: --- [~jmhsieh] I got it. Thanks! wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Assignee: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt, 8192-v7-with-a-test-case.txt, 8192-v8-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13618987#comment-13618987 ] Chenghao Jiang commented on HBASE-8192: --- So what should I do next? wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Assignee: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt, 8192-v7-with-a-test-case.txt, 8192-v8-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v8-with-a-test-case.txt Do testNonexistentColumnFamilyLoad with useSecure=false, since doSecureBulkLoad won't stop retry when bulkloading nonexistent family fails (it catchs the exception) wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Assignee: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt, 8192-v7-with-a-test-case.txt, 8192-v8-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v2-with-a-test-case.txt There are some problems while running test TestLoadIncrementalHFiles in my environment. Just have a try with a new patch that has one more test. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v3-with-a-test-case.txt wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13618139#comment-13618139 ] Chenghao Jiang commented on HBASE-8192: --- problem fixed. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v4-with-a-test-case.txt v3 upload a wrong file. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v5-with-a-test-case.txt wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13618171#comment-13618171 ] Chenghao Jiang commented on HBASE-8192: --- There are still problems with v5. Finally I can run test in my environment now. I'll do the test on my machine and then give a new test code. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13618181#comment-13618181 ] Chenghao Jiang commented on HBASE-8192: --- It seems that there is another problem in LoadIncrementalHFiles.java In LoadIncrementalHFiles.doBulkLoad(Path hfofDir, final HTable table), it discoverLoadQueue(queue, hfofDir) to get a queue containing all the HFiles. Then we can check if all the families in the queue exist in the HTable. If not, exception should be thrown since this bulkLoad will never succeed, just like throwing TableNotFoundException when table does not exist. If we don't check this, split the hfile whose data belongs to a nonexistent family will fail since information about the family will be used when copyHFileHalf(). wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192-v6-with-a-test-case.txt In v6, hfileRanges has been set that there is no split. Problem when it needs split has been described above. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt, 8192-v2-with-a-test-case.txt, 8192-v3-with-a-test-case.txt, 8192-v4-with-a-test-case.txt, 8192-v5-with-a-test-case.txt, 8192-v6-with-a-test-case.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13616001#comment-13616001 ] Chenghao Jiang commented on HBASE-8192: --- I'm trying to setting up the development environment, there's still some problems whem compiling. I'm reading some test code to study the way of testing. Since I still don't know enough about hbase code, it'll take a little bit more time to do the test. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
Chenghao Jiang created HBASE-8192: - Summary: wrong logic in HRegion.bulkLoadHFiles(List) Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.5, 0.94.4, 0.94.3, 0.94.2, 0.94.1 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Description: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed from there and deal with the situation below if (ioes.size()!=0) {}. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} was: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p)
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Description: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed from there and deal with the situation after if (ioes.size()!=0) {}. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} was: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed from there and deal with the situation below if (ioes.size()!=0) {}. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Description: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} was: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think the sentence return false should be removed from there and deal with the situation after if (ioes.size()!=0) {}. {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Description: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} was: the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keeping retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p)
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13613408#comment-13613408 ] Chenghao Jiang commented on HBASE-8192: --- When store == null, it's not necessary to add it to failures, since No such column family is not recoverable. On the other hand, if there is an IOException in ioes, it should be dealt with first (before dealing with failures), since any IOException in ioes means unrecoverable. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: HRegion.java wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: HRegion.java the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: (was: HRegion.java) wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13613433#comment-13613433 ] Chenghao Jiang commented on HBASE-8192: --- Thanks. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192.txt wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: (was: 8192.txt) wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Attachment: 8192.txt wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13613439#comment-13613439 ] Chenghao Jiang commented on HBASE-8192: --- You're so nice:) Thanks again. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Fix Version/s: 0.94.1 0.94.2 0.94.3 0.94.4 0.94.5 Labels: patch (was: ) Release Note: correct the logic in HRegion.bulkLoadHFiles(), throw IOException correctly when unrecoverable. Status: Patch Available (was: Open) wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.5, 0.94.4, 0.94.3, 0.94.2, 0.94.1 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.5, 0.94.4, 0.94.3, 0.94.2, 0.94.1 Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Chenghao Jiang updated HBASE-8192: -- Fix Version/s: (was: 0.94.5) (was: 0.94.4) (was: 0.94.3) (was: 0.94.2) (was: 0.94.1) 0.94.7 wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)
[ https://issues.apache.org/jira/browse/HBASE-8192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13613456#comment-13613456 ] Chenghao Jiang commented on HBASE-8192: --- OK. wrong logic in HRegion.bulkLoadHFiles(List) --- Key: HBASE-8192 URL: https://issues.apache.org/jira/browse/HBASE-8192 Project: HBase Issue Type: Bug Components: regionserver Affects Versions: 0.94.1, 0.94.2, 0.94.3, 0.94.4, 0.94.5 Reporter: Chenghao Jiang Labels: patch Fix For: 0.94.7 Attachments: 8192.txt the wrong logic is here: when a ColumnFamily does not exist, it gets a null store object, then ioes.add(ioe); failures.add(p) but the code below, if (failures.size() != 0), it prints a warn log and return false, so it will never go into the code if (ioes.size() != 0) below, and IOException will not be thrown, then the client will keep retry forever. there is the same situation when doing store.assertBulkLoadHFileOk, if any WrongRegionException is caught and failures.add(p), then all the other IOException thrown by assertBulkLoadHFileOk will be ignored. so i think if (failures.size() != 0) {} should be dealt with after if (ioes.size() !=0) {} {code} for (Pairbyte[], String p : familyPaths) { byte[] familyName = p.getFirst(); String path = p.getSecond(); Store store = getStore(familyName); if (store == null) { IOException ioe = new DoNotRetryIOException( No such column family + Bytes.toStringBinary(familyName)); ioes.add(ioe); failures.add(p); } else { try { store.assertBulkLoadHFileOk(new Path(path)); } catch (WrongRegionException wre) { // recoverable (file doesn't fit in region) failures.add(p); } catch (IOException ioe) { // unrecoverable (hdfs problem) ioes.add(ioe); } } } // validation failed, bail out before doing anything permanent. if (failures.size() != 0) { StringBuilder list = new StringBuilder(); for (Pairbyte[], String p : failures) { list.append(\n).append(Bytes.toString(p.getFirst())).append( : ) .append(p.getSecond()); } // problem when validating LOG.warn(There was a recoverable bulk load failure likely due to a + split. These (family, HFile) pairs were not loaded: + list); return false; } // validation failed because of some sort of IO problem. if (ioes.size() != 0) { LOG.error(There were IO errors when checking if bulk load is ok. + throwing exception!); throw MultipleIOException.createIOException(ioes); } {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira