Skip to content

Commit ee51bea

Browse files
committed
remove memcache storage support
1 parent 7eafe31 commit ee51bea

File tree

8 files changed

+19
-147
lines changed

8 files changed

+19
-147
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@ jobs:
1313
build:
1414
name: Build and test
1515
runs-on: ubuntu-latest
16-
services:
17-
memcached:
18-
image: memcached:alpine
19-
ports:
20-
- 11211:11211
2116
strategy:
2217
matrix:
2318
include:

lib/ex_limiter.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ defmodule ExLimiter do
1111
usage once configured is:
1212
1313
case ExLimiter.consume(bucket, 1, scale: 1000, limit: 5) do
14-
{:ok, bucket} -> #do some work
15-
{:error, :rate_limited} -> #fail
14+
{:ok, bucket} -> # do some work
15+
{:error, :rate_limited} -> # fail
1616
end
1717
1818
Additionally, if you want to have multiple rate limiters with diverse backend implementations,
@@ -22,5 +22,5 @@ defmodule ExLimiter do
2222
use ExLimiter.Base, storage: MyStorage
2323
end
2424
"""
25-
use ExLimiter.Base, storage: Application.compile_env(:ex_limiter, :storage, ExLimiter.Storage.Memcache)
25+
use ExLimiter.Base, storage: Application.compile_env(:ex_limiter, :storage, ExLimiter.Storage.PG2Shard)
2626
end

lib/ex_limiter/storage/memcache.ex

Lines changed: 0 additions & 102 deletions
This file was deleted.

mix.exs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule ExLimiter.Mixfile do
22
use Mix.Project
33

4-
@version "1.5.1"
4+
@version "2.0.0"
55

66
def project do
77
[
@@ -28,7 +28,6 @@ defmodule ExLimiter.Mixfile do
2828

2929
defp deps do
3030
[
31-
{:memcachir, "~> 3.3.1", [optional: true] ++ run_in_test()},
3231
{:plug, "~> 1.4"},
3332
{:libring, "~> 1.0"},
3433
{:telemetry, "~> 1.0"},
@@ -46,13 +45,6 @@ defmodule ExLimiter.Mixfile do
4645
]
4746
end
4847

49-
defp run_in_test do
50-
case Mix.env() do
51-
:test -> []
52-
_ -> [runtime: false]
53-
end
54-
end
55-
5648
defp description do
5749
"Token bucket rate limiter written in elixir with configurable backends"
5850
end

mix.lock

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
%{
2-
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
32
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
4-
"elasticachex": {:hex, :elasticachex, "1.1.3", "c5cc1255b3f25c53df16206959816824cc65e65be5be8462af069be59af63013", [:mix], [{:socket, "~> 0.3", [hex: :socket, repo: "hexpm", optional: false]}], "hexpm", "425814b1406729f2f037ff3b90755162b1d8b7fef23b3c23deac295e05cec2fc"},
53
"ex_doc": {:hex, :ex_doc, "0.39.3", "519c6bc7e84a2918b737aec7ef48b96aa4698342927d080437f61395d361dcee", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "0590955cf7ad3b625780ee1c1ea627c28a78948c6c0a9b0322bd976a079996e1"},
6-
"herd": {:hex, :herd, "0.4.3", "97469cf289c1e89a4f2b356da486ae5a354751f91c10cd3749af6aedebd9a775", [:mix], [{:libring, "~> 1.1", [hex: :libring, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm", "44bfd2c42a206431495d5103a77f52a992f4f1391a13459a9e8fd7b143cd99c9"},
74
"libring": {:hex, :libring, "1.7.0", "4f245d2f1476cd7ed8f03740f6431acba815401e40299208c7f5c640e1883bda", [:mix], [], "hexpm", "070e3593cb572e04f2c8470dd0c119bc1817a7a0a7f88229f43cf0345268ec42"},
85
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
96
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
107
"makeup_erlang": {:hex, :makeup_erlang, "1.0.3", "4252d5d4098da7415c390e847c814bad3764c94a814a0b4245176215615e1035", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "953297c02582a33411ac6208f2c6e55f0e870df7f80da724ed613f10e6706afd"},
11-
"memcachex": {:hex, :memcachex, "0.5.7", "00dc47d926eba11dfc1f2db606c37caff34d9fafd57f0adc10b49418931e77af", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:poison, "~> 2.1 or ~> 3.0 or ~> 4.0 or ~> 5.0 or ~> 6.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a75e5b712c17bc25326c03c4c1b45fae39816b6fdacce3242724c7131f210ec1"},
12-
"memcachir": {:hex, :memcachir, "3.3.1", "2099fd7d518b58172b417f932f9590e3fd3e11deb811c2a3a252605751af6aa7", [:mix], [{:elasticachex, "~> 1.1", [hex: :elasticachex, repo: "hexpm", optional: false]}, {:herd, "~> 0.4.3", [hex: :herd, repo: "hexpm", optional: false]}, {:memcachex, "~> 0.5", [hex: :memcachex, repo: "hexpm", optional: false]}], "hexpm", "526536e9585820894381a643aa3042f7f84e25e986e3c90f413fe0896f8bb513"},
138
"mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"},
149
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
1510
"plug": {:hex, :plug, "1.19.1", "09bac17ae7a001a68ae393658aa23c7e38782be5c5c00c80be82901262c394c0", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "560a0017a8f6d5d30146916862aaf9300b7280063651dd7e532b8be168511e62"},
1611
"plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"},
17-
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},
18-
"socket": {:hex, :socket, "0.3.13", "98a2ab20ce17f95fb512c5cadddba32b57273e0d2dba2d2e5f976c5969d0c632", [:mix], [], "hexpm", "f82ea9833ef49dde272e6568ab8aac657a636acb4cf44a7de8a935acb8957c2e"},
1912
"styler": {:hex, :styler, "1.10.1", "9229050c978bfaaab1d94e8673843576d0127d48fe64824a30babde3d6342475", [:mix], [], "hexpm", "d86cbcc70e8ab424393af313d1d885931ba9dc7c383d7dd30f4ab255a8d39f73"},
2013
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
2114
}

test/ex_limiter/plug_test.exs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ defmodule ExLimiter.PlugTest do
4747
%{ex_limiter: %{bucket_name: bucket_name, bucket_version: bucket_version}} = conn.assigns
4848

4949
assert String.ends_with?(bucket_name, "127.0.0.1")
50-
assert bucket_version == %{last: 0, value: 0}
50+
assert %{last: _, value: _} = bucket_version
5151
end
5252

5353
test "it will decorate a connection on error", %{limiter: config, conn: conn} do
@@ -61,14 +61,14 @@ defmodule ExLimiter.PlugTest do
6161

6262
assert String.ends_with?(bucket_name, "127.0.0.1")
6363
end
64-
end
6564

66-
defp decorate(conn, {:ok, %{key: bucket_name, version: bucket_version}}) do
67-
assign(conn, :ex_limiter, %{bucket_name: bucket_name, bucket_version: bucket_version})
68-
end
65+
defp decorate(conn, {:ok, %{key: bucket_name, value: value, last: last}}) do
66+
assign(conn, :ex_limiter, %{bucket_name: bucket_name, bucket_version: %{last: last, value: value}})
67+
end
6968

70-
defp decorate(conn, {:rate_limited, bucket_name}) do
71-
assign(conn, :ex_limiter, %{bucket_name: bucket_name})
69+
defp decorate(conn, {:rate_limited, bucket_name}) do
70+
assign(conn, :ex_limiter, %{bucket_name: bucket_name})
71+
end
7272
end
7373

7474
defp setup_conn(_) do
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,44 @@
11
defmodule ExLimiter.Storage.PG2ShardTest do
22
use ExLimiter.DataCase, async: false
33

4-
alias ExLimiter.PG2Limiter
5-
64
setup do
75
{:ok, bucket_name: bucket_name()}
86
end
97

108
describe "#consume" do
119
test "it will rate limit", %{bucket_name: bucket_name} do
12-
{:ok, bucket} = PG2Limiter.consume(bucket_name, 1)
10+
{:ok, bucket} = ExLimiter.consume(bucket_name, 1)
1311

1412
assert bucket.key == bucket_name
1513
assert bucket.value >= 100
1614

17-
{:ok, bucket} = PG2Limiter.consume(bucket_name, 5)
15+
{:ok, bucket} = ExLimiter.consume(bucket_name, 5)
1816

1917
assert bucket.value >= 500
2018

21-
{:error, :rate_limited} = PG2Limiter.consume(bucket_name, 6)
19+
{:error, :rate_limited} = ExLimiter.consume(bucket_name, 6)
2220
end
2321
end
2422

2523
describe "#delete" do
2624
test "It will wipe a bucket", %{bucket_name: bucket_name} do
27-
{:ok, bucket} = PG2Limiter.consume(bucket_name, 5)
25+
{:ok, bucket} = ExLimiter.consume(bucket_name, 5)
2826

2927
assert bucket.value >= 500
3028

31-
PG2Limiter.delete(bucket_name)
29+
ExLimiter.delete(bucket_name)
3230

33-
{:ok, bucket} = PG2Limiter.consume(bucket_name, 1)
31+
{:ok, bucket} = ExLimiter.consume(bucket_name, 1)
3432

3533
assert bucket.value <= 500
3634
end
3735
end
3836

3937
describe "#remaining" do
4038
test "It will properly deconvert the remaining capacity in a bucket", %{bucket_name: bucket_name} do
41-
{:ok, bucket} = PG2Limiter.consume(bucket_name, 5)
39+
{:ok, bucket} = ExLimiter.consume(bucket_name, 5)
4240

43-
assert PG2Limiter.remaining(bucket) == 5
41+
assert ExLimiter.remaining(bucket) == 5
4442
end
4543
end
4644
end

test/support/pg2_limiter.ex

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)