You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Raghu Angadi (JIRA)" <ji...@apache.org> on 2007/06/12 23:39:25 UTC

[jira] Commented: (HADOOP-1286) Distributed cluster upgrade

    [ https://issues.apache.org/jira/browse/HADOOP-1286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504012 ] 

Raghu Angadi commented on HADOOP-1286:
--------------------------------------


Thanks Konstantin. I will use this interface for Block CRC upgrade as part of HADOOP-1134.


> Distributed cluster upgrade
> ---------------------------
>
>                 Key: HADOOP-1286
>                 URL: https://issues.apache.org/jira/browse/HADOOP-1286
>             Project: Hadoop
>          Issue Type: Improvement
>          Components: dfs
>            Reporter: Konstantin Shvachko
>         Attachments: Upgradeable.java
>
>
> Some data layout changes in HDFS require more than just a version upgrade introduced in HADOOP-702,
> because the cluster can function properly only when all components have upgraded, and the components
> need to communicate to each other and exchange data before they can perform the upgrade.
> The CRC upgrade discussed in HADOOP-1134 is one of such examples. Future enhancements like
> implementation of appends can change block meta-data and may require distributed upgrades.
> Distributed upgrade (DU) starts with a version upgrade (VU) so that at any time one could rollback
> all changes and start over.
> When VU is finished the name-node enters safe mode and persistently records that the DU have been started.
> It will also need to write a record when DU is finished. This is necessary to report unfinished upgrades in case
> of failure or for monitoring.
> The actual upgrade code from version vO to vN should be implemented in a separate UpgradeObject class,
> which implements interface Upgradeable.
> We create a new UpgradeObject for each pair of versions vO to vN that require a DU.
> We keep a (hard coded) table that determines which UpgradeObject(s) are applicable for the version pairs.
> Something like:
> || Old version || New version || class names ||
> | vO1 | vN1 | NameUpgradeObject1, DataUpgradeObject1 |
> | vO2 | vN2 | NameUpgradeObject2, DataUpgradeObject2 |
> where vO1 < vN1 < vO2 < vN2 ...
> Now, if we need to upgrade from version version vX to version vY, we look for all pairs <vOi, vNi>
> in the table such that vX < vOi < vNi < vY and perform corresponding DUs one after another as they appear in the table.
> Each DU can and most probably should contain multiple UpgradeObjects.
> I'd define one object for the name-node and one for the data-nodes.
> The upgrade objects (in the same row) can communicate to each other either via existing protocols or using
> temporary protocols defined exclusively for this particular upgrade objects.
> I envision that some DUs will need to use old  (vO) protocols to exchange the pre-upgrade data,
> and new (vN) protocols to reoport the upgraded data.
> UpgradeObjects should be able to bypass safe mode restrictions, be able to +modify+ name-node data.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.