diff --git a/plugins/ps/functions.go b/plugins/ps/functions.go index 4db5ec3c9..f12ab5e36 100644 --- a/plugins/ps/functions.go +++ b/plugins/ps/functions.go @@ -124,6 +124,7 @@ func isValidRestartPolicy(policy string) bool { func parseProcessTuples(processTuples []string) (FormationSlice, error) { formations := FormationSlice{} + foundFormations := map[string]bool{} for _, processTuple := range processTuples { s := strings.SplitN(processTuple, "=", 2) if len(s) == 1 { @@ -136,6 +137,11 @@ func parseProcessTuples(processTuples []string) (FormationSlice, error) { return formations, fmt.Errorf("Invalid count for process type %s", s[0]) } + if foundFormations[processType] { + continue + } + + foundFormations[processType] = true formations = append(formations, &Formation{ ProcessType: processType, Quantity: quantity, @@ -192,7 +198,21 @@ func getFormations(appName string) (FormationSlice, error) { return formations, err } - return append(formations, oldFormations...), nil + foundProcessTypes := map[string]bool{} + for _, formation := range formations { + foundProcessTypes[formation.ProcessType] = true + } + + for _, formation := range oldFormations { + if foundProcessTypes[formation.ProcessType] { + continue + } + + foundProcessTypes[formation.ProcessType] = true + formations = append(formations, formation) + } + + return formations, nil } func restorePrep() error {