Merge pull request #1063 from peggyl/scheduler-strategy-godoc

Add more meaningful godoc comments for the scheduler/strategy package
This commit is contained in:
Victor Vieux 2015-07-16 09:06:26 -07:00
commit bfd3fdfa4c
4 changed files with 25 additions and 18 deletions

View File

@ -7,21 +7,21 @@ import (
"github.com/docker/swarm/scheduler/node"
)
// BinpackPlacementStrategy is exported
// BinpackPlacementStrategy places a container onto the most packed node in the cluster.
type BinpackPlacementStrategy struct {
}
// Initialize is exported
// Initialize a BinpackPlacementStrategy.
func (p *BinpackPlacementStrategy) Initialize() error {
return nil
}
// Name returns the name of the strategy
// Name returns the name of the strategy.
func (p *BinpackPlacementStrategy) Name() string {
return "binpack"
}
// PlaceContainer is exported
// PlaceContainer places a container on the node with the most running containers.
func (p *BinpackPlacementStrategy) PlaceContainer(config *cluster.ContainerConfig, nodes []*node.Node) (*node.Node, error) {
weightedNodes, err := weighNodes(config, nodes)
if err != nil {

View File

@ -14,18 +14,18 @@ type RandomPlacementStrategy struct {
r *rand.Rand
}
// Initialize is exported
// Initialize a RandomPlacementStrategy.
func (p *RandomPlacementStrategy) Initialize() error {
p.r = rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
return nil
}
// Name returns the name of the strategy
// Name returns the name of the strategy.
func (p *RandomPlacementStrategy) Name() string {
return "random"
}
// PlaceContainer is exported
// PlaceContainer places the container on a random node in the cluster.
func (p *RandomPlacementStrategy) PlaceContainer(config *cluster.ContainerConfig, nodes []*node.Node) (*node.Node, error) {
if size := len(nodes); size > 0 {
return nodes[p.r.Intn(size)], nil

View File

@ -7,21 +7,21 @@ import (
"github.com/docker/swarm/scheduler/node"
)
// SpreadPlacementStrategy is exported
// SpreadPlacementStrategy places a container on the node with the fewest running containers.
type SpreadPlacementStrategy struct {
}
// Initialize is exported
// Initialize a SpreadPlacementStrategy.
func (p *SpreadPlacementStrategy) Initialize() error {
return nil
}
// Name returns the name of the strategy
// Name returns the name of the strategy.
func (p *SpreadPlacementStrategy) Name() string {
return "spread"
}
// PlaceContainer is exported
// PlaceContainer places a container on the node with the fewest running containers.
func (p *SpreadPlacementStrategy) PlaceContainer(config *cluster.ContainerConfig, nodes []*node.Node) (*node.Node, error) {
weightedNodes, err := weighNodes(config, nodes)
if err != nil {

View File

@ -8,21 +8,28 @@ import (
"github.com/docker/swarm/scheduler/node"
)
// PlacementStrategy is exported
// PlacementStrategy is the interface for a container placement strategy.
type PlacementStrategy interface {
// Name of the strategy
Name() string
// Initialize performs any initial configuration required by the strategy and returns
// an error if one is encountered.
// If no initial configuration is needed, this may be a no-op and return a nil error.
Initialize() error
// Given a container configuration and a set of nodes, select the target
// node where the container should be scheduled.
// node where the container should be scheduled. PlaceContainer returns
// an error if there is no available node on which to schedule the container.
PlaceContainer(config *cluster.ContainerConfig, nodes []*node.Node) (*node.Node, error)
}
var (
strategies []PlacementStrategy
// ErrNotSupported is exported
// ErrNotSupported is the error returned when a strategy name does not match
// any supported placement strategy.
ErrNotSupported = errors.New("strategy not supported")
// ErrNoResourcesAvailable is exported
// ErrNoResourcesAvailable is the error returned when there are no resources
// available to schedule a container. This can occur if there are no nodes in
// the cluster or if no node contains sufficient resources for the container.
ErrNoResourcesAvailable = errors.New("no resources available to schedule container")
)
@ -34,7 +41,7 @@ func init() {
}
}
// New is exported
// New creates a new PlacementStrategy for the given strategy name.
func New(name string) (PlacementStrategy, error) {
if name == "binpacking" { //TODO: remove this compat
name = "binpack"
@ -51,7 +58,7 @@ func New(name string) (PlacementStrategy, error) {
return nil, ErrNotSupported
}
// List returns the names of all the available strategies
// List returns the names of all the available strategies.
func List() []string {
names := []string{}