mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
fix performance by changing signature of tokenizeSubjectIntoSlice
Signed-off-by: Matthias Hanel <mh@synadia.com>
This commit is contained in:
@@ -2504,8 +2504,7 @@ func (c *client) addShadowSubscriptions(acc *Account, sub *subscription) error {
|
||||
acc.mu.RLock()
|
||||
subj := string(sub.subject)
|
||||
if len(acc.imports.streams) > 0 {
|
||||
tokens = tsa[:0]
|
||||
tokenizeSubjectIntoSlice(subj, &tokens)
|
||||
tokens = tokenizeSubjectIntoSlice(tsa[:0], subj)
|
||||
for _, tk := range tokens {
|
||||
if tk == pwcs {
|
||||
hasWC = true
|
||||
@@ -2530,12 +2529,10 @@ func (c *client) addShadowSubscriptions(acc *Account, sub *subscription) error {
|
||||
}
|
||||
if tokensModified {
|
||||
// re-tokenize subj to overwrite modifications from a previous iteration
|
||||
tokens = tsa[:0]
|
||||
tokenizeSubjectIntoSlice(subj, &tokens)
|
||||
tokens = tokenizeSubjectIntoSlice(tsa[:0], subj)
|
||||
tokensModified = false
|
||||
}
|
||||
imTokens := imTsa[:0]
|
||||
tokenizeSubjectIntoSlice(im.to, &imTokens)
|
||||
imTokens := tokenizeSubjectIntoSlice(imTsa[:0], im.to)
|
||||
|
||||
if isSubsetMatchTokenized(tokens, imTokens) {
|
||||
ims = append(ims, ime{im, _EMPTY_, true})
|
||||
|
||||
@@ -1187,22 +1187,24 @@ func tokenAt(subject string, index uint8) string {
|
||||
return _EMPTY_
|
||||
}
|
||||
|
||||
func tokenizeSubjectIntoSlice(subject string, tts *[]string) {
|
||||
// use similar to append. meaning, the updated slice will be returned
|
||||
func tokenizeSubjectIntoSlice(tts []string, subject string) []string {
|
||||
start := 0
|
||||
for i := 0; i < len(subject); i++ {
|
||||
if subject[i] == btsep {
|
||||
*tts = append(*tts, subject[start:i])
|
||||
tts = append(tts, subject[start:i])
|
||||
start = i + 1
|
||||
}
|
||||
}
|
||||
*tts = append(*tts, subject[start:])
|
||||
tts = append(tts, subject[start:])
|
||||
return tts
|
||||
}
|
||||
|
||||
// Calls into the function isSubsetMatch()
|
||||
func subjectIsSubsetMatch(subject, test string) bool {
|
||||
tsa := [32]string{}
|
||||
tts := tsa[:0]
|
||||
tokenizeSubjectIntoSlice(subject, &tts)
|
||||
tts = tokenizeSubjectIntoSlice(tts, subject)
|
||||
return isSubsetMatch(tts, test)
|
||||
}
|
||||
|
||||
@@ -1211,7 +1213,7 @@ func subjectIsSubsetMatch(subject, test string) bool {
|
||||
func isSubsetMatch(tokens []string, test string) bool {
|
||||
tsa := [32]string{}
|
||||
tts := tsa[:0]
|
||||
tokenizeSubjectIntoSlice(test, &tts)
|
||||
tts = tokenizeSubjectIntoSlice(tts, test)
|
||||
return isSubsetMatchTokenized(tokens, tts)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user