[ 
https://issues.apache.org/jira/browse/HDFS-3863?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13443969#comment-13443969
 ] 

Chao Shi commented on HDFS-3863:
--------------------------------

Todd, assume JN1/2/3 make up a quorum and JN1 is far behind. JN1 is selected to 
be the lastest one by some buggy algorithm and NN is going to log after JN1. 
JN2 and JN3 will reject, since they know their log number is greater than 
JN1's. Everything works fine so far.

However, imagine a stupid administrator replaces JN2 and JN3 with some new 
machines. Since JN1 is far behind, it doesn't know about the journal number 
committed by JN2 and JN3. It passes the check.

I'm thinking of the similarity between committed-txid and epoch number. They 
both never decrease. I think we can do the following:
- NN maintain highest committed-txid in its memory (or more particularly a 
member of AsyncLoggerSet)
- NN sends it to JN in request header of every packet
- JN saves committed-txid
- NN updates its committed-txid once a write is acked by a quorum of JNs

Note that a JN falls behind may still learn the highest committed-txid, as long 
as the connection between that JN and NN works. The invariant there is NN's 
committed-txid >= JN's committed-txid.

We can also add an extra check when NN decide the txid to finalize: it should 
no less than any of JN's commited-txid.
                
> QJM: track last "committed" txid
> --------------------------------
>
>                 Key: HDFS-3863
>                 URL: https://issues.apache.org/jira/browse/HDFS-3863
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: ha
>    Affects Versions: QuorumJournalManager (HDFS-3077)
>            Reporter: Todd Lipcon
>            Assignee: Todd Lipcon
>
> Per some discussion with [~stepinto] 
> [here|https://issues.apache.org/jira/browse/HDFS-3077?focusedCommentId=13422579&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13422579],
>  we should keep track of the "last committed txid" on each JournalNode. Then 
> during any recovery operation, we can sanity-check that we aren't asked to 
> truncate a log to an earlier transaction.
> This is also a necessary step if we want to support reading from in-progress 
> segments in the future (since we should only allow reads up to the commit 
> point)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to