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

Todd Lipcon commented on HDFS-2983:
-----------------------------------

I did a little investigation to try to answer Konstantin's questions above.

First, I'll summarize our current behavior, verified on 0.23.1 release (I 
didn't understand this thoroughly before trying it out):

- In a running cluster, if you restart the NN without the {{-upgrade}} flag, 
then the DataNodes will happily re-register without exiting.
- If you restart the NN with {{-upgrade}}, then when the DN next heartbeats, it 
will fail the {{verifyRequest()}} check, since the registration ID's namespace 
fields no longer match (the ctime has been incremented by the upgrade). This 
causes the DataNode to exit.
- Of course, restarting the DN at this point makes it take the snapshot and 
participate in the upgrade as expected.

So, to try to respond to Konstantin's questions, here are a couple example 
scenarios:

*Scenario 1*: rolling upgrade without doing a "snapshot" upgrade (for emergency 
bug fixes, hot fixes, MR fixes, other fixes which we don't expect to affect 
data reliability):

- Leave the NN running, on the old version.
- On each DN, in succession: (1) shutdown DN, (2) upgrade software to the new 
version, (3) start DN

The above is sufficient if the changes are scoped only to DNs. If the change 
also affects the NN, then you will need to add the following step, either at 
the beginning or end of the process:

- shutdown NN. upgrade installed software. start NN on new version

In the case of an HA setup, we can do the NN upgrade without downtime:

- shutdown SBN. upgrade SBN software. start SBN.
- failover to SBN running new version.
- Shutdown previous active. Upgrade software. Start previous active
- Optionally fail back

*Scenario 2*: upgrade to a version with a new layout version (LV)

In this case, a "snapshot" style upgrade is required -- the NN will not restart 
without the "-upgrade" flag, and a DN will not connect to a NN with a different 
LV. So the scenario is the same as today:

- Shutdown entire cluster
- Upgrade all software in teh clsuter
- Start cluster with {{-upgrade}} flag
-- any nodes that missed the software upgrade will fail to connect, since their 
LV does not match  (this patch retains that behavior)

*Scenario 3*: upgrade to a version with same layout version, but some data risk 
(for example upgrading to a version with bug fixes pertaining to replication 
policies, corrupt block detection, etc)

In this scenario, the NN does not mandate a {{-upgrade}} flag, but as Sanjay 
mentioned above, it can still be useful for data protection. As with today, if 
the user does not want the extra protection, this scenario can be treated 
identically to scenario 1. If the user does want the protection, it can be 
treated identically to scenario 2. Scenario 2 remains safe because of the check 
against the NameNode's {{ctime}} matching the DN's {{ctime}}. As soon as you 
restart the NN with the {{-upgrade}} flag, all running DNs will exit. Any newly 
started DN will noticethe new namespace ctime and take part in the snapshot 
upgrade.



Does the above description address your concerns? Another idea would be to add 
a new configuration option like {{dfs.allow.rolling.upgrades}} which enables 
the new behavior, so an admin who prefers not to use the feature can disallow 
it completely.

                
> Relax the build version check to permit rolling upgrades within a release
> -------------------------------------------------------------------------
>
>                 Key: HDFS-2983
>                 URL: https://issues.apache.org/jira/browse/HDFS-2983
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>    Affects Versions: 2.0.0
>            Reporter: Eli Collins
>            Assignee: Aaron T. Myers
>         Attachments: HDFS-2983.patch, HDFS-2983.patch, HDFS-2983.patch, 
> HDFS-2983.patch, HDFS-2983.patch, HDFS-2983.patch
>
>
> Currently the version check for DN/NN communication is strict (it checks the 
> exact svn revision or git hash, Storage#getBuildVersion calls 
> VersionInfo#getRevision), which prevents rolling upgrades across any 
> releases. Once we have the PB-base RPC in place (coming soon to branch-23) 
> we'll have the necessary pieces in place to loosen this restriction, though 
> perhaps it takes another 23 minor release or so before we're ready to commit 
> to making the minor versions compatible.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to