Uploaded image for project: 'Marathon'
  1. Marathon
  2. MARATHON-7758

Create marathon-storage-tool based recommendation for bulk migrating unreachableStrategy values

    Details

    • Type: Task
    • Status: Resolved
    • Priority: Medium
    • Resolution: Won't Do
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Persistence
    • Labels:

      Description

      Todo: scope this wrt customers/community. Some people are less technically savvy or don't want to tear down all Marathon processes. We should think of a possibility to change the UnreachableStrategy w/o needing additional tools or Marathon downtimes – e.g. by allowing to update the UnreachableStrategy via the API w/o restarting instances. Since the strategy is stored with each instance, we would still need to update those in the instance repository.

      Problem:

      • In 1.4.x, the UnreachableStrategy default was updated from "replace immediately" to a configurable default of 10 minutes.
      • A migration was written and implemented for 1.4.6, but users only got one chance to enable the migration and often do not realize they needed to enable the migration until after it is too late.

      Acceptance:

      • User can bulk modify all apps, where appropriate, to set the unreachableStrategy to 0,0
      • The change should not cause apps to restart
      • The solution should work for Marathon 1.4.x and 1.5.x
      • The Instances have a copy of the UnreachableStrategy used when they were launched; these should also be migrated

      Potential approaches:

      • Provide script to do it via the API (make sure changing unreaechable strategy doesn't trigger a restart)
      • Provide method to update the storage state.

       --

       

      Marathon Storage Tool approach:

      // Consider using the following DSL functions:
      
      val appIds = listApps()
      val podIds = listPods()
      
      // You can access the app repository and pod repository via the "module.appRepository"... unverified pseudo code
      
      val apps = appIds.
        map { appId => await(module.appRepository.get(appId)) }.
        collect { case Some(app) => app }.
        map { app =>
          // migration logic ...
        }
      
      apps.foreach { app =>
        // we should probably run the validations... to make sure they don't set UnreachableDisabled to a resident task
        await(module.appRepository.store(app)) }
      
      
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                tharper Tim Harper
                Team:
                Orchestration Team
                Watchers:
                Tim Harper
              • Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: