daemon

package
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2017 License: GPL-3.0 Imports: 22 Imported by: 3

Documentation

Index

Constants

View Source
const (
	DriverBinary      = "/opt/driver/bin/driver"
	GRPCSocket        = "rpc.sock"
	TmpPathPattern    = "/tmp/%s"
	ConnectionTimeout = 5 * time.Second
)

Variables

View Source
var (
	ErrUnexpected       = errors.NewKind("unexpected error")
	ErrMissingDriver    = errors.NewKind("missing driver for language %s")
	ErrRuntime          = errors.NewKind("runtime failure")
	ErrAlreadyInstalled = errors.NewKind("driver already installed: %s (image reference: %s)")
)
View Source
var (
	// DefaultPoolTimeout is the time a request to the DriverPool can wait
	// before getting a driver assigned.
	DefaultPoolTimeout = 5 * time.Second

	// DefaultMaxInstancesPerDriver is the maximum number of instances of
	// the same driver which can be launched following the default
	// scaling policy (see DefaultScalingPolicy()).
	DefaultMaxInstancesPerDriver = runtime.NumCPU()

	ErrPoolClosed        = errors.NewKind("driver pool already closed")
	ErrPoolTimeout       = errors.NewKind("timeout, all drivers are busy")
	ErrNegativeInstances = errors.NewKind("cannot set instances to negative number")
)

Functions

func GetLanguage

func GetLanguage(filename string, content []byte) string

GetLanguage detects the language of a file and returns it in a normalized form.

Types

type Daemon

type Daemon struct {
	server.Server
	// Transport to use to fetch driver images. Defaults to "docker".
	// Useful transports:
	// - docker: uses Docker registries (docker.io by default).
	// - docker-daemon: gets images from a local Docker daemon.
	Transport string
	// Overrides for images per language
	Overrides map[string]string
	// contains filtered or unexported fields
}

Daemon is a Babelfish server.

func NewDaemon

func NewDaemon(version string, r *runtime.Runtime) *Daemon

NewDaemon creates a new server based on the runtime with the given version.

func (*Daemon) AddDriver

func (d *Daemon) AddDriver(language string, img string) error

func (*Daemon) DriverPool

func (d *Daemon) DriverPool(language string) (*DriverPool, error)

func (*Daemon) NativeParse

func (*Daemon) Parse

func (*Daemon) Stop

func (d *Daemon) Stop() error

func (*Daemon) Version

type Driver

type Driver interface {
	Start() error
	Stop() error
	Status() (libcontainer.Status, error)
	Service() protocol.ProtocolServiceClient
}

type DriverInstance

type DriverInstance struct {
	Language  string
	Process   *runtime.Process
	Container runtime.Container
	Image     runtime.DriverImage
	// contains filtered or unexported fields
}

DriverInstance represents an instance of a driver.

func NewDriverInstance

func NewDriverInstance(r *runtime.Runtime, lang string, i runtime.DriverImage, o *Options) (*DriverInstance, error)

NewDriverInstance represents a running Driver in the runtime. Its holds the container and the connection to the internal grpc server.

func (*DriverInstance) Service

Service returns the client using the grpc connection.

func (*DriverInstance) Start

func (i *DriverInstance) Start() error

Start starts a container and connects to it.

func (*DriverInstance) Status

func (i *DriverInstance) Status() (libcontainer.Status, error)

func (*DriverInstance) Stop

func (i *DriverInstance) Stop() error

Stop stops the inner running container.

type DriverPool

type DriverPool struct {
	// ScalingPolicy scaling policy used to scale up the instances.
	ScalingPolicy ScalingPolicy
	// Timeout time for wait until a driver instance is available.
	Timeout time.Duration
	// Logger used during the live of the driver pool.
	Logger server.Logger
	// contains filtered or unexported fields
}

DriverPool controls a pool of drivers and balances requests among them, ensuring each driver does not get concurrent requests. The number of driver instances in the driver pool is controlled by a ScalingPolicy.

func NewDriverPool

func NewDriverPool(factory FactoryFunction) *DriverPool

NewDriverPool creates and starts a new DriverPool. It takes as parameters a FactoryFunction, used to instantiate new drivers.

func (*DriverPool) Execute

func (dp *DriverPool) Execute(c Function) error

Execute executes the given Function in the first available driver instance. It gets a driver from the pool and forwards the request to it. If all drivers are busy, it will return an error after the timeout passes. If the DriverPool is closed, an error will be returned.

func (*DriverPool) Start

func (dp *DriverPool) Start() error

Start stats the driver pool.

func (*DriverPool) Stop

func (dp *DriverPool) Stop() error

Stop stop the driver pool, including all its underlying driver instances.

type FactoryFunction

type FactoryFunction func() (Driver, error)

FactoryFunction is a factory function that creates new DriverInstance's.

type Function

type Function func(d Driver) error

Function is a function to be executed using a given driver.

type Options

type Options struct {
	LogLevel  string
	LogFormat string
}

type ScalingPolicy

type ScalingPolicy interface {
	// Scale takes the number of total instances and the load. The load is
	// the number of request waiting or, there is none, it is a negative
	// value indicating how many instances are ready.
	Scale(total, load int) int
}

ScalingPolicy specifies whether instances should be started or stopped to cope with load.

func AIMD

func AIMD(add int, mul float64) ScalingPolicy

AIMD returns a ScalingPolicy of additive increase / multiplicative decrease. Increases are of min(add, load). Decreases are of (ready / mul).

func DefaultScalingPolicy

func DefaultScalingPolicy() ScalingPolicy

DefaultScalingPolicy returns a new instance of the default scaling policy. Instances returned by this function should not be reused.

func MinMax

func MinMax(min, max int, p ScalingPolicy) ScalingPolicy

MinMax wraps a ScalingPolicy and applies a minimum and maximum to the number of instances.

func MovingAverage

func MovingAverage(window int, p ScalingPolicy) ScalingPolicy

MovingAverage computes a moving average of the load and forwards it to the underlying scaling policy. This policy is stateful and not thread-safe, do not reuse its instances for multiple pools.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL