[ https://issues.apache.org/jira/browse/PHOENIX-900?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14323373#comment-14323373 ]
Eli Levine commented on PHOENIX-900: ------------------------------------ Musings on properly handling partial save in Phoenix: MutationState sorts mutations by HTable, iterates over HTables, and calls batch() on each. MutationState catches the first exception it sees (index-related corner case in MutationState.commit() notwithstanding) and rethrows it as CommitException, leaving any mutations related to not-yet-processed HTables uncommitted. In order to handle partial commits correctly it seems Phoenix needs to: 1. Call HTableInterface.batch() and process partial results per HTable. 2. Remember partial results for each HTable.batch() call and keep going even after an IOException from HTable.batch(). 3. At the end of MutationState.commit() if any exceptions were caught throw CommitException with partial save info. Any thoughts on this, [~giacomotaylor]? This is a separate enough chunk of work that it warrants its own Jira IMHO. > Partial results for mutations > ----------------------------- > > Key: PHOENIX-900 > URL: https://issues.apache.org/jira/browse/PHOENIX-900 > Project: Phoenix > Issue Type: Bug > Affects Versions: 3.0.0, 4.0.0 > Reporter: Eli Levine > Assignee: Eli Levine > Attachments: PHOENIX-900.patch > > > HBase provides a way to retrieve partial results of a batch operation: > http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#batch%28java.util.List,%20java.lang.Object[]%29 > Chatted with James about this offline: > Yes, this could be included in the CommitException we throw > (MutationState:412). We already include the batches that have been > successfully committed to the HBase server in this exception. Would you be up > for adding this additional information? You'd want to surface this in a > Phoenix-y way in a method on CommitException, something like this: ResultSet > getPartialCommits(). You can easily create an in memory ResultSet using > MaterializedResultIterator plus the PhoenixResultSet constructor that accepts > this (just create a new empty PhoenixStatement with the PhoenixConnection for > the other arg). -- This message was sent by Atlassian JIRA (v6.3.4#6332)