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