aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-09-05 22:07:35 +0200
committerMartin Polden <mpolden@mpolden.no>2020-09-05 22:07:57 +0200
commit971c0e11f4023ad2c9b1e080e34d28e5276cb89b (patch)
treed132aeeb5194cdebf403930a7bee423afa111620
parent6878f5458599b0eab5dc1083843fd37f00ef694f (diff)
cache: Copy values
-rw-r--r--http/cache.go8
-rw-r--r--http/cache_test.go20
-rw-r--r--http/http.go11
3 files changed, 12 insertions, 27 deletions
diff --git a/http/cache.go b/http/cache.go
index 6b68dfb..b21dcb7 100644
--- a/http/cache.go
+++ b/http/cache.go
@@ -9,7 +9,7 @@ import (
type Cache struct {
capacity int
mu sync.RWMutex
- entries map[uint64]*Response
+ entries map[uint64]Response
keys []uint64
}
@@ -19,7 +19,7 @@ func NewCache(capacity int) *Cache {
}
return &Cache{
capacity: capacity,
- entries: make(map[uint64]*Response),
+ entries: make(map[uint64]Response),
keys: make([]uint64, 0, capacity),
}
}
@@ -30,7 +30,7 @@ func key(ip net.IP) uint64 {
return h.Sum64()
}
-func (c *Cache) Set(ip net.IP, resp *Response) {
+func (c *Cache) Set(ip net.IP, resp Response) {
if c.capacity == 0 {
return
}
@@ -45,7 +45,7 @@ func (c *Cache) Set(ip net.IP, resp *Response) {
c.keys = append(c.keys, k)
}
-func (c *Cache) Get(ip net.IP) (*Response, bool) {
+func (c *Cache) Get(ip net.IP) (Response, bool) {
k := key(ip)
c.mu.RLock()
defer c.mu.RUnlock()
diff --git a/http/cache_test.go b/http/cache_test.go
index dd16e2b..1020750 100644
--- a/http/cache_test.go
+++ b/http/cache_test.go
@@ -4,24 +4,8 @@ import (
"fmt"
"net"
"testing"
- "unsafe"
)
-func TestCache(t *testing.T) {
-
- c := NewCache(10)
-
- for i := 0; i < 100; i++ {
- ip := net.ParseIP(fmt.Sprintf("192.0.2.%d", i))
- r := &Response{IP: ip}
- fmt.Println(unsafe.Sizeof(r))
- c.Set(ip, r)
- }
-
- fmt.Println(len(c.entries))
- fmt.Println(len(c.keys))
-}
-
func TestCacheCapacity(t *testing.T) {
var tests = []struct {
addCount, capacity, size int
@@ -33,10 +17,10 @@ func TestCacheCapacity(t *testing.T) {
}
for i, tt := range tests {
c := NewCache(tt.capacity)
- var responses []*Response
+ var responses []Response
for i := 0; i < tt.addCount; i++ {
ip := net.ParseIP(fmt.Sprintf("192.0.2.%d", i))
- r := &Response{IP: ip}
+ r := Response{IP: ip}
responses = append(responses, r)
c.Set(ip, r)
}
diff --git a/http/http.go b/http/http.go
index 0f1f65d..c41ef65 100644
--- a/http/http.go
+++ b/http/http.go
@@ -7,10 +7,11 @@ import (
"path/filepath"
"strings"
+ "net/http/pprof"
+
"github.com/mpolden/echoip/iputil"
"github.com/mpolden/echoip/iputil/geo"
"github.com/mpolden/echoip/useragent"
- "net/http/pprof"
"math/big"
"net"
@@ -125,9 +126,9 @@ func (s *Server) newResponse(r *http.Request) (Response, error) {
}
response, ok := s.cache.Get(ip)
if ok {
- // Not Caching the userAgent as it can vary for a given IP
+ // Do not cache user agent
response.UserAgent = userAgentFromRequest(r)
- return *response, nil
+ return response, nil
}
ipDecimal := iputil.ToDecimal(ip)
country, _ := s.gr.Country(ip)
@@ -141,7 +142,7 @@ func (s *Server) newResponse(r *http.Request) (Response, error) {
if asn.AutonomousSystemNumber > 0 {
autonomousSystemNumber = fmt.Sprintf("AS%d", asn.AutonomousSystemNumber)
}
- response = &Response{
+ response = Response{
IP: ip,
IPDecimal: ipDecimal,
Country: country.Name,
@@ -161,7 +162,7 @@ func (s *Server) newResponse(r *http.Request) (Response, error) {
}
s.cache.Set(ip, response)
response.UserAgent = userAgentFromRequest(r)
- return *response, nil
+ return response, nil
}
func (s *Server) newPortResponse(r *http.Request) (PortResponse, error) {