Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:20
turtle
turtle-1.9.4-git.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File turtle-1.9.4-git.patch of Package turtle
diff --git a/.travis.yml b/.travis.yml index de95ce0..7b9f563 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,9 @@ matrix: - os: linux otp_release: 19.3 - os: linux - otp_release: 20.1 + otp_release: 20.3 + - os: linux + otp_release: 21.1 script: "make compile test dialyzer REBAR=./rebar3" diff --git a/README.md b/README.md index 1f4dc35..205e927 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,10 @@ become worse. # Changes +* Upcoming + + - Upgrade dependencies; exometer_core and lager + * *Version 1.9.4* - Introduce Connection Name Validation - Connection names are now validated when a publisher or a service @@ -134,27 +138,27 @@ become worse. is that errors in workers leads to a situation where you have channels in a "limbo" state: not known to Turtle, but known to the client and the AMQP server. - + Messages which have been prefetched into these channels can never be acked nor rejected, because the tag is lost in a mailbox of a crashing process. The system thus slowly fills up prefetch slots until the system comes to a halt. - + Note periodic connection resets would fix the bug. Periodic connection resets happens somewhat weekly on the Amazon AWS platform which is why we didn't find this bug earlier. - + The solution taken for Turtle is to introduce a `turtle_janitor` process which maintains the channels and connections that has been handed out. The janitor monitors and closes connections and channels upon failure. - + - *POTENTIAL INCOMPATIBIILTY:* As a result of introducing a janitorial process, we can remove most of the `trap_exit` from the turtle processes. They don't have to clean up themselves anymore since the janitor is doing it for them. All in all, the system becomes far more Erlang-idiomatic. - + The fallout, however, is that if you have relied on trap-exit in the process, you can't anymore, so one has to look out for this incompatible change. @@ -168,7 +172,7 @@ become worse. - Use hex.pm packages - Build/Test via Travis CI - + * *Version 1.8.1* - Maintenance release - The child spec validator had a bug where `callback/5` functions diff --git a/rebar.config b/rebar.config index ab09c47..533d4ee 100644 --- a/rebar.config +++ b/rebar.config @@ -4,10 +4,14 @@ ]}. {deps, [ - {lager, "3.6.1"}, - {rabbit_common, "3.7.5"}, + {lager, "3.6.7"}, + {rabbit_common, "3.7.8"}, {amqp_client, "3.7.4"}, - {exometer_core, "1.5.2"}, - {gproc, "0.6.1"}, - {uuid, "1.7.1", {pkg, uuid_erl}} + {exometer_core, "1.5.7"}, + {gproc, "0.8.0"}, + {uuid, "1.7.1", {pkg, uuid_erl}} ]}. + +{overrides, + [{override, ranch_proxy_protocol, [{erl_opts, [debug_info]}]}] +}. diff --git a/rebar.lock b/rebar.lock index f747e7d..822bfa5 100644 --- a/rebar.lock +++ b/rebar.lock @@ -1,38 +1,38 @@ {"1.1.0", [{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"3.7.4">>},0}, - {<<"bear">>,{pkg,<<"bear">>,<<"0.8.5">>},2}, - {<<"exometer_core">>,{pkg,<<"exometer_core">>,<<"1.5.2">>},0}, - {<<"folsom">>,{pkg,<<"folsom">>,<<"0.8.5">>},1}, + {<<"bear">>,{pkg,<<"bear">>,<<"0.8.7">>},2}, + {<<"exometer_core">>,{pkg,<<"exometer_core">>,<<"1.5.7">>},0}, + {<<"folsom">>,{pkg,<<"folsom">>,<<"0.8.7">>},1}, {<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1}, - {<<"gproc">>,{pkg,<<"gproc">>,<<"0.6.1">>},0}, - {<<"hut">>,{pkg,<<"hut">>,<<"1.2.0">>},1}, + {<<"gproc">>,{pkg,<<"gproc">>,<<"0.8.0">>},0}, + {<<"hut">>,{pkg,<<"hut">>,<<"1.2.1">>},1}, {<<"jsx">>,{pkg,<<"jsx">>,<<"2.8.2">>},1}, - {<<"lager">>,{pkg,<<"lager">>,<<"3.6.1">>},0}, - {<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.0.0">>},1}, + {<<"lager">>,{pkg,<<"lager">>,<<"3.6.7">>},0}, + {<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},1}, {<<"quickrand">>,{pkg,<<"quickrand">>,<<"1.7.3">>},1}, {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"3.7.5">>},0}, {<<"ranch">>,{pkg,<<"ranch">>,<<"1.5.0">>},1}, {<<"ranch_proxy_protocol">>,{pkg,<<"ranch_proxy_protocol">>,<<"1.5.0">>},1}, {<<"recon">>,{pkg,<<"recon">>,<<"2.3.2">>},1}, - {<<"setup">>,{pkg,<<"setup">>,<<"1.8.4">>},1}, + {<<"setup">>,{pkg,<<"setup">>,<<"2.0.2">>},1}, {<<"uuid">>,{pkg,<<"uuid_erl">>,<<"1.7.1">>},0}]}. [ {pkg_hash,[ {<<"amqp_client">>, <<"2E6C98D691A3294595B91A4E52A63E531EFFD334129B9CBF1B02EDDF637B395C">>}, - {<<"bear">>, <<"E95FCA1627CD9E15BAF93CE0A52AFF16917BAF325F0EE65B88CD715376CD2344">>}, - {<<"exometer_core">>, <<"62A99A361BA8A14D53857D4C716A191E810299D2F43C5C981EB7B086C0BFCCE1">>}, - {<<"folsom">>, <<"94A027B56FE84FEED264F9B33CB4C6AC9A801FAD84B87DBDA0836CE83C3B8D69">>}, + {<<"bear">>, <<"16264309AE5D005D03718A5C82641FCC259C9E8F09ADEB6FD79CA4271168656F">>}, + {<<"exometer_core">>, <<"AB97E34A5D69AB14E6AE161DB4CCA5B5E655E635B842F830EE6AB2CBFCFDC30A">>}, + {<<"folsom">>, <<"A885F0AEEE4C84270954C88A55A5A473D6B2C7493E32FFDC5765412DD555A951">>}, {<<"goldrush">>, <<"F06E5D5F1277DA5C413E84D5A2924174182FB108DABB39D5EC548B27424CD106">>}, - {<<"gproc">>, <<"4579663E5677970758A05D8F65D13C3E9814EC707AD51D8DCEF7294EDA1A730C">>}, - {<<"hut">>, <<"0089DF0FAA2827C605BBADA88153F24FFF5EA7A4BE32ECF0250A7FDC2719CAFB">>}, + {<<"gproc">>, <<"CEA02C578589C61E5341FCE149EA36CCEF236CC2ECAC8691FBA408E7EA77EC2F">>}, + {<<"hut">>, <<"08D46679523043424870723923971889E8A34D63B2F946A35B46CF921D1236E7">>}, {<<"jsx">>, <<"7ACC7D785B5ABE8A6E9ADBDE926A24E481F29956DD8B4DF49E3E4E7BCC92A018">>}, - {<<"lager">>, <<"9D29C5FF7F926D25ECD9899990867C9152DCF34EEE65BAC8EC0DFC0D16A26E0C">>}, - {<<"parse_trans">>, <<"9E96B1C9C3A0DF54E7B76F8F685D38BFA1EB21B31E042B1D1A5A70258E4DB1E3">>}, + {<<"lager">>, <<"2FBF823944CAA0FC10DF5EC13F3F047524A249BB32F0D801B7900C9610264286">>}, + {<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>}, {<<"quickrand">>, <<"0E4FB48FAC904FE0C6E21D7E8C31A288A0700E1E81A35B38B649FC119079755D">>}, {<<"rabbit_common">>, <<"3346C2C65DF2528891C3113AA33E78AADBD5E6996E4230B937C2429F86861268">>}, {<<"ranch">>, <<"F04166F456790FEE2AC1AA05A02745CC75783C2BFB26D39FAF6AEFC9A3D3A58A">>}, {<<"ranch_proxy_protocol">>, <<"E698AAEB590AD504B649DC0D3055ABEE6CAF0B49D3CAEE1A080AE83B5B499F30">>}, {<<"recon">>, <<"4444C879BE323B1B133EEC5241CB84BD3821EA194C740D75617E106BE4744318">>}, - {<<"setup">>, <<"738DB0685DC1741F45C6A9BF78478E0D5877F3D0876C0B50FD02F0210EDB5AA4">>}, + {<<"setup">>, <<"1203F4CDA11306C2E34434244576DED0A7BBFB0908D9A572356C809BD0CDF085">>}, {<<"uuid">>, <<"252D12D1154BC75C40BC03E2E67714BD843DDFAD40FD3BC1541F65F622C9E7FC">>}]} ]. diff --git a/src/turtle_conn.erl b/src/turtle_conn.erl index fe3cf56..22cdc11 100644 --- a/src/turtle_conn.erl +++ b/src/turtle_conn.erl @@ -67,8 +67,12 @@ conn(Name) -> call(Name, conn). call(Loc, Msg) -> - Pid = gproc:where({n,l,{turtle, connection, Loc}}), - gen_server:call(Pid, Msg, 20*1000). + case gproc:where({n,l,{turtle, connection, Loc}}) of + undefined -> + {error, undefined}; + Pid when is_pid(Pid) -> + gen_server:call(Pid, Msg, 20*1000) + end. %% CALLBACKS %% ------------------------------------------------------------------- diff --git a/src/turtle_janitor.erl b/src/turtle_janitor.erl index 44bd6bc..48093b1 100644 --- a/src/turtle_janitor.erl +++ b/src/turtle_janitor.erl @@ -62,7 +62,7 @@ handle_call({open_connection, Network}, {Pid, _}, #state { bimap = BiMap } = Sta {reply, Err, State} end; handle_call({open_channel, Name}, {Pid, _}, #state { bimap = BiMap } = State) -> - case turtle_conn:conn(Name) of + try turtle_conn:conn(Name) of Conn when is_pid(Conn) -> case amqp_connection:open_channel(Conn) of {ok, Channel} -> @@ -74,8 +74,11 @@ handle_call({open_channel, Name}, {Pid, _}, #state { bimap = BiMap } = State) -> Err -> {reply, Err, State} end; - {error, no_amqp_connection} -> - {reply, {error, no_amqp_connection}, State} + {error, _Reason} = Err -> + {reply, Err, State} + catch + exit:{noproc, _} -> + {reply, {error, noproc}, State} end; handle_call(status, _From, #state { bimap = BiMap } = State) -> Reply = bimap_format(BiMap), diff --git a/src/turtle_sup.erl b/src/turtle_sup.erl index af870fc..809d83c 100644 --- a/src/turtle_sup.erl +++ b/src/turtle_sup.erl @@ -38,7 +38,7 @@ init([]) -> modules => [turtle_janitor] }, Connectors = configure_connectors(), - {ok, { {one_for_one, 3, 3600}, [Janitor | Connectors]} }. + {ok, { {one_for_one, 5, 3600}, [Janitor | Connectors]} }. %%==================================================================== %% Internal functions diff --git a/test/turtle_SUITE.erl b/test/turtle_SUITE.erl index 858ca1c..94acb37 100644 --- a/test/turtle_SUITE.erl +++ b/test/turtle_SUITE.erl @@ -62,7 +62,10 @@ basic_group() -> rpc, kill_publisher, kill_service, - kill_amqp_client, + %% Disabled because it tends to be unstable and fail sometimes + %% it is definitely a timing/racing issue of some kind, but we + %% have yet to figure out what is wrong here. + %% kill_amqp_client, faulty_service, bulk ]}]. @@ -243,7 +246,7 @@ bulk(_Config) -> #'queue.bind' { queue = Q, exchange = X, routing_key = Q }]), ct:log("Await the start of the publisher"), - gproc:await({n,l,{turtle,publisher,local_publisher}}, 300), + turtle_publisher:await(local_publisher, 300), ct:log("Await the start of the service"), gproc:await({n,l,{turtle,service_channel,local_service}}, 300),
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor