kubernetes: k8s.io/kubernetes/pkg/registry/core/service/portallocator Index | Files | Directories

package portallocator

import "k8s.io/kubernetes/pkg/registry/core/service/portallocator"


Package Files

allocator.go operation.go


var (
    ErrFull              = errors.New("range is full")
    ErrAllocated         = errors.New("provided port is already allocated")
    ErrMismatchedNetwork = errors.New("the provided port range does not match the current port range")

type ErrNotInRange Uses

type ErrNotInRange struct {
    ValidPorts string

func (*ErrNotInRange) Error Uses

func (e *ErrNotInRange) Error() string

type Interface Uses

type Interface interface {
    Allocate(int) error
    AllocateNext() (int, error)
    Release(int) error

    // For testing
    Has(int) bool

Interface manages the allocation of ports out of a range. Interface should be threadsafe.

type PortAllocationOperation Uses

type PortAllocationOperation struct {
    // contains filtered or unexported fields

Encapsulates the semantics of a port allocation 'transaction': It is better to leak ports than to double-allocate them, so we allocate immediately, but defer release. On commit we best-effort release the deferred releases. On rollback we best-effort release any allocations we did.

Pattern for use:

op := StartPortAllocationOperation(...)
defer op.Finish

/ op.Commit()

func StartOperation Uses

func StartOperation(pa Interface, dryRun bool) *PortAllocationOperation

Creates a portAllocationOperation, tracking a set of allocations & releases If dryRun is specified, never actually allocate or release anything

func (*PortAllocationOperation) Allocate Uses

func (op *PortAllocationOperation) Allocate(port int) error

Allocates a port, and record it for future rollback

func (*PortAllocationOperation) AllocateNext Uses

func (op *PortAllocationOperation) AllocateNext() (int, error)

Allocates a port, and record it for future rollback

func (*PortAllocationOperation) Commit Uses

func (op *PortAllocationOperation) Commit() []error

(Try to) perform any deferred operations. Note that even if this fails, we don't rollback; we always want to err on the side of over-allocation, and Commit should be called _after_ the owner is written

func (*PortAllocationOperation) Finish Uses

func (op *PortAllocationOperation) Finish()

Will rollback unless marked as shouldRollback = false by a Commit(). Call from a defer block

func (*PortAllocationOperation) ReleaseDeferred Uses

func (op *PortAllocationOperation) ReleaseDeferred(port int)

Marks a port so that it will be released if this operation Commits

func (*PortAllocationOperation) Rollback Uses

func (op *PortAllocationOperation) Rollback() []error

(Try to) undo any operations we did

type PortAllocator Uses

type PortAllocator struct {
    // contains filtered or unexported fields

func NewFromSnapshot Uses

func NewFromSnapshot(snap *api.RangeAllocation) (*PortAllocator, error)

NewFromSnapshot allocates a PortAllocator and initializes it from a snapshot.

func NewPortAllocator Uses

func NewPortAllocator(pr net.PortRange) (*PortAllocator, error)

Helper that wraps NewPortAllocatorCustom, for creating a range backed by an in-memory store.

func NewPortAllocatorCustom Uses

func NewPortAllocatorCustom(pr net.PortRange, allocatorFactory allocator.AllocatorFactory) (*PortAllocator, error)

NewPortAllocatorCustom creates a PortAllocator over a net.PortRange, calling allocatorFactory to construct the backing store.

func (*PortAllocator) Allocate Uses

func (r *PortAllocator) Allocate(port int) error

Allocate attempts to reserve the provided port. ErrNotInRange or ErrAllocated will be returned if the port is not valid for this range or has already been reserved. ErrFull will be returned if there are no ports left.

func (*PortAllocator) AllocateNext Uses

func (r *PortAllocator) AllocateNext() (int, error)

AllocateNext reserves one of the ports from the pool. ErrFull may be returned if there are no ports left.

func (*PortAllocator) ForEach Uses

func (r *PortAllocator) ForEach(fn func(int))

ForEach calls the provided function for each allocated port.

func (*PortAllocator) Free Uses

func (r *PortAllocator) Free() int

Free returns the count of port left in the range.

func (*PortAllocator) Has Uses

func (r *PortAllocator) Has(port int) bool

Has returns true if the provided port is already allocated and a call to Allocate(port) would fail with ErrAllocated.

func (*PortAllocator) Release Uses

func (r *PortAllocator) Release(port int) error

Release releases the port back to the pool. Releasing an unallocated port or a port out of the range is a no-op and returns no error.

func (*PortAllocator) Restore Uses

func (r *PortAllocator) Restore(pr net.PortRange, data []byte) error

Restore restores the pool to the previously captured state. ErrMismatchedNetwork is returned if the provided port range doesn't exactly match the previous range.

func (*PortAllocator) Snapshot Uses

func (r *PortAllocator) Snapshot(dst *api.RangeAllocation) error

Snapshot saves the current state of the pool.

func (*PortAllocator) Used Uses

func (r *PortAllocator) Used() int

Used returns the count of ports used in the range.



Package portallocator imports 6 packages (graph) and is imported by 54 packages. Updated 2020-08-09. Refresh now. Tools for package owners.