diff --git a/libnetwork/idm/idm.go b/libnetwork/idm/idm.go deleted file mode 100644 index 49d16037a9..0000000000 --- a/libnetwork/idm/idm.go +++ /dev/null @@ -1,76 +0,0 @@ -// Package idm manages reservation/release of numerical ids from a configured set of contiguous ids -package idm - -import ( - "errors" - "fmt" - - "github.com/docker/docker/libnetwork/bitseq" - "github.com/docker/docker/libnetwork/datastore" -) - -// Idm manages the reservation/release of numerical ids from a contiguous set -type Idm struct { - start uint64 - end uint64 - handle *bitseq.Handle -} - -// New returns an instance of id manager for a [start,end] set of numerical ids -func New(ds datastore.DataStore, id string, start, end uint64) (*Idm, error) { - if id == "" { - return nil, errors.New("Invalid id") - } - if end <= start { - return nil, fmt.Errorf("Invalid set range: [%d, %d]", start, end) - } - - h, err := bitseq.NewHandle("idm", ds, id, 1+end-start) - if err != nil { - return nil, fmt.Errorf("failed to initialize bit sequence handler: %s", err.Error()) - } - - return &Idm{start: start, end: end, handle: h}, nil -} - -// GetID returns the first available id in the set -func (i *Idm) GetID(serial bool) (uint64, error) { - if i.handle == nil { - return 0, errors.New("ID set is not initialized") - } - ordinal, err := i.handle.SetAny(serial) - return i.start + ordinal, err -} - -// GetSpecificID tries to reserve the specified id -func (i *Idm) GetSpecificID(id uint64) error { - if i.handle == nil { - return errors.New("ID set is not initialized") - } - - if id < i.start || id > i.end { - return errors.New("Requested id does not belong to the set") - } - - return i.handle.Set(id - i.start) -} - -// GetIDInRange returns the first available id in the set within a [start,end] range -func (i *Idm) GetIDInRange(start, end uint64, serial bool) (uint64, error) { - if i.handle == nil { - return 0, errors.New("ID set is not initialized") - } - - if start < i.start || end > i.end { - return 0, errors.New("Requested range does not belong to the set") - } - - ordinal, err := i.handle.SetAnyInRange(start-i.start, end-i.start, serial) - - return i.start + ordinal, err -} - -// Release releases the specified id -func (i *Idm) Release(id uint64) { - i.handle.Unset(id - i.start) -} diff --git a/libnetwork/idm/idm_test.go b/libnetwork/idm/idm_test.go deleted file mode 100644 index 54055787ba..0000000000 --- a/libnetwork/idm/idm_test.go +++ /dev/null @@ -1,294 +0,0 @@ -package idm - -import ( - "testing" -) - -func TestNew(t *testing.T) { - _, err := New(nil, "", 0, 1) - if err == nil { - t.Fatal("Expected failure, but succeeded") - } - - _, err = New(nil, "myset", 1<<10, 0) - if err == nil { - t.Fatal("Expected failure, but succeeded") - } - - i, err := New(nil, "myset", 0, 10) - if err != nil { - t.Fatalf("Unexpected failure: %v", err) - } - if i.handle == nil { - t.Fatal("set is not initialized") - } - if i.start != 0 { - t.Fatal("unexpected start") - } - if i.end != 10 { - t.Fatal("unexpected end") - } -} - -func TestAllocate(t *testing.T) { - i, err := New(nil, "myids", 50, 52) - if err != nil { - t.Fatal(err) - } - - if err = i.GetSpecificID(49); err == nil { - t.Fatal("Expected failure but succeeded") - } - - if err = i.GetSpecificID(53); err == nil { - t.Fatal("Expected failure but succeeded") - } - - o, err := i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 50 { - t.Fatalf("Unexpected first id returned: %d", o) - } - - err = i.GetSpecificID(50) - if err == nil { - t.Fatal(err) - } - - o, err = i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 51 { - t.Fatalf("Unexpected id returned: %d", o) - } - - o, err = i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 52 { - t.Fatalf("Unexpected id returned: %d", o) - } - - o, err = i.GetID(false) - if err == nil { - t.Fatalf("Expected failure but succeeded: %d", o) - } - - i.Release(50) - - o, err = i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 50 { - t.Fatal("Unexpected id returned") - } - - i.Release(52) - err = i.GetSpecificID(52) - if err != nil { - t.Fatal(err) - } -} - -func TestUninitialized(t *testing.T) { - i := &Idm{} - - if _, err := i.GetID(false); err == nil { - t.Fatal("Expected failure but succeeded") - } - - if err := i.GetSpecificID(44); err == nil { - t.Fatal("Expected failure but succeeded") - } -} - -func TestAllocateInRange(t *testing.T) { - i, err := New(nil, "myset", 5, 10) - if err != nil { - t.Fatal(err) - } - - o, err := i.GetIDInRange(6, 6, false) - if err != nil { - t.Fatal(err) - } - if o != 6 { - t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o) - } - - if err = i.GetSpecificID(6); err == nil { - t.Fatalf("Expected failure but succeeded") - } - - o, err = i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 5 { - t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o) - } - - i.Release(6) - - o, err = i.GetID(false) - if err != nil { - t.Fatal(err) - } - if o != 6 { - t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o) - } - - for n := 7; n <= 10; n++ { - o, err := i.GetIDInRange(7, 10, false) - if err != nil { - t.Fatal(err) - } - if o != uint64(n) { - t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o) - } - } - - if err = i.GetSpecificID(7); err == nil { - t.Fatalf("Expected failure but succeeded") - } - - if err = i.GetSpecificID(10); err == nil { - t.Fatalf("Expected failure but succeeded") - } - - i.Release(10) - - o, err = i.GetIDInRange(5, 10, false) - if err != nil { - t.Fatal(err) - } - if o != 10 { - t.Fatalf("Unexpected id returned. Expected: 10. Got: %d", o) - } - - i.Release(5) - - o, err = i.GetIDInRange(5, 10, false) - if err != nil { - t.Fatal(err) - } - if o != 5 { - t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o) - } - - for n := 5; n <= 10; n++ { - i.Release(uint64(n)) - } - - for n := 5; n <= 10; n++ { - o, err := i.GetIDInRange(5, 10, false) - if err != nil { - t.Fatal(err) - } - if o != uint64(n) { - t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o) - } - } - - for n := 5; n <= 10; n++ { - if err = i.GetSpecificID(uint64(n)); err == nil { - t.Fatalf("Expected failure but succeeded for id: %d", n) - } - } - - // New larger set - ul := uint64((1 << 24) - 1) - i, err = New(nil, "newset", 0, ul) - if err != nil { - t.Fatal(err) - } - - o, err = i.GetIDInRange(4096, ul, false) - if err != nil { - t.Fatal(err) - } - if o != 4096 { - t.Fatalf("Unexpected id returned. Expected: 4096. Got: %d", o) - } - - o, err = i.GetIDInRange(4096, ul, false) - if err != nil { - t.Fatal(err) - } - if o != 4097 { - t.Fatalf("Unexpected id returned. Expected: 4097. Got: %d", o) - } - - o, err = i.GetIDInRange(4096, ul, false) - if err != nil { - t.Fatal(err) - } - if o != 4098 { - t.Fatalf("Unexpected id returned. Expected: 4098. Got: %d", o) - } -} - -func TestAllocateSerial(t *testing.T) { - i, err := New(nil, "myids", 50, 55) - if err != nil { - t.Fatal(err) - } - - if err = i.GetSpecificID(49); err == nil { - t.Fatal("Expected failure but succeeded") - } - - if err = i.GetSpecificID(56); err == nil { - t.Fatal("Expected failure but succeeded") - } - - o, err := i.GetID(true) - if err != nil { - t.Fatal(err) - } - if o != 50 { - t.Fatalf("Unexpected first id returned: %d", o) - } - - err = i.GetSpecificID(50) - if err == nil { - t.Fatal(err) - } - - o, err = i.GetID(true) - if err != nil { - t.Fatal(err) - } - if o != 51 { - t.Fatalf("Unexpected id returned: %d", o) - } - - o, err = i.GetID(true) - if err != nil { - t.Fatal(err) - } - if o != 52 { - t.Fatalf("Unexpected id returned: %d", o) - } - - i.Release(50) - - o, err = i.GetID(true) - if err != nil { - t.Fatal(err) - } - if o != 53 { - t.Fatal("Unexpected id returned") - } - - i.Release(52) - err = i.GetSpecificID(52) - if err != nil { - t.Fatal(err) - } -}