[ https://issues.apache.org/jira/browse/HADOOP-2261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12546085 ]
Jim Kellerman commented on HADOOP-2261: --------------------------------------- Since HADOOP-2139 phase 1, abort may be called without throwing an exception if no update is in progress. So if you want to do: {code} long lockid = table.startUpdate(....); try { table.put(...); table.delete(...); table.commit(...) } finally { table.abort(lockid); } {code} This will work just fine. The only restriction is that the lockid match the one returned from startUpdate() I have updated the Javadoc for HTable to reflect this. When it is committed, hopefully this will be 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 > > Attachments: patch.txt > > > 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.