44 "crypto/sha512"
55 "encoding/binary"
66 "fmt"
7- "sync"
87 "time"
98
109 "github.com/jedisct1/go-sieve-cache/pkg/sievecache"
@@ -19,8 +18,7 @@ type CachedResponse struct {
1918}
2019
2120type CachedResponses struct {
22- sync.RWMutex
23- cache * sievecache.SyncSieveCache [[32 ]byte , CachedResponse ]
21+ cache * sievecache.ShardedSieveCache [[32 ]byte , CachedResponse ]
2422}
2523
2624var cachedResponses CachedResponses
@@ -71,19 +69,15 @@ func (plugin *PluginCache) Reload() error {
7169func (plugin * PluginCache ) Eval (pluginsState * PluginsState , msg * dns.Msg ) error {
7270 cacheKey := computeCacheKey (pluginsState , msg )
7371
74- cachedResponses .RLock ()
7572 if cachedResponses .cache == nil {
76- cachedResponses .RUnlock ()
7773 return nil
7874 }
7975 cached , ok := cachedResponses .cache .Get (cacheKey )
8076 if ! ok {
81- cachedResponses .RUnlock ()
8277 return nil
8378 }
8479 expiration := cached .expiration
8580 synth := cached .msg .Copy ()
86- cachedResponses .RUnlock ()
8781
8882 synth .Id = msg .Id
8983 synth .Response = true
@@ -148,17 +142,14 @@ func (plugin *PluginCacheResponse) Eval(pluginsState *PluginsState, msg *dns.Msg
148142 expiration : time .Now ().Add (ttl ),
149143 msg : * msg ,
150144 }
151- cachedResponses .Lock ()
152145 if cachedResponses .cache == nil {
153- cache , err := sievecache.NewSync [[32 ]byte , CachedResponse ](pluginsState .cacheSize )
146+ cache , err := sievecache.NewSharded [[32 ]byte , CachedResponse ](pluginsState .cacheSize )
154147 if err != nil {
155- cachedResponses .Unlock ()
156148 return fmt .Errorf ("failed to initialize the cache: %w" , err )
157149 }
158150 cachedResponses .cache = cache
159151 }
160152 cachedResponses .cache .Insert (cacheKey , cachedResponse )
161- cachedResponses .Unlock ()
162153 updateTTL (msg , cachedResponse .expiration )
163154
164155 return nil
0 commit comments