diff options
| author | Will Hawkins <[email protected]> | 2023-05-23 17:58:14 -0400 |
|---|---|---|
| committer | Will Hawkins <[email protected]> | 2023-06-21 09:12:22 -0400 |
| commit | ec2ccf69d8b08abb03fa3bdb3e7e95ae1862d619 (patch) | |
| tree | 6b636bdbda82db40da89a2bde213c684542850dc /lgc/collection.go | |
| parent | 5558f0347baaf6db066314f0eaf82d7fb552b2f7 (diff) | |
Major Update/Refactor to Support IETF 02
Beginning of a release candidate for support for IETF 02 tag of the
responsiveness spec.
Diffstat (limited to 'lgc/collection.go')
| -rw-r--r-- | lgc/collection.go | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lgc/collection.go b/lgc/collection.go index 7560186..cd6a87d 100644 --- a/lgc/collection.go +++ b/lgc/collection.go @@ -16,6 +16,7 @@ package lgc import ( "fmt" + "math/rand" "sync" ) @@ -33,10 +34,10 @@ func (collection *LoadGeneratingConnectionCollection) Get(idx int) (*LoadGenerat collection.Lock.Unlock() return nil, fmt.Errorf("collection is unlocked") } + return collection.lockedGet(idx) +} - if idx > len(*collection.LGCs) { - return nil, fmt.Errorf("index too large") - } +func (collection *LoadGeneratingConnectionCollection) lockedGet(idx int) (*LoadGeneratingConnection, error) { return &(*collection.LGCs)[idx], nil } @@ -49,6 +50,22 @@ func (collection *LoadGeneratingConnectionCollection) Append(conn LoadGenerating return nil } -func (collection *LoadGeneratingConnectionCollection) Len() int { - return len(*collection.LGCs) +func (collection *LoadGeneratingConnectionCollection) Len() (int, error) { + if collection.Lock.TryLock() { + collection.Lock.Unlock() + return -1, fmt.Errorf("collection is unlocked") + } + return len(*collection.LGCs), nil +} + +func (collection *LoadGeneratingConnectionCollection) GetRandom() (*LoadGeneratingConnection, error) { + if collection.Lock.TryLock() { + collection.Lock.Unlock() + return nil, fmt.Errorf("collection is unlocked") + } + + idx := int(rand.Uint32()) + idx = idx % len(*collection.LGCs) + + return collection.lockedGet(idx) } |
