This patch introduces 2 additional features to the distributed upgrade framework,
which turned out to be useful for the crc upgrade
1. I introduce a DFSAdmin command
-upgradeProgress status | details | force
which retrieves current upgrade status, or its detailed status, or forces the upgrade to proceed if it is stuck.
2. If a data-node misses an upgrade it can still join the cluster if the respective upgrade object implements
The framework provides a default implementation of the features.
For (1) any upgrade object returns by default a generic UpgradeStatusReport class, which contains
only the version and the current status of the upgrade.
An attempt to force the upgrade will have no effect except that the name-node will log "forceProceed() is not defined"
For (2) the default implementation leads to a data-node shutdown, which is consistent with the former behavior.