Skip to content

Commit 6146c2c

Browse files
author
Pablo Lopez
committed
Using ehttpc insteaf of lhttpc
1 parent b097592 commit 6146c2c

File tree

10 files changed

+55
-96
lines changed

10 files changed

+55
-96
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ to override the context values with configured ones.
1111

1212
You can start an erl with:
1313

14-
$ erl -pa ebin -pa deps/*/ebin -s inets -s crypto -s ssl -s hackney -config development -s kinetic
14+
$ erl -pa ebin -pa deps/*/ebin -s inets -s crypto -s ssl -s ehttpc -config development -s kinetic
1515
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
1616

1717
Eshell V5.10.4 (abort with ^G)

include/kinetic.hrl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@
77
date :: undefined | string(),
88
host :: undefined | string(),
99
url :: undefined | string(),
10-
hackney_opts = [] :: [any()],
1110
timeout :: undefined | pos_integer(),
1211
aws_credentials}).

rebar.config

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515

1616
{cover_print_enabled, true}.
1717

18-
{deps, [{hackney, "1.24.1"}, {jiffy, "1.1.1"}, {erliam, "1.0.1"}, {b64fast, "0.2.3"}]}.
18+
{deps,
19+
[{jiffy, "1.1.1"},
20+
{erliam, "1.0.1"},
21+
{b64fast, "0.2.3"},
22+
{ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.7.1"}}}]}.
1923

2024
{xref_checks,
2125
[undefined_function_calls,

rebar.lock

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,32 @@
11
{"1.2.0",
22
[{<<"b64fast">>,{pkg,<<"b64fast">>,<<"0.2.3">>},0},
3-
{<<"certifi">>,{pkg,<<"certifi">>,<<"2.15.0">>},1},
3+
{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.13.0">>},2},
4+
{<<"ehttpc">>,
5+
{git,"https://github.com/emqx/ehttpc",
6+
{ref,"c18e5efacde5556bb8bf86b1bc1e35a85a67928d"}},
7+
0},
48
{<<"erliam">>,{pkg,<<"erliam">>,<<"1.0.1">>},0},
5-
{<<"hackney">>,{pkg,<<"hackney">>,<<"1.24.1">>},0},
6-
{<<"idna">>,{pkg,<<"idna">>,<<"6.1.1">>},1},
9+
{<<"gproc">>,
10+
{git,"https://github.com/emqx/gproc",
11+
{ref,"21a5995812498969bb5e47b520b47ea7c514f16b"}},
12+
1},
13+
{<<"gun">>,{pkg,<<"gun">>,<<"2.1.0">>},1},
714
{<<"jiffy">>,{pkg,<<"jiffy">>,<<"1.1.1">>},0},
8-
{<<"metrics">>,{pkg,<<"metrics">>,<<"1.0.1">>},1},
9-
{<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.4.0">>},1},
10-
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.4.1">>},1},
11-
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.7">>},1},
12-
{<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.7.1">>},1}]}.
15+
{<<"snabbkaffe">>,
16+
{git,"https://github.com/kafka4beam/snabbkaffe.git",
17+
{ref,"b59298334ed349556f63405d1353184c63c66534"}},
18+
1}]}.
1319
[
1420
{pkg_hash,[
1521
{<<"b64fast">>, <<"07649CF971A0ED088DEFC4F75767A52E08C468CC1D448693F4FB3051092AB987">>},
16-
{<<"certifi">>, <<"0E6E882FCDAAA0A5A9F2B3DB55B1394DBA07E8D6D9BCAD08318FB604C6839712">>},
22+
{<<"cowlib">>, <<"DB8F7505D8332D98EF50A3EF34B34C1AFDDEC7506E4EE4DD4A3A266285D282CA">>},
1723
{<<"erliam">>, <<"20E1ECB876AFDEEC2DE07483E2D174B1E3DB38848ED981145DAB9A889E7B55F9">>},
18-
{<<"hackney">>, <<"F5205A125BBA6ED4587F9DB3CC7C729D11316FA8F215D3E57ED1C067A9703FA9">>},
19-
{<<"idna">>, <<"8A63070E9F7D0C62EB9D9FCB360A7DE382448200FBBD1B106CC96D3D8099DF8D">>},
20-
{<<"jiffy">>, <<"ACA10F47AA91697BF24AB9582C74E00E8E95474C7EF9F76D4F1A338D0F5DE21B">>},
21-
{<<"metrics">>, <<"25F094DEA2CDA98213CECC3AEFF09E940299D950904393B2A29D191C346A8486">>},
22-
{<<"mimerl">>, <<"3882A5CA67FBBE7117BA8947F27643557ADEC38FA2307490C4C4207624CB213B">>},
23-
{<<"parse_trans">>, <<"6E6AA8167CB44CC8F39441D05193BE6E6F4E7C2946CB2759F015F8C56B76E5FF">>},
24-
{<<"ssl_verify_fun">>, <<"354C321CF377240C7B8716899E182CE4890C5938111A1296ADD3EC74CF1715DF">>},
25-
{<<"unicode_util_compat">>, <<"A48703A25C170EEDADCA83B11E88985AF08D35F37C6F664D6DCFB106A97782FC">>}]},
24+
{<<"gun">>, <<"B4E4CBBF3026D21981C447E9E7CA856766046EFF693720BA43114D7F5DE36E87">>},
25+
{<<"jiffy">>, <<"ACA10F47AA91697BF24AB9582C74E00E8E95474C7EF9F76D4F1A338D0F5DE21B">>}]},
2626
{pkg_hash_ext,[
2727
{<<"b64fast">>, <<"DE874B5302D607840B787E93785628035FF55334EBCFAFB6413B735983913D23">>},
28-
{<<"certifi">>, <<"B147ED22CE71D72EAFDAD94F055165C1C182F61A2FF49DF28BCC71D1D5B94A60">>},
28+
{<<"cowlib">>, <<"E1E1284DC3FC030A64B1AD0D8382AE7E99DA46C3246B815318A4B848873800A4">>},
2929
{<<"erliam">>, <<"2EE375544AC36711BEEB5EC56DB060488447CECC308763BC8B4A4FEE894AAF76">>},
30-
{<<"hackney">>, <<"F4A7392A0B53D8BBC3EB855BDCC919CD677358E65B2AFD3840B5B3690C4C8A39">>},
31-
{<<"idna">>, <<"92376EB7894412ED19AC475E4A86F7B413C1B9FBB5BD16DCCD57934157944CEA">>},
32-
{<<"jiffy">>, <<"62E1F0581C3C19C33A725C781DFA88410D8BFF1BBAFC3885A2552286B4785C4C">>},
33-
{<<"metrics">>, <<"69B09ADDDC4F74A40716AE54D140F93BEB0FB8978D8636EADED0C31B6F099F16">>},
34-
{<<"mimerl">>, <<"13AF15F9F68C65884ECCA3A3891D50A7B57D82152792F3E19D88650AA126B144">>},
35-
{<<"parse_trans">>, <<"620A406CE75DADA827B82E453C19CF06776BE266F5A67CFF34E1EF2CBB60E49A">>},
36-
{<<"ssl_verify_fun">>, <<"FE4C190E8F37401D30167C8C405EDA19469F34577987C76DDE613E838BBC67F8">>},
37-
{<<"unicode_util_compat">>, <<"B3A917854CE3AE233619744AD1E0102E05673136776FB2FA76234F3E03B23642">>}]}
30+
{<<"gun">>, <<"52FC7FC246BFC3B00E01AEA1C2854C70A366348574AB50C57DFE796D24A0101D">>},
31+
{<<"jiffy">>, <<"62E1F0581C3C19C33A725C781DFA88410D8BFF1BBAFC3885A2552286B4785C4C">>}]}
3832
].

src/kinetic.app.src

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
{vsn, git},
55
{modules, []},
66
{registered, [kinetic_config]},
7-
{applications, [kernel, stdlib, inets, crypto, ssl, jiffy, hackney, erliam]},
7+
{applications, [kernel, stdlib, inets, crypto, ssl, jiffy, ehttpc, erliam]},
88
{env, [{args, []}]},
99
{mod, {kinetic, []}},
1010
{licenses, ["BSD-3-Clause"]}]}.

src/kinetic.erl

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
-include("kinetic.hrl").
2323

24-
-define(HACKNEY_POOL, kinetic_pool).
24+
-define(EHTTPC_POOL, kinetic_pool).
2525

2626
% application behaviour
2727

@@ -44,7 +44,7 @@ start(_, Opts) ->
4444

4545
-spec stop(any()) -> ok.
4646
stop(_) ->
47-
hackney_pool:stop_pool(?HACKNEY_POOL),
47+
ehttpc_sup:stop_pool(?EHTTPC_POOL),
4848
ok.
4949

5050
% Public API
@@ -259,7 +259,6 @@ execute(Operation, Payload, Opts) ->
259259
date = Date,
260260
url = Url,
261261
host = Host,
262-
hackney_opts = HackneyOpts,
263262
timeout = Timeout} =
264263
kinetic_config:merge_args(Args, Opts),
265264
case kinetic_utils:encode({Payload}) of
@@ -283,12 +282,8 @@ execute(Operation, Payload, Opts) ->
283282
signed_headers => SignedHeaders,
284283
aws_date => Date},
285284
iolist_to_binary(Body))],
286-
case hackney:post(Url,
287-
Headers,
288-
Body,
289-
[{pool, ?HACKNEY_POOL}, with_body, {recv_timeout, Timeout}
290-
| HackneyOpts])
291-
of
285+
Worker = ehttpc_pool:pick_worker(?EHTTPC_POOL),
286+
case ehttpc:request(Worker, post, {Url, Headers, Body}, Timeout) of
292287
{ok, 200, _, ResponseBody} ->
293288
{ok, kinetic_utils:decode(ResponseBody)};
294289
{ok, Code, RespHeaders, ResponseBody} ->
@@ -312,5 +307,5 @@ get_value(Key, TupleList) ->
312307
Value.
313308

314309
start_pool() ->
315-
MaxConnections = application:get_env(?MODULE, max_connections, 100),
316-
hackney_pool:start_pool(?HACKNEY_POOL, [{max_connections, MaxConnections}]).
310+
PoolSize = application:get_env(?MODULE, pool_size, 100),
311+
ehttpc_sup:start_pool(?EHTTPC_POOL, [{pool_size, PoolSize}]).

src/kinetic_config.erl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ new_args(Opts) ->
108108
R
109109
end,
110110

111-
HackneyOpts = proplists:get_value(hackney_opts, Opts, []),
112111
DefaultTimeout = proplists:get_value(timeout, Opts, 5000),
113112
Host = kinetic_utils:endpoint("kinesis", Region),
114113
Url = "https://" ++ Host,
@@ -133,7 +132,6 @@ new_args(Opts) ->
133132
date = awsv4:isonow(),
134133
host = Host,
135134
url = Url,
136-
hackney_opts = HackneyOpts,
137135
timeout = DefaultTimeout,
138136
aws_credentials = erliam:credentials()}.
139137

test/kinetic_config_tests.erl

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,11 @@ test_passed_metadata() ->
6969
kinetic_config:start_link([{aws_access_key_id, "whatever"},
7070
{aws_secret_access_key, "secret"}]),
7171
?assert(ets:info(?KINETIC_STREAM) =/= undefined),
72-
{ok,
73-
#kinetic_arguments{aws_credentials = fake_creds,
74-
region = "us-east-1",
75-
hackney_opts = []}} =
72+
{ok, #kinetic_arguments{aws_credentials = fake_creds, region = "us-east-1"}} =
7673
kinetic_config:get_args(),
7774
kinetic_config:update_data([{aws_access_key_id, "whatever"},
7875
{aws_secret_access_key, "secret"}]),
79-
{ok,
80-
#kinetic_arguments{aws_credentials = fake_creds,
81-
region = "us-east-1",
82-
hackney_opts = []}} =
76+
{ok, #kinetic_arguments{aws_credentials = fake_creds, region = "us-east-1"}} =
8377
kinetic_config:get_args(),
8478
kinetic_config:stop(),
8579
{error, _} = kinetic_config:get_args(),

test/kinetic_sup_tests.erl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ test_supervisor() ->
2525
{ok, Pid} =
2626
kinetic_sup:start_link([{aws_access_key_id, "whatever"},
2727
{aws_secret_access_key, "secret"}]),
28-
{ok,
29-
#kinetic_arguments{aws_credentials = fake_creds,
30-
region = "us-east-1",
31-
hackney_opts = []}} =
28+
{ok, #kinetic_arguments{aws_credentials = fake_creds, region = "us-east-1"}} =
3229
kinetic_config:get_args(),
3330

3431
kinetic_sup:stop(Pid),

test/kinetic_tests.erl

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,26 @@ test_arg_setup(Opts) ->
2424

2525
{ok, _args} = kinetic_config:update_data(Opts),
2626

27-
meck:new(hackney),
28-
meck:expect(hackney,
29-
post,
30-
fun (_Url, _Headers, _Body, [_, _, _, error]) ->
31-
{ok, 400, headers, body};
32-
(_Url, _Headers, _Body, _Opts) ->
33-
{ok, 200, headers, <<"{\"hello\": \"world\"}">>}
27+
meck:new(ehttpc),
28+
meck:expect(ehttpc_pool, pick_worker, fun(_PoolName) -> worker end),
29+
meck:expect(ehttpc,
30+
request,
31+
fun(_Worker, post, {_Url, _Headers, _Body}, _Timeout) ->
32+
{ok, 200, headers, <<"{\"hello\": \"world\"}">>}
3433
end).
3534

3635
test_setup() ->
3736
Opts = [{aws_access_key_id, "whatever"}, {aws_secret_access_key, "secret"}],
3837
test_arg_setup(Opts).
3938

4039
test_error_setup() ->
41-
Opts =
42-
[{aws_access_key_id, "whatever"},
43-
{aws_secret_access_key, "secret"},
44-
{hackney_opts, [error]}],
40+
Opts = [{aws_access_key_id, "whatever"}, {aws_secret_access_key, "secret"}],
4541
test_arg_setup(Opts).
4642

4743
test_teardown(_) ->
4844
ets:delete(?KINETIC_DATA),
4945
meck:unload(imds),
50-
meck:unload(hackney),
46+
meck:unload(ehttpc),
5147
meck:unload(erliam),
5248
application:stop(ssl).
5349

@@ -94,23 +90,6 @@ test_normal_functions() ->
9490
split_shard]).
9591

9692
test_error_functions() ->
97-
{ok, _args} =
98-
kinetic_config:update_data([{aws_access_key_id, "whatever"},
99-
{aws_secret_access_key, "secret"},
100-
{hackney_opts, [error]}]),
101-
lists:foreach(fun(F) ->
102-
[{error, {400, headers, body}} = erlang:apply(kinetic, F, Args)
103-
|| Args <- sample_arglists([])]
104-
end,
105-
[create_stream,
106-
delete_stream,
107-
describe_stream,
108-
get_records,
109-
get_shard_iterator,
110-
list_streams,
111-
merge_shards,
112-
put_record,
113-
split_shard]),
11493
ets:delete_all_objects(?KINETIC_DATA),
11594
lists:foreach(fun(F) ->
11695
[{error, missing_args} = erlang:apply(kinetic, F, Args)
@@ -130,18 +109,17 @@ put_records_test_() ->
130109
{setup, fun test_setup/0, fun test_teardown/1, fun test_put_records/0}.
131110

132111
test_put_records() ->
133-
meck:expect(hackney,
134-
post,
135-
fun (_Url, _Headers, _Body, [_, _, _, error]) ->
136-
{ok, 400, headers, body};
137-
(_Url, _Headers, _Body, _Opts) ->
138-
{ok,
139-
200,
140-
headers,
141-
<<"{\"FailedRecordCount\": 1,\n \"Records\":\n "
142-
" [{\"SequenceNumber\": \"10\", \"ShardId\": "
143-
"\"5\" },\n {\"ErrorCode\": \"404\", "
144-
"\"ErrorMessage\": \"Not found\"}]}">>}
112+
meck:expect(ehttpc_pool, pick_worker, fun(_PoolName) -> worker end),
113+
meck:expect(ehttpc,
114+
request,
115+
fun(_Worker, post, {_Url, _Headers, _Body}, _Timeout) ->
116+
{ok,
117+
200,
118+
headers,
119+
<<"{\"FailedRecordCount\": 1,\n \"Records\":\n "
120+
" [{\"SequenceNumber\": \"10\", \"ShardId\": "
121+
"\"5\" },\n {\"ErrorCode\": \"404\", "
122+
"\"ErrorMessage\": \"Not found\"}]}">>}
145123
end),
146124

147125
{ok, [Result1, Result2]} = erlang:apply(kinetic, put_records, [[]]),

0 commit comments

Comments
 (0)