mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
Merge pull request #3768 from nats-io/neil/sublistptrs
Deduplicate `*subscription` in `Sublist`
This commit is contained in:
@@ -84,8 +84,8 @@ type notifyMaps struct {
|
|||||||
// A node contains subscriptions and a pointer to the next level.
|
// A node contains subscriptions and a pointer to the next level.
|
||||||
type node struct {
|
type node struct {
|
||||||
next *level
|
next *level
|
||||||
psubs map[*subscription]*subscription
|
psubs map[*subscription]struct{}
|
||||||
qsubs map[string](map[*subscription]*subscription)
|
qsubs map[string]map[*subscription]struct{}
|
||||||
plist []*subscription
|
plist []*subscription
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ type level struct {
|
|||||||
|
|
||||||
// Create a new default node.
|
// Create a new default node.
|
||||||
func newNode() *node {
|
func newNode() *node {
|
||||||
return &node{psubs: make(map[*subscription]*subscription)}
|
return &node{psubs: make(map[*subscription]struct{})}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new default level.
|
// Create a new default level.
|
||||||
@@ -413,30 +413,30 @@ func (s *Sublist) Insert(sub *subscription) error {
|
|||||||
l = n.next
|
l = n.next
|
||||||
}
|
}
|
||||||
if sub.queue == nil {
|
if sub.queue == nil {
|
||||||
n.psubs[sub] = sub
|
n.psubs[sub] = struct{}{}
|
||||||
isnew = len(n.psubs) == 1
|
isnew = len(n.psubs) == 1
|
||||||
if n.plist != nil {
|
if n.plist != nil {
|
||||||
n.plist = append(n.plist, sub)
|
n.plist = append(n.plist, sub)
|
||||||
} else if len(n.psubs) > plistMin {
|
} else if len(n.psubs) > plistMin {
|
||||||
n.plist = make([]*subscription, 0, len(n.psubs))
|
n.plist = make([]*subscription, 0, len(n.psubs))
|
||||||
// Populate
|
// Populate
|
||||||
for _, psub := range n.psubs {
|
for psub := range n.psubs {
|
||||||
n.plist = append(n.plist, psub)
|
n.plist = append(n.plist, psub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if n.qsubs == nil {
|
if n.qsubs == nil {
|
||||||
n.qsubs = make(map[string]map[*subscription]*subscription)
|
n.qsubs = make(map[string]map[*subscription]struct{})
|
||||||
}
|
}
|
||||||
qname := string(sub.queue)
|
qname := string(sub.queue)
|
||||||
// This is a queue subscription
|
// This is a queue subscription
|
||||||
subs, ok := n.qsubs[qname]
|
subs, ok := n.qsubs[qname]
|
||||||
if !ok {
|
if !ok {
|
||||||
subs = make(map[*subscription]*subscription)
|
subs = make(map[*subscription]struct{})
|
||||||
n.qsubs[qname] = subs
|
n.qsubs[qname] = subs
|
||||||
isnew = true
|
isnew = true
|
||||||
}
|
}
|
||||||
subs[sub] = sub
|
subs[sub] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.count++
|
s.count++
|
||||||
@@ -636,7 +636,7 @@ func addNodeToResults(n *node, results *SublistResult) {
|
|||||||
if n.plist != nil {
|
if n.plist != nil {
|
||||||
results.psubs = append(results.psubs, n.plist...)
|
results.psubs = append(results.psubs, n.plist...)
|
||||||
} else {
|
} else {
|
||||||
for _, psub := range n.psubs {
|
for psub := range n.psubs {
|
||||||
results.psubs = append(results.psubs, psub)
|
results.psubs = append(results.psubs, psub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -652,7 +652,7 @@ func addNodeToResults(n *node, results *SublistResult) {
|
|||||||
nqsub := make([]*subscription, 0, len(qr))
|
nqsub := make([]*subscription, 0, len(qr))
|
||||||
results.qsubs = append(results.qsubs, nqsub)
|
results.qsubs = append(results.qsubs, nqsub)
|
||||||
}
|
}
|
||||||
for _, sub := range qr {
|
for sub := range qr {
|
||||||
if isRemoteQSub(sub) {
|
if isRemoteQSub(sub) {
|
||||||
ns := atomic.LoadInt32(&sub.qw)
|
ns := atomic.LoadInt32(&sub.qw)
|
||||||
// Shadow these subscriptions
|
// Shadow these subscriptions
|
||||||
@@ -1435,13 +1435,13 @@ func (s *Sublist) addNodeToSubs(n *node, subs *[]*subscription, includeLeafHubs
|
|||||||
addLocalSub(sub, subs, includeLeafHubs)
|
addLocalSub(sub, subs, includeLeafHubs)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, sub := range n.psubs {
|
for sub := range n.psubs {
|
||||||
addLocalSub(sub, subs, includeLeafHubs)
|
addLocalSub(sub, subs, includeLeafHubs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Queue subscriptions
|
// Queue subscriptions
|
||||||
for _, qr := range n.qsubs {
|
for _, qr := range n.qsubs {
|
||||||
for _, sub := range qr {
|
for sub := range qr {
|
||||||
addLocalSub(sub, subs, includeLeafHubs)
|
addLocalSub(sub, subs, includeLeafHubs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1481,13 +1481,13 @@ func (s *Sublist) addAllNodeToSubs(n *node, subs *[]*subscription) {
|
|||||||
if n.plist != nil {
|
if n.plist != nil {
|
||||||
*subs = append(*subs, n.plist...)
|
*subs = append(*subs, n.plist...)
|
||||||
} else {
|
} else {
|
||||||
for _, sub := range n.psubs {
|
for sub := range n.psubs {
|
||||||
*subs = append(*subs, sub)
|
*subs = append(*subs, sub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Queue subscriptions
|
// Queue subscriptions
|
||||||
for _, qr := range n.qsubs {
|
for _, qr := range n.qsubs {
|
||||||
for _, sub := range qr {
|
for sub := range qr {
|
||||||
*subs = append(*subs, sub)
|
*subs = append(*subs, sub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user