Merge pull request #70 from skyportsystems/perGroupPeerPicker4.1
portPicker function now takes group name
diff --git a/groupcache.go b/groupcache.go
index 9499dbb..c227237 100644
--- a/groupcache.go
+++ b/groupcache.go
@@ -198,7 +198,7 @@
func (g *Group) initPeers() {
if g.peers == nil {
- g.peers = getPeers()
+ g.peers = getPeers(g.name)
}
}
diff --git a/peers.go b/peers.go
index a74a79b..1625ff0 100644
--- a/peers.go
+++ b/peers.go
@@ -47,23 +47,37 @@
func (NoPeers) PickPeer(key string) (peer ProtoGetter, ok bool) { return }
var (
- portPicker func() PeerPicker
+ portPicker func(groupName string) PeerPicker
)
// RegisterPeerPicker registers the peer initialization function.
// It is called once, when the first group is created.
+// Either RegisterPeerPicker or RegisterPerGroupPeerPicker should be
+// called exactly once, but not both.
func RegisterPeerPicker(fn func() PeerPicker) {
if portPicker != nil {
panic("RegisterPeerPicker called more than once")
}
+ portPicker = func(_ string) PeerPicker { return fn() }
+}
+
+// RegisterPerGroupPeerPicker registers the peer initialization function,
+// which takes the groupName, to be used in choosing a PeerPicker.
+// It is called once, when the first group is created.
+// Either RegisterPeerPicker or RegisterPerGroupPeerPicker should be
+// called exactly once, but not both.
+func RegisterPerGroupPeerPicker(fn func(groupName string) PeerPicker) {
+ if portPicker != nil {
+ panic("RegisterPeerPicker called more than once")
+ }
portPicker = fn
}
-func getPeers() PeerPicker {
+func getPeers(groupName string) PeerPicker {
if portPicker == nil {
return NoPeers{}
}
- pk := portPicker()
+ pk := portPicker(groupName)
if pk == nil {
pk = NoPeers{}
}