Changes from 0.11.1 to 0.13.0
Tasks keys and storage format in ZooKeeper
Marathon tasks are now stored in ZooKeeper using a generic implementation that has been around for
a while. In order to accomplish this, the keys under which tasks are stored had to be migrated and
do no longer contain redundant information about the app id. Additionally, the task storage format
in Zookeeper changed as well. Previous versions of Marathon will not be able to read the tasks'
status once these are migrated. Please backup your ZooKeeper state before migrating to this version.
ZK nodes larger than a certain threshold will now be compressed. This allows Marathon to handle
more apps and groups, but breaks backwards compatibility, because older versions of Marathon are
not able to parse compressed nodes. You can define the threshold with
which defaults to 64KB.
To disable this feature, start Marathon with the
Use logback as logging backend
We moved from log4j to Logback backend.
If you are using custom log4j properties, you will have to migrate them to a logback configuration.
The log4j.properties to logback.xml Translator can help you with that.
Major changes to the UI layout
This version introduces major changes to the layout. In particular, the application list has been redesigned.
- A filter sidebar is introduced with the ability to combine filters or clear them.
- Filter by application status
- Filter by labels
- The application list now handles groups
- Groups are shown at the top of the application list
- A group route is introduced to display the contents of a group in the application list
- Breadcrumbs show the groups structure
- Breadcrumbs will be folded to "..." when there isn't room to render them in full
- App names are now shown in the app page and app list instead of app IDs
- The complete app ID is available in the configuration tab
- Application labels are shown by the application name in the application list
- Endpoints are shown in the tasks detail page
- The memory column shows the total amount of memory used by an application with a human readable unit
- The application status is displayed with a colored icon
- The instances and health columns have been combined into one called "Running Instances"
- The control buttons on the application page are shown on the left and are redesigned
Enable extensions to Marathon via Plugins
This version of Marathon ships with the ability to load and use external plugins.
With this functionality in place, you can extend and adapt functionality in Marathon to your specific needs.
We start this adventure with pluggable authentication and authorization hooks, but want to extend this
to various functionality inside of Marathon.
Please check it out and give us feedback!
We are also interested in any recommendations for upcoming plugin hooks.
Pluggable Authentication and Authorization hooks
The probably most wanted feature in Marathon is the ability to have Authentication and Authorization.
Since this topic has so distinct requirements for different organizations, it is a perfect match for our new plugin mechanism. This version now implements all the necessary hooks needed to secure most external interfaces to your specific needs. If you are interested in a very simple implementation, you can look into the Example Auth Plugin
Persistent Store Cache
All entities in the persistent store (ZK) are loaded into a cache during leader election.
Subsequent reads are delivered from that cache. Updates to entities also update the cache.
This cache should improve read access time significantly.
You can disable the cache with
Greatly improved API Reference
With this release we integrated RAML based API documentation.
/help endpoint uses the RAML Console to show the API Reference.
The Github pages documentation now also uses that specification.
We had a lot of feedback for documentation improvements - so please give us your thoughts on that.
Graphite and DataDog reporter
We collect a lot of metrics in Marathon.
You can collect those metrics via the
With those reporters you can transfer the data into either Graphite or DataDog and see the values over time.
Previous versions of the UI did not support sending the
?force=true query parameter when the
user submitted a scale action or when changing an app's configuration. These actions would be
rejected if the app was locked by one or more deployments.
In this version, the user is presented with a modal confirmation dialog when a force action is
required to proceed.
Authentication errors (401, 403) are now notified to the user by means of modal dialogs.
Improved application modal
The application create/edit modal has undergone significant architectural and UX improvements.
It is now possible to specify application labels, accepted resource roles, the user field and
health checks. Additionally, a more fine-grained input validation and error handling has been
Bookmarkable search results
The text entered in the filter bar is immediately stored in the browser's URL bar, which makes
search results bookmarkable for quicker access.
Application detail view: configuration panel
The Configuration panel in the application's detail view sees a number of improvements and bug
fixes. The application labels and dependencies are now also shown, and the lifetime durations
are shown as "humanized".
Define the number of maximum apps
A new flag (
--max_apps) has been introduced, which allows Marathon to limit the maximum number
of applications that may be created. This limit is disabled by default.
Under the Hood
Introduce a plugin-interface module
We now publish a separate marathon-plugin-interface.jar with every Marathon release on our maven repository.
This artifact holds all the inerfaces needed to develop your own Marathon plugin.
Consolidate logging to use slf4j
We moved completely to slf4j as Logging API.
Several performance improvements
- A separate thread pool is used for health check operations
- Group and app creation is more efficient.
Introduce configurable zk node compression
We introduced zk compression which improves performance significantly. Compression can be turned on/off via cmd line flags and is enabled by default.
Tasks are now stored via the standard EntityRepository
The storage of tasks was handled separately in previous versions of Marathon.
With this change in place we handle all entities via the same interface.
This allows for globally available extensions (e.g. the store cache).
- #1429 - Non-integer is accepted as instance count
- #1563 - Inconsistent /help <-> rest-api.md documentation
- #1588 - Incorrect healthcheck triggers 500 Server error
- #1730 - Add uptime metric
- #1835 - No error received when a DELETE is sent to a task in deployment
- #1904 - App scaled below minimumHealthCapacity
- #1985 - Docker container settings dialog needs better error handling
- #1988 - Move from log4j to logback
- #2157 - Row is off-centre if upper row is empty in lists
- #2174 - REST api returns code 500 for invalid JSON and fails silently to proxy the error
- #2177 - Error Handling/validation required for COMMAND health check
- #2202 - App not present right after its creation
- #2216 - Do not show (x) in keyword search input until user begins typing
- #2256 - Misleading log message if offer doesn't match because of filtered roles
- #2262 - Better error handling on application configuration change/creation
- #2264 - Cannot submit job with id containing internal slashes
- #2266 - Link "Mesos details" is broken
- #2270 - Overlapping text in Deployment view
- #2280 - Scaling check ignores task versions
- #2294 - Make boolean command line flags use Scallop's 'toggle'
- #2299 - Writes to EntityRepositories should be visible in following reads
- #2307 - Investigate MarathonSchedulerServiceTest failure
- #2338 - Parameters in the Docker container settings are not taken into account
- #2353 - Never recover from race condition when scaling up
- #2360 - PUT /v2/groups triggers restart while PUT /v2/apps does not
- #2369 - Large file URIs cause "Failed to fetch all URIs for container" error when pulling from HDFS
- #2381 - Marathon stops apps instead of restart
- #2398 - Blank docker image is created in app modal
- #2402 - Runtime privilege checkbox does not work
- #2405 - Migration of ZK State to 0.13 does not work
- #2421 - Invalid calling object (Win 8 IE10, Win 7 IE11)
- #2422 - Handle apps error response attribute on HTTP 422
- #2441 - AppRestart deployments don't wait for old tasks to be killed
- #2494 - Remove mentions of Marathon gem from docs
- #2459 - Framework Id not visible in the UI
- #2477 - Marathon forgets all tasks on restart
- #2719 - Show correct button label when creating inside group
- #2684 - Running instances are confusing
- #2681 - Circumvent cache if not yet preloaded
- #2699 - App list health bar update/render issue
- #2634 - UI does not update/show the status correctly
- #1780 - When app is locked by deployment, deleting tasks via the UI does nothing
- #2626 - Status icons are rendered blotted
- #2627 - Tasks health column shows different health status
- #2615 - Keep input focus position when updating the Filter bar
- #2599 Cache for EventSubscribers not populated on startup
- #2603 ActorLogging warning does not expand Throwable
- #2593 Very long labels expand horizontal scrollbar in app list
- #2314 - Do not remove health checks that are still needed
- #2322 - count tasks without explicit state as staging
- #2565 - Change app icon title from "Basic" to "Application"
- #2568 - UI: App state incorrectly shown
- #2574 - Label Filter: Filter Label Box is not cleared
- #2585 - Sorting by CPU causes row column to expand
- #2586 - Sorting by Status shifts heading text
List of Contributors
|2||Sebastien Le Digabel|
|1||Harpreet Singh Gulati|
git shortlog -s -n v0.11.1..v0.13.0-RC1 for the marathon repository
https://registry.hub.docker.com/u/mesosphere/marathon with tag v0.13.0
Packages are also available via the Mesosphere repositories.