[jira] [Commented] (HBASE-8192) wrong logic in HRegion.bulkLoadHFiles(List)

2013-04-02 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-04-02 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-04-02 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-04-01 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-31 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-30 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-27 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

[ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

 [ 
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)

2013-03-25 Thread Chenghao Jiang (JIRA)

[ 
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