From ae479adeaac0d305e3ae608389411dd7e7fff7a7 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 11 Nov 2019 16:05:19 +0300 Subject: [PATCH] Use fastcache instead of ristretto --- antireplay/cache.go | 22 ++++++++++------------ antireplay/init.go | 18 ++---------------- config/config.go | 4 ++-- go.mod | 2 +- go.sum | 17 +++++++++++++---- 5 files changed, 28 insertions(+), 35 deletions(-) diff --git a/antireplay/cache.go b/antireplay/cache.go index 72ca30e..9eb08ab 100644 --- a/antireplay/cache.go +++ b/antireplay/cache.go @@ -1,6 +1,6 @@ package antireplay -import "github.com/dgraph-io/ristretto" +import "github.com/VictoriaMetrics/fastcache" var ( prefixObfuscated2 = []byte{0x00} @@ -8,31 +8,29 @@ var ( ) type cache struct { - data *ristretto.Cache + data *fastcache.Cache } func (c *cache) AddObfuscated2(data []byte) { - c.data.Set(keyObfuscated2(data), nil, int64(len(data))) + c.data.Set(keyObfuscated2(data), nil) } func (c *cache) AddTLS(data []byte) { - c.data.Set(keyTLS(data), nil, int64(len(data))) + c.data.Set(keyTLS(data), nil) } func (c *cache) HasObfuscated2(data []byte) bool { - _, ok := c.data.Get(keyObfuscated2(data)) - return ok + return c.data.Has(keyObfuscated2(data)) } func (c *cache) HasTLS(data []byte) bool { - _, ok := c.data.Get(keyTLS(data)) - return ok + return c.data.Has(keyTLS(data)) } -func keyObfuscated2(data []byte) string { - return string(append(prefixObfuscated2, data...)) +func keyObfuscated2(data []byte) []byte { + return append(prefixObfuscated2, data...) } -func keyTLS(data []byte) string { - return string(append(prefixTLS, data...)) +func keyTLS(data []byte) []byte { + return append(prefixTLS, data...) } diff --git a/antireplay/init.go b/antireplay/init.go index a89ea89..ccde75b 100644 --- a/antireplay/init.go +++ b/antireplay/init.go @@ -1,10 +1,9 @@ package antireplay import ( - "math" "sync" - "github.com/dgraph-io/ristretto" + "github.com/VictoriaMetrics/fastcache" "mtg/config" ) @@ -16,19 +15,6 @@ var ( func Init() { initOnce.Do(func() { - cost := float64(config.C.AntiReplayMaxSize) / 32.0 - cost = math.Ceil(cost) - - c, err := ristretto.NewCache(&ristretto.Config{ - NumCounters: int64(cost) * 10, - MaxCost: config.C.AntiReplayMaxSize, - BufferItems: 64, - Metrics: false, - }) - if err != nil { - panic(err) - } - - Cache.data = c + Cache.data = fastcache.New(config.C.AntiReplayMaxSize) }) } diff --git a/config/config.go b/config/config.go index 868b467..7db0e6e 100644 --- a/config/config.go +++ b/config/config.go @@ -80,7 +80,7 @@ type Config struct { ReadBuffer int `json:"read_buffer"` CloakPort int `json:"cloak_port"` - AntiReplayMaxSize int64 `json:"anti_replay_max_size"` + AntiReplayMaxSize int `json:"anti_replay_max_size"` MultiplexPerConnection int `json:"multiplex_per_connection"` @@ -152,7 +152,7 @@ func Init(options ...Opt) error { // nolint: gocyclo, funlen case OptionTypeCloakPort: C.CloakPort = int(opt.Value.(uint16)) case OptionTypeAntiReplayMaxSize: - C.AntiReplayMaxSize = int64(opt.Value.(units.Base2Bytes)) + C.AntiReplayMaxSize = int(opt.Value.(units.Base2Bytes)) case OptionTypeMultiplexPerConnection: C.MultiplexPerConnection = int(opt.Value.(uint)) case OptionTypeSecret: diff --git a/go.mod b/go.mod index a2f6aad..901f250 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module mtg go 1.13 require ( + github.com/VictoriaMetrics/fastcache v1.5.2 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d github.com/beevik/ntp v0.2.0 - github.com/dgraph-io/ristretto v0.0.0-20191108194154-8d6a8a75b4ca github.com/prometheus/client_golang v1.2.1 go.uber.org/multierr v1.4.0 // indirect go.uber.org/zap v1.12.0 diff --git a/go.sum b/go.sum index c8c3fad..3b89cb0 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,9 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/VictoriaMetrics/fastcache v1.5.2 h1:Erd8iIuBAL9kke8JzM4+WxkKuFkHh3ktwLanJvDgR44= +github.com/VictoriaMetrics/fastcache v1.5.2/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= @@ -10,6 +14,8 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1C github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/beevik/ntp v0.2.0 h1:sGsd+kAXzT0bfVfzJfce04g+dSRfrs+tbQW8lweuYgw= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= @@ -18,15 +24,14 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.0.0-20191108194154-8d6a8a75b4ca h1:NgFAOh7RDM5WbdADm6VyLG1koLrzG0G24M/f5395PcI= -github.com/dgraph-io/ristretto v0.0.0-20191108194154-8d6a8a75b4ca/go.mod h1:edzKIzGvqUCMzhTVWbiTSe75zD9Xxq0GtSBtFmaUTZs= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -40,6 +45,8 @@ github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -91,6 +98,8 @@ github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=