// NewPortAllocatorCustom creates a PortAllocator over a util.PortRange, calling allocatorFactory to construct the backing store. func NewPortAllocatorCustom(pr util.PortRange, allocatorFactory allocator.AllocatorFactory) *PortAllocator { max := pr.Size rangeSpec := pr.String() a := &PortAllocator{ portRange: pr, } a.alloc = allocatorFactory(max, rangeSpec) return a }
// 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 (r *PortAllocator) Restore(pr util.PortRange, data []byte) error { if pr.String() != r.portRange.String() { return ErrMismatchedNetwork } snapshottable, ok := r.alloc.(allocator.Snapshottable) if !ok { return fmt.Errorf("not a snapshottable allocator") } return snapshottable.Restore(pr.String(), data) }