synced with master
This commit is contained in:
commit
6a69a035a7
|
@ -5,6 +5,11 @@
|
||||||
- Fixed typo in `Record.WithUnkownData()` -> `Record.WithUnknownData()`.
|
- Fixed typo in `Record.WithUnkownData()` -> `Record.WithUnknownData()`.
|
||||||
|
|
||||||
|
|
||||||
|
## v0.14.4
|
||||||
|
|
||||||
|
- Fixed concurrent map write pannic on `list.ExistInSliceWithRegex()` cache ([#2272](https://github.com/pocketbase/pocketbase/issues/2272)).
|
||||||
|
|
||||||
|
|
||||||
## v0.14.3
|
## v0.14.3
|
||||||
|
|
||||||
- Fixed Admin UI Logs `meta` visualization in Firefox ([#2221](https://github.com/pocketbase/pocketbase/issues/2221)).
|
- Fixed Admin UI Logs `meta` visualization in Firefox ([#2221](https://github.com/pocketbase/pocketbase/issues/2221)).
|
||||||
|
|
|
@ -5,10 +5,11 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/pocketbase/pocketbase/tools/store"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cachedPatterns = map[string]*regexp.Regexp{}
|
var cachedPatterns = store.New[*regexp.Regexp](nil)
|
||||||
|
|
||||||
// SubtractSlice returns a new slice with only the "base" elements
|
// SubtractSlice returns a new slice with only the "base" elements
|
||||||
// that don't exist in "subtract".
|
// that don't exist in "subtract".
|
||||||
|
@ -56,15 +57,18 @@ func ExistInSliceWithRegex(str string, list []string) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for regex match
|
// check for regex match
|
||||||
pattern, ok := cachedPatterns[field]
|
pattern := cachedPatterns.Get(field)
|
||||||
if !ok {
|
if pattern == nil {
|
||||||
var err error
|
var err error
|
||||||
pattern, err = regexp.Compile(field)
|
pattern, err = regexp.Compile(field)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// "cache" the pattern to avoid compiling it every time
|
// "cache" the pattern to avoid compiling it every time
|
||||||
cachedPatterns[field] = pattern
|
// (the limit size is arbitrary and it is there to prevent the cache growing too big)
|
||||||
|
//
|
||||||
|
// @todo consider replacing with TTL or LRU type cache
|
||||||
|
cachedPatterns.SetIfLessThanLimit(field, pattern, 5000)
|
||||||
}
|
}
|
||||||
|
|
||||||
if pattern != nil && pattern.MatchString(str) {
|
if pattern != nil && pattern.MatchString(str) {
|
||||||
|
|
Loading…
Reference in New Issue