[ 
https://issues.apache.org/jira/browse/HADOOP-2261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12545976
 ] 

Jim Kellerman commented on HADOOP-2261:
---------------------------------------

It turns out that commit already releases resources so that you never need to 
call abort unless you decide you don't want to commit the update. For example:

{code}
long lockid = table.startUpdate(new Text(article.getName()));
for (File articleInfo: article.listFiles(new NonDirectories())) {
  String article = null;
  try {
    DataInputStream in = new DataInputStream(new FileInputStream(articleInfo));
    article = in.readUTF();
  } catch (IOException e) {
    // Input error - abandon update
    table.abort(lockid);
    throw e;
  }
  try {
    table.put(lockid, columnName(articleInfo.getName()), article.getBytes());
  } catch (RuntimeException e) {
    // Put failed - abandon update
    table.abort(lockid);
    throw e;
  }
}
table.commit(lockid);
{code}

I will be submitting a patch that updates the Javadoc for HTable that should 
make this clearer.

> [hbase] Change abort to finalize; does nothing if commit ran successfully
> -------------------------------------------------------------------------
>
>                 Key: HADOOP-2261
>                 URL: https://issues.apache.org/jira/browse/HADOOP-2261
>             Project: Hadoop
>          Issue Type: Improvement
>          Components: contrib/hbase
>            Reporter: stack
>            Assignee: Jim Kellerman
>             Fix For: 0.16.0
>
>
> From Michael Bieniosek:
> {code}I'm trying to do an update row, so I write code like:
> long lockid = table.startUpdate(new Text(article.getName())); try {
>      for (File articleInfo: article.listFiles(new NonDirectories())) {        
>   articleTable.put(lockid, columnName(articleInfo.getName()), 
> readFile(articleInfo));     }
>      table.commit(lockid);
> } finally {
>     table.abort(lockid);
> }
> This doesn't work, because in the normal case it calls abort after commit.  
> But I'm not sure what the code should be, eg.:
> long lockid = table.startUpdate(new Text(article.getName())); try {
>      for (File articleInfo: article.listFiles(new NonDirectories())) {        
>   articleTable.put(lockid, columnName(articleInfo.getName()), 
> readFile(articleInfo));     }
>      table.commit(lockid);
> } catch (IOException e) {
>     table.abort(lockid);
>     throw e;
> } catch (RuntimeException e) {
>     table.abort(lockid);
>     throw e;
> }
> This gets unwieldy very quickly.  Could you maybe change abort() to 
> finalize() which either aborts or does nothing if a commit was successful?
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to