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

Reply via email to