summaryrefslogtreecommitdiff
path: root/lgc/collection.go
diff options
context:
space:
mode:
authorWill Hawkins <[email protected]>2023-05-23 17:58:14 -0400
committerWill Hawkins <[email protected]>2023-06-21 09:12:22 -0400
commitec2ccf69d8b08abb03fa3bdb3e7e95ae1862d619 (patch)
tree6b636bdbda82db40da89a2bde213c684542850dc /lgc/collection.go
parent5558f0347baaf6db066314f0eaf82d7fb552b2f7 (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.go27
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)
}