[jira] [Updated] (HBASE-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-05-12 Thread Brian Dougan (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Dougan updated HBASE-8367:


Attachment: LoadIncrementalFiles-HBASE-8367.patch

New version of patch generated from root...

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Assignee: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-05-12 Thread Brian Dougan (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Dougan updated HBASE-8367:


Attachment: (was: LoadIncrementalHFiles-HBASE-8367.patch)

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Assignee: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-29 Thread Brian Dougan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13644677#comment-13644677
 ] 

Brian Dougan commented on HBASE-8367:
-

Yes, that's correct, the finally block is hit by that test.  However, when that 
test runs, the code simply return from inside the finally block.  Therefore, 
the if statement I'm adding after the try/finally to make sure a failure code 
is returned if one or more items remains in the queue is not hit as once the 
finally block executes, the method exits.

The only time I can hit the new block I'm adding is if the try/finally exits 
without error and there are still items in the queue.  I haven't investigated 
every case that can make this occur, but the one I ran into is if one or more 
files times out or fails server-side (assuming it fails enough to exhaust the 
retries).  As the tests are currently written, I'm struggling to come up with a 
way replicate this.  We'd either need to be able to intercept the server call 
(to force it to fail) or access to the server side to make it fail after the 
call is successful.  

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalHFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-26 Thread Brian Dougan (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Dougan updated HBASE-8367:


Attachment: LoadIncrementalHFiles-HBASE-8367.patch

Patch file against trunk.

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalHFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-26 Thread Brian Dougan (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Dougan updated HBASE-8367:


Status: Patch Available  (was: Open)

Patched proposed changes against trunk.

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.2, 0.92.1
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalHFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-26 Thread Brian Dougan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13642993#comment-13642993
 ] 

Brian Dougan commented on HBASE-8367:
-

Yep, I messed up that patch...used eclipse to generate it and did it from the 
project rather than the root.  I'll get that updated...

As for the tests, none of the existing ones are affected by this.  I tried to 
write a new test, but can't find a way to hit this code with the current setup 
of this class/tests.  The code in that finally block only gets hit when all the 
setup for the HFiles work (it's able to determine region/check for 
splits/verify families).  It only hits that code in the finally block when 
something like a timeout occurs or connection errors occur while doing the bulk 
load on the region after everything else has been successful.  Without the 
ability to intercept the call to the region or to mock the region that gets 
called, I don't really think it can be duplicated currently...thoughts?

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.8

 Attachments: LoadIncrementalHFiles-HBASE-8367.patch


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-25 Thread Brian Dougan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-8367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13642275#comment-13642275
 ] 

Brian Dougan commented on HBASE-8367:
-

What about 

{code:java}

boolean failed = false;

try {
  ...
 
} finally {
  pool.shutdown();
  if (queue != null  !queue.isEmpty()) {
StringBuilder err = new StringBuilder();
err.append(-\n);
err.append(Bulk load aborted with some files not yet loaded:\n);
err.append(-\n);
for (LoadQueueItem q : queue) {
  err.append(  ).append(q.hfilePath).append('\n');
}
LOG.error(err);
failed = true
  }
}

if (failed) {
  throw new RuntimeException(Bulk load aborted with some files not yet 
loaded.  Please check the log for more details);
}

{code}

You could also simply check the queue again in the same way that's done in the 
finally block if you don't want to maintain the status variable.  In this way, 
you either get the exception thrown by the try block (basically major 
connection failures) or you get this exception, or you know it was completely 
successful.

 LoadIncrementalHFiles does not return an error code or throw Exception when 
 failures occur due to timeouts.
 ---

 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.1, 0.92.2
 Environment: Red Hat 6.2 
 Java 1.6.0_26
 Hadoop 2.0.0-mr1-cdh4.1.1
 HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.8


 The LoadIncrementalHFiles (completebulkload) command will exit with a success 
 code (or lack of Exception) when one or more of the HFiles fail to be 
 imported through a few ways (mainly when timeouts occur).  Instead, it simply 
 logs error messages to the log which makes it difficult to automate the 
 import of HFiles programmatically.   
 The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and 
 has essentially the following structure.
 {code:title=LoadIncrementalHFiles.java}
 try {
   ...
  
 } finally {
   pool.shutdown();
   if (queue != null  !queue.isEmpty()) {
 StringBuilder err = new StringBuilder();
 err.append(-\n);
 err.append(Bulk load aborted with some files not yet loaded:\n);
 err.append(-\n);
 for (LoadQueueItem q : queue) {
   err.append(  ).append(q.hfilePath).append('\n');
 }
 LOG.error(err);
   }
 }
 {code}
 As you can see, instead of returning an error code, a success indicator, or 
 simply throwing an Exception, an error message is sent to the log.  This 
 results in something like the following in the logs.
 {quote}
 Bulk load aborted with some files not yet loaded:
 -
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
   
 hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
 {quote}
 Without some sort of indication, it's not currently possible to chain this 
 command to another or to programmatically consume this class and be certain 
 of a successful import.
 This class should be enhanced to return non-success in whatever way makes 
 sense to the community.  I don't really have a strong preference, but one of 
 the following should work fine (at least for my needs).
 * boolean return value on doBulkLoad (non-zero on run method)
 * Response object on doBulkLoad detailing the files that failed (non-zero on 
 run method)
 * throw Exception in the finally block when files failed after the error is 
 written to the log (should automatically cause non-zero on run method)
 It would also be nice to get this to the 0.94.x stream so it get included in 
 the next Cloudera release.  Thanks!

--
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-8367) LoadIncrementalHFiles does not return an error code or throw Exception when failures occur due to timeouts.

2013-04-17 Thread Brian Dougan (JIRA)
Brian Dougan created HBASE-8367:
---

 Summary: LoadIncrementalHFiles does not return an error code or 
throw Exception when failures occur due to timeouts.
 Key: HBASE-8367
 URL: https://issues.apache.org/jira/browse/HBASE-8367
 Project: HBase
  Issue Type: Improvement
  Components: mapreduce
Affects Versions: 0.92.2, 0.92.1
 Environment: Red Hat 6.2 
Java 1.6.0_26
Hadoop 2.0.0-mr1-cdh4.1.1
HBase 0.92.1-cdh4.1.1
Reporter: Brian Dougan
Priority: Minor
 Fix For: 0.94.7


The LoadIncrementalHFiles (completebulkload) command will exit with a success 
code (or lack of Exception) when one or more of the HFiles fail to be imported 
through a few ways (mainly when timeouts occur).  Instead, it simply logs error 
messages to the log which makes it difficult to automate the import of HFiles 
programmatically.   

The heart of the LoadIncrementalHFiles class (doBulkLoad) returns void and has 
essentially the following structure.

{code:title=LoadIncrementalHFiles.java}
try {
  ...
 
} finally {
  pool.shutdown();
  if (queue != null  !queue.isEmpty()) {
StringBuilder err = new StringBuilder();
err.append(-\n);
err.append(Bulk load aborted with some files not yet loaded:\n);
err.append(-\n);
for (LoadQueueItem q : queue) {
  err.append(  ).append(q.hfilePath).append('\n');
}
LOG.error(err);
  }
}
{code}

As you can see, instead of returning an error code, a success indicator, or 
simply throwing an Exception, an error message is sent to the log.  This 
results in something like the following in the logs.

{quote}
Bulk load aborted with some files not yet loaded:
-
  
hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.bottom
  hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,2.top
  
hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.bottom
  hdfs://prmdprod/user/userxxx/hfile/TABLE-1365721885510/record/_tmp/TABLE,1.top
{quote}

Without some sort of indication, it's not currently possible to chain this 
command to another or to programmatically consume this class and be certain of 
a successful import.

This class should be enhanced to return non-success in whatever way makes sense 
to the community.  I don't really have a strong preference, but one of the 
following should work fine (at least for my needs).
* boolean return value on doBulkLoad (non-zero on run method)
* Response object on doBulkLoad detailing the files that failed (non-zero on 
run method)
* throw Exception in the finally block when files failed after the error is 
written to the log (should automatically cause non-zero on run method)

It would also be nice to get this to the 0.94.x stream so it get included in 
the next Cloudera release.  Thanks!



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