@aquamatthias aquamatthias released this Dec 1, 2015 · 2697 commits to master since this release

Changes from 0.11.1 to 0.13.0

Breaking Changes

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.

Zookeeper Compression

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 --zk_compression_threshold
which defaults to 64KB.
To disable this feature, start Marathon with the --disable_zk_compression flag.

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.

To start with this feature, please read Plugin Documentation or see our Example Plugins.

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 --disable_store_cache.

Greatly improved API Reference

With this release we integrated RAML based API documentation.
The /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 /metrics endpoint.
With those reporters you can transfer the data into either Graphite or DataDog and see the values over time.

Force action

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

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).

Fixed Issues

  • #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

Commits Contributor
74 Matthias Veit
57 Gastón Kleiman
25 Peter Kolloch
17 sascala
13 Matthias Eichstedt
5 Marcus Wasner
5 Connor Doyle
4 Philip Norman
3 Tamar Ben-Shachar
3 Gastón Kleiman
2 Tomasz Janiszewski
2 Felix Gertz
2 mattpennathe3rd
2 Sebastien Le Digabel
1 alon-argus
1 pbnsilva
1 Lukas Lösche
1 Harpreet Singh Gulati
1 José Moreira
1 Matthias Lüneberg
1 Felix Bechstein
1 Pierluigi Cau
1 R.B. Boyer

Generated by 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.
See: https://mesosphere.com/blog/2014/07/17/mesosphere-package-repositories/