Mesos 0.20+ will ship with support for executor-performed health checks. There is a new reusable health check program, used by the default mesos command executor. Health changes are reported back to the framework scheduler by re-sending a TaskStatus, a message that now may encode health data.
Marathon users should be able to choose between the current means of performing task health checks and the Mesos implementation. This will be specified with a new flag when starting up Marathon (--executor_health_checks). The default will be to use the current (scheduler-performed) health checks.
One difference when delegating to Mesos for health checking is that only one health check may be supplied with a TaskInfo. Another is that initially, a health check in Mesos may be an arbitrary command. To bridge this gap, Marathon will do a lossy translation (the first COMMAND health check, if it exists, will be used). If an app defines any additional health checks that can't be performed by the Mesos implementation, Marathon will emit warnings saying so.
- [x] Add a config option for executor health checks
- [x] Build locally against a mesos-0.20.0 JAR
- [x] Refactor HealthCheckManager to be an interface and create a delegating implementation
- [x] Conditionally inject delegating health check manager
- [x] Conditionally add health check data to TaskInfo messages prior to task launch
- [x] Conditionally forward health changes in StatusUpdate to the delegating manager
- [x] Add support for Command health checks
- [ ] Conditionally disallow multiple checks, other protocols
- reasonable status code / error message
- migration of old tasks?