diff options
author | Adam Kocoloski <kocolosk@apache.org> | 2021-04-19 13:23:34 -0400 |
---|---|---|
committer | Adam Kocoloski <kocolosk@apache.org> | 2021-04-19 13:23:34 -0400 |
commit | b41ffa20c5dbb3f139162721c83262f0b7ce1275 (patch) | |
tree | 1cd2acdb5f81da0d189cb98a48df1a3ec58216d3 | |
parent | f6d578e4d5ba941368228a0179584ee73cd57000 (diff) | |
download | couchdb-b41ffa20c5dbb3f139162721c83262f0b7ce1275.tar.gz |
Drop support for Erlang < 21
The new logger only works in Erlang 21+, so we can start simplifying
the codebase by removing the macro that provides support for retrieving
stack traces the old way.
-rw-r--r-- | rebar.config.script | 2 | ||||
-rw-r--r-- | src/chttpd/src/chttpd.erl | 8 | ||||
-rw-r--r-- | src/chttpd/src/chttpd_handlers.erl | 2 | ||||
-rw-r--r-- | src/chttpd/src/chttpd_stats.erl | 4 | ||||
-rw-r--r-- | src/couch/include/couch_db.hrl | 24 | ||||
-rw-r--r-- | src/couch/src/couch_proc_manager.erl | 2 | ||||
-rw-r--r-- | src/couch_js/src/couch_js_proc_manager.erl | 2 | ||||
-rw-r--r-- | src/couch_replicator/src/couch_replicator_job.erl | 18 | ||||
-rw-r--r-- | src/couch_replicator/src/couch_replicator_parse.erl | 9 | ||||
-rw-r--r-- | src/couch_views/src/couch_views_indexer.erl | 2 | ||||
-rw-r--r-- | src/couch_views/src/couch_views_updater.erl | 2 | ||||
-rw-r--r-- | src/ctrace/src/ctrace.erl | 2 | ||||
-rw-r--r-- | src/fabric/src/fabric2_db_expiration.erl | 2 | ||||
-rw-r--r-- | src/fabric/src/fabric2_index.erl | 4 | ||||
-rw-r--r-- | src/fabric/src/fabric2_util.erl | 2 | ||||
-rw-r--r-- | src/mango/src/mango_httpd.erl | 2 |
16 files changed, 28 insertions, 59 deletions
diff --git a/rebar.config.script b/rebar.config.script index 6dafa8f89..883b803bd 100644 --- a/rebar.config.script +++ b/rebar.config.script @@ -191,7 +191,7 @@ ErlOpts = case os:getenv("ERL_OPTS") of end. AddConfig = [ - {require_otp_vsn, "20|21|22|23"}, + {require_otp_vsn, "21|22|23"}, {deps_dir, "src"}, {deps, lists:map(MakeDep, DepDescs ++ OptionalDeps)}, {sub_dirs, SubDirs}, diff --git a/src/chttpd/src/chttpd.erl b/src/chttpd/src/chttpd.erl index 135c4ec0b..6741ca350 100644 --- a/src/chttpd/src/chttpd.erl +++ b/src/chttpd/src/chttpd.erl @@ -278,7 +278,7 @@ before_request(HttpReq) -> {ok, HttpReq1} = chttpd_plugin:before_request(HttpReq), chttpd_stats:init(HttpReq1), {ok, HttpReq1} - catch ?STACKTRACE(Tag, Error, Stack) + catch Tag:Error:Stack -> {error, catch_error(HttpReq, Tag, Error, Stack)} end. @@ -286,7 +286,7 @@ after_request(HttpReq, HttpResp0) -> {ok, HttpResp1} = try chttpd_plugin:after_request(HttpReq, HttpResp0) - catch ?STACKTRACE(_Tag, Error, Stack) + catch _Tag:Error:Stack -> send_error(HttpReq, {Error, nil, Stack}), {ok, HttpResp0#httpd_resp{status = aborted}} end, @@ -319,7 +319,7 @@ process_request(#httpd{mochi_req = MochiReq} = HttpReq) -> Response -> {HttpReq, Response} end - catch ?STACKTRACE(Tag, Error, Stack) + catch Tag:Error:Stack -> {HttpReq, catch_error(HttpReq, Tag, Error, Stack)} end. @@ -332,7 +332,7 @@ handle_req_after_auth(HandlerKey, HttpReq) -> AuthorizedReq = chttpd_auth:authorize(possibly_hack(HttpReq), fun chttpd_auth_request:authorize_request/1), {AuthorizedReq, HandlerFun(AuthorizedReq)} - catch ?STACKTRACE(Tag, Error, Stack) + catch Tag:Error:Stack -> {HttpReq, catch_error(HttpReq, Tag, Error, Stack)} end. diff --git a/src/chttpd/src/chttpd_handlers.erl b/src/chttpd/src/chttpd_handlers.erl index 43631c058..ce478206a 100644 --- a/src/chttpd/src/chttpd_handlers.erl +++ b/src/chttpd/src/chttpd_handlers.erl @@ -44,7 +44,7 @@ handler_info(HttpReq) -> Default = {'unknown.unknown', #{}}, try select(collect(handler_info, [Method, PathParts, HttpReq]), Default) - catch ?STACKTRACE(Type, Reason, Stack) + catch Type:Reason:Stack -> couch_log:error("~s :: handler_info failure for ~p : ~p:~p :: ~p", [ ?MODULE, get(nonce), diff --git a/src/chttpd/src/chttpd_stats.erl b/src/chttpd/src/chttpd_stats.erl index ae1efa486..fa2036e6c 100644 --- a/src/chttpd/src/chttpd_stats.erl +++ b/src/chttpd/src/chttpd_stats.erl @@ -12,8 +12,6 @@ -module(chttpd_stats). -% for the stacktrace macro only so far --include_lib("couch/include/couch_db.hrl"). -export([ init/1, @@ -63,7 +61,7 @@ report(HttpResp) -> _ -> ok end - catch ?STACKTRACE(T, R, S) + catch T:R:S -> Fmt = "Failed to report chttpd request stats: ~p:~p ~p", couch_log:error(Fmt, [T, R, S]) end. diff --git a/src/couch/include/couch_db.hrl b/src/couch/include/couch_db.hrl index 01dc0f4a1..22890895a 100644 --- a/src/couch/include/couch_db.hrl +++ b/src/couch/include/couch_db.hrl @@ -178,27 +178,3 @@ -define(record_to_keyval(Name, Record), lists:zip(record_info(fields, Name), tl(tuple_to_list(Record)))). - -%% Erlang/OTP 21 deprecates and 23 removes get_stacktrace(), so -%% we have to monkey around until we can drop support < 21. -%% h/t https://github.com/erlang/otp/pull/1783#issuecomment-386190970 - -%% use like so: -% try function1(Arg1) -% catch -% ?STACKTRACE(exit, badarg, ErrorStackTrace) -% % do stuff with ErrorStackTrace -% % ... -% end, - -% Get the stacktrace in a way that is backwards compatible -% OTP_RELEASE is only available in OTP 21 and later, so we don’t need -% to do any other version magic here. --ifdef(OTP_RELEASE). --define(STACKTRACE(ErrorType, Error, Stack), - ErrorType:Error:Stack ->). --else. --define(STACKTRACE(ErrorType, Error, Stack), - ErrorType:Error -> - Stack = erlang:get_stacktrace(),). --endif. diff --git a/src/couch/src/couch_proc_manager.erl b/src/couch/src/couch_proc_manager.erl index 6a0322c73..3faef094f 100644 --- a/src/couch/src/couch_proc_manager.erl +++ b/src/couch/src/couch_proc_manager.erl @@ -321,7 +321,7 @@ find_proc(#client{lang = Lang, ddoc = DDoc, ddoc_key = DDocKey} = Client) -> find_proc(Lang, Fun) -> try iter_procs(Lang, Fun) - catch ?STACKTRACE(error, Reason, StackTrace) + catch error:Reason:StackTrace -> couch_log:error("~p ~p ~p", [?MODULE, Reason, StackTrace]), {error, Reason} end. diff --git a/src/couch_js/src/couch_js_proc_manager.erl b/src/couch_js/src/couch_js_proc_manager.erl index 4b3354d6e..d9c3efce3 100644 --- a/src/couch_js/src/couch_js_proc_manager.erl +++ b/src/couch_js/src/couch_js_proc_manager.erl @@ -320,7 +320,7 @@ find_proc(#client{lang = Lang, ddoc = DDoc, ddoc_key = DDocKey} = Client) -> find_proc(Lang, Fun) -> try iter_procs(Lang, Fun) - catch ?STACKTRACE(error, Reason, StackTrace) + catch error:Reason:StackTrace -> couch_log:error("~p ~p ~p", [?MODULE, Reason, StackTrace]), {error, Reason} end. diff --git a/src/couch_replicator/src/couch_replicator_job.erl b/src/couch_replicator/src/couch_replicator_job.erl index d11bdb738..8cfb426f5 100644 --- a/src/couch_replicator/src/couch_replicator_job.erl +++ b/src/couch_replicator/src/couch_replicator_job.erl @@ -221,11 +221,9 @@ handle_info(timeout, delayed_init) -> {ok, State} -> {noreply, State}; {stop, Reason, State} -> {stop, Reason, State} catch - ?STACKTRACE(exit, {shutdown, finished}, Stack) - {stop, {shutdown, finished}, {init_error, Stack}}; - ?STACKTRACE(exit, {shtudown, halt}, Stack) - {stop, {shutdown, halt}, {init_error, Stack}}; - ?STACKTRACE(_Tag, Error, Stack) + exit:{shutdown, Exit}:Stack when Exit =:= finished orelse Exit =:= halt -> + {stop, {shutdown, Exit}, {init_error, Stack}}; + _Tag:Error:Stack -> ShutdownReason = {error, replication_start_error(Error)}, {stop, {shutdown, ShutdownReason}, {init_error, Stack}} end; @@ -406,14 +404,12 @@ delayed_init() -> try do_init(Job, JobData) of State = #rep_state{} -> {ok, State} catch - ?STACKTRACE(exit, {http_request_failed, _, _, max_backoff}, Stack) + exit:{http_request_failed, _, _, max_backoff}:Stack -> reschedule_on_error(undefined, Job, JobData, max_backoff), {stop, {shutdown, max_backoff}, {init_error, Stack}}; - ?STACKTRACE(exit, {shutdown, finished}, Stack) - {stop, {shutdown, finished}, {init_error, Stack}}; - ?STACKTRACE(exit, {shutdown, halt}, Stack) - {stop, {shutdown, halt}, {init_error, Stack}}; - ?STACKTRACE(_Tag, Error, Stack) + exit:{shutdown, Exit}:Stack when Exit =:= finished orelse Exit =:= halt -> + {stop, {shutdown, Exit}, {init_error, Stack}}; + _Tag:Error:Stack -> Reason = {error, replication_start_error(Error)}, ErrMsg = "~p : job ~p failed during startup ~p stack:~p", couch_log:error(ErrMsg, [?MODULE, Job, Reason, Stack]), diff --git a/src/couch_replicator/src/couch_replicator_parse.erl b/src/couch_replicator/src/couch_replicator_parse.erl index 79c778d23..5b3f3f34b 100644 --- a/src/couch_replicator/src/couch_replicator_parse.erl +++ b/src/couch_replicator/src/couch_replicator_parse.erl @@ -22,7 +22,6 @@ -include_lib("ibrowse/include/ibrowse.hrl"). --include_lib("couch/include/couch_db.hrl"). -include("couch_replicator.hrl"). @@ -60,11 +59,11 @@ parse_rep_doc(RepDoc) -> {ok, Rep} = try parse_rep(RepDoc, null) catch - ?STACKTRACE(throw, {error, Reason}, Stack) + throw:{error, Reason}:Stack -> LogErr1 = "~p parse_rep_doc fail ~p ~p", couch_log:error(LogErr1, [?MODULE, Reason, Stack]), throw({bad_rep_doc, Reason}); - ?STACKTRACE(Tag, Err, Stack) + Tag:Err:Stack -> LogErr2 = "~p parse_rep_doc fail ~p:~p ~p", couch_log:error(LogErr2, [?MODULE, Tag, Err, Stack]), throw({bad_rep_doc, couch_util:to_binary({Tag, Err})}) @@ -82,11 +81,11 @@ parse_transient_rep(#{} = Body, UserName) -> {ok, Rep} = try parse_rep(Body, UserName) catch - ?STACKTRACE(throw, {error, Reason}, Stack) + throw:{error, Reason}:Stack -> LogErr1 = "~p parse_transient_rep fail ~p ~p", couch_log:error(LogErr1, [?MODULE, Reason, Stack]), throw({bad_request, Reason}); - ?STACKTRACE(Tag, Err, Stack) + Tag:Err:Stack -> LogErr2 = "~p parse_transient_rep fail ~p ~p", couch_log:error(LogErr2, [?MODULE, Tag, Err, Stack]), throw({bad_request, couch_util:to_binary({Tag, Err})}) diff --git a/src/couch_views/src/couch_views_indexer.erl b/src/couch_views/src/couch_views_indexer.erl index 2164a5827..eed3f547b 100644 --- a/src/couch_views/src/couch_views_indexer.erl +++ b/src/couch_views/src/couch_views_indexer.erl @@ -121,7 +121,7 @@ init() -> ok; error:database_does_not_exist -> fail_job(Job, Data, db_deleted, "Database was deleted"); - ?STACKTRACE(Error, Reason, Stack) + Error:Reason:Stack -> Fmt = "Error building view for ddoc ~s in ~s: ~p:~p ~p", couch_log:error(Fmt, [DbName, DDocId, Error, Reason, Stack]), diff --git a/src/couch_views/src/couch_views_updater.erl b/src/couch_views/src/couch_views_updater.erl index 7c96bb8bb..c7d31463e 100644 --- a/src/couch_views/src/couch_views_updater.erl +++ b/src/couch_views/src/couch_views_updater.erl @@ -31,7 +31,7 @@ index(Db, #doc{id = Id, revs = Revs} = Doc, _NewWinner, _OldWinner, NewRevId, index_int(Db, Doc, Seq) end catch - ?STACKTRACE(error, {erlfdb_error, ErrCode}, Stack) + error:{erlfdb_error, ErrCode}:Stack when is_integer(ErrCode) -> DbName = fabric2_db:name(Db), couch_log:error("Mango index erlfdb error Db ~s Doc ~p ~p", [DbName, Id, ErrCode]), diff --git a/src/ctrace/src/ctrace.erl b/src/ctrace/src/ctrace.erl index 8ae51c487..a890bdea4 100644 --- a/src/ctrace/src/ctrace.erl +++ b/src/ctrace/src/ctrace.erl @@ -109,7 +109,7 @@ with_span(Operation, Options, Fun) -> try start_span(Operation, Options), Fun() - catch ?STACKTRACE(Type, Reason, Stack) + catch Type:Reason:Stack -> log(#{ ?LOG_FIELD_ERROR_KIND => Type, ?LOG_FIELD_MESSAGE => Reason, diff --git a/src/fabric/src/fabric2_db_expiration.erl b/src/fabric/src/fabric2_db_expiration.erl index 94cb61b82..b4385910d 100644 --- a/src/fabric/src/fabric2_db_expiration.erl +++ b/src/fabric/src/fabric2_db_expiration.erl @@ -131,7 +131,7 @@ cleanup(true) -> {ok, Job1, Data1} = ?MODULE:process_expirations(Job, Data), ok = resubmit_job(Job1, Data1, schedule_sec()) catch - ?STACKTRACE(_Tag, Error, Stack) + _Tag:Error:Stack -> couch_log:error("~p : processing error ~p ~p ~p", [?MODULE, Job, Error, Stack]), ok = resubmit_job(Job, Data, ?ERROR_RESCHEDULE_SEC), diff --git a/src/fabric/src/fabric2_index.erl b/src/fabric/src/fabric2_index.erl index 3c59cd7e2..037f0f5fa 100644 --- a/src/fabric/src/fabric2_index.erl +++ b/src/fabric/src/fabric2_index.erl @@ -67,7 +67,7 @@ cleanup(Db) -> catch error:database_does_not_exist -> ok; - ?STACKTRACE(Tag, Reason, Stack) + Tag:Reason:Stack -> DbName = fabric2_db:name(Db), LogMsg = "~p failed to cleanup indices for `~s` ~p:~p ~p", couch_log:error(LogMsg, [?MODULE, DbName, Tag, Reason, Stack]) @@ -167,7 +167,7 @@ process_updates_iter([Db | Rest], Cont) -> catch error:database_does_not_exist -> ok; - ?STACKTRACE(Tag, Reason, Stack) + Tag:Reason:Stack -> LogMsg = "~p failed to build indices for `~s` ~p:~p ~p", couch_log:error(LogMsg, [?MODULE, Db, Tag, Reason, Stack]) end, diff --git a/src/fabric/src/fabric2_util.erl b/src/fabric/src/fabric2_util.erl index f95e410c6..cd22778ef 100644 --- a/src/fabric/src/fabric2_util.erl +++ b/src/fabric/src/fabric2_util.erl @@ -386,6 +386,6 @@ pmap(Fun, Args, Opts) -> pmap_exec(Fun, Arg) -> try {'$res', Fun(Arg)} - catch ?STACKTRACE(Tag, Reason, Stack) + catch Tag:Reason:Stack -> {'$err', Tag, Reason, Stack} end. diff --git a/src/mango/src/mango_httpd.erl b/src/mango/src/mango_httpd.erl index 9ac4dfc88..0d035dd99 100644 --- a/src/mango/src/mango_httpd.erl +++ b/src/mango/src/mango_httpd.erl @@ -36,7 +36,7 @@ handle_req(#httpd{} = Req, Db) -> try handle_req_int(Req, Db) catch - ?STACKTRACE(throw, {mango_error, Module, Reason}, Stack) + throw:{mango_error, Module, Reason}:Stack -> case mango_error:info(Module, Reason) of {500, ErrorStr, ReasonStr} -> chttpd:send_error(Req, {ErrorStr, ReasonStr, Stack}); |