in cluster/cluster.go [253:280]
func (cluster *Cluster) GenerateCommandList(scope Scope, generator interface{}) []ShellCommand {
commands := []ShellCommand{}
switch generateCommand := generator.(type) {
case func(content int) []string:
for _, content := range cluster.ContentIDs {
if content == -1 && scopeExcludesCoordinator(scope) {
continue
}
commands = append(commands, NewShellCommand(scope, content, "", generateCommand(content)))
}
case func(host string) []string:
for _, host := range cluster.Hostnames {
hostHasOneContent := len(cluster.GetContentsForHost(host)) == 1
if host == cluster.GetHostForContent(-1, "p") && scopeExcludesCoordinator(scope) && hostHasOneContent {
// Only exclude the coordinator host if there are no local segments
continue
}
if host == cluster.GetHostForContent(-1, "m") && scopeExcludesMirrors(scope) && hostHasOneContent {
// Only exclude the standby coordinator host if there are no segments there
continue
}
commands = append(commands, NewShellCommand(scope, -2, host, generateCommand(host)))
}
default:
gplog.Fatal(nil, "Generator function passed to GenerateCommandList had an invalid function header.")
}
return commands
}