MARATHON-7981 for bigger picture ticket.
Occasionally, we need to remove features from Marathon that have been marked as deprecated. Since Marathon does not support downgrading, users can get into a situation where they discover that they still relied on some deprecated feature, and either have to rush to change their integrations to cope with the removal of the feature, or, if they happened to back up zookeeper prior to upgrading Marathon, they can restore an older backup and downgrade. Both of these scenarios are very painful.
Further, unfortunately, many cluster operators will are not fully aware of what dependencies on Marathon deprecated features they have until after that dependency is removed.
One solution is to give them a quicker option to reenable some behavior they discovered was necessary for a little while longer. If they perform a Marathon upgrade, and discover that an integration broke in their test cluster, they can add a flag to reenable the deprecated behavior for a while longer, and know that that flag needs to be added in their production cluster as part of the upgrade efforts. Further, after performing cluster changes, they have a mechanism to re-disable that behavior in their test cluster to assert that they can fully remove their dependency on it, thus paving the path for them to upgrade to future minor versions of Marathon.
Furthermore, in DC/OS we should have an upgrade preflight checker assert that deprecated flags will continue to work in the Marathon version bundled with the next version of DC/OS, and prevent an upgrade if it deprecated feature flag is specified and will be removed in the next target version of Marathon.
- Should warn the user that it deprecated feature enabled, with a clear notice of when that feature will be removed
- Should provide a mechanism for the user to discover what deprecated features are available, and when they will be removed (--help ?)
- Should automatically prevent Marathon from migrating the storage if a deprecated feature flag is specified that was marked for removal for the current version of Marathon (i.e.: deprecated feature flag specifies that it will be removed in 1.8.0; if current version is 1.8.x, then crash immediately). By automatic, this means that the crashing will automatically start happening once Marathons build version is bumped.