diff options
author | Brad Fitzpatrick <brad@danga.com> | 2016-08-03 13:04:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-03 13:04:08 -0700 |
commit | a6b377e3400b08991b80d6805d627f347f983866 (patch) | |
tree | 1872f302afbb6313483221d06fd9a23f782479b6 | |
parent | 02826c3e79038b59d737d3b1c0a1d937f71a4433 (diff) | |
parent | b3c0d093a31db3f4e38ae89c0401f20585dba745 (diff) | |
download | golang-groupcache-a6b377e3400b08991b80d6805d627f347f983866.tar.gz |
Merge pull request #70 from skyportsystems/perGroupPeerPicker4.1
portPicker function now takes group name
-rw-r--r-- | groupcache.go | 2 | ||||
-rw-r--r-- | peers.go | 20 |
2 files changed, 18 insertions, 4 deletions
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) Name() string { func (g *Group) initPeers() { if g.peers == nil { - g.peers = getPeers() + g.peers = getPeers(g.name) } } @@ -47,23 +47,37 @@ type NoPeers struct{} 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{} } |