You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2024/08/02 20:22:23 UTC
(couchdb) 01/01: A few more quickjs scanner fixes
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch few-more-clauses-for-quickjs-scanner
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 1820aadc1d17f8f865175b33fdcf6256740c4d9a
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Fri Aug 2 16:19:05 2024 -0400
A few more quickjs scanner fixes
Noticed a few more expected error clauses we could handle to reduce log noise.
It should handle `{vdu_doc,{error,{throw,{<<"TypeError">>,{Stack..}}}}, ...}` cases.
Also noticed that the scanner might leave a db opened and not close if it
throws an exception from a loop, so be more resilient and put it in the `after`
clause of a `try`.
---
src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl | 4 ++++
src/couch_scanner/src/couch_scanner_plugin.erl | 17 ++++++++++-------
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl b/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
index 08e4514b4..ee8a76bcc 100644
--- a/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
+++ b/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
@@ -514,8 +514,12 @@ expected_error(_) ->
expected_error({error, {_, compilation_error, _}}, {error, {_, compilation_error, _}}) ->
true;
+expected_error({error, {_, {compilation_error, _}}}, {error, {_, {compilation_error, _}}}) ->
+ true;
expected_error({error, {_, <<"TypeError">>, _}}, {error, {_, <<"TypeError">>, _}}) ->
true;
+expected_error({error, {_, {<<"TypeError">>, _}}}, {error, {_, {<<"TypeError">>, _}}}) ->
+ true;
expected_error(_, _) ->
false.
diff --git a/src/couch_scanner/src/couch_scanner_plugin.erl b/src/couch_scanner/src/couch_scanner_plugin.erl
index 34141a241..e8702d161 100644
--- a/src/couch_scanner/src/couch_scanner_plugin.erl
+++ b/src/couch_scanner/src/couch_scanner_plugin.erl
@@ -360,13 +360,16 @@ scan_docs(#st{} = St, #shard{name = ShardDbName}) ->
St1 = rate_limit(St, shard),
case couch_db:open_int(ShardDbName, [?ADMIN_CTX]) of
{ok, Db} ->
- St2 = St1#st{db = Db},
- St3 = db_opened_callback(St2),
- {ok, St4} = couch_db:fold_docs(Db, fun scan_docs_fold/2, St3, []),
- St5 = db_closing_callback(St4),
- couch_db:close(Db),
- erlang:garbage_collect(),
- St5#st{db = undefined};
+ try
+ St2 = St1#st{db = Db},
+ St3 = db_opened_callback(St2),
+ {ok, St4} = couch_db:fold_docs(Db, fun scan_docs_fold/2, St3, []),
+ St5 = db_closing_callback(St4),
+ erlang:garbage_collect(),
+ St5#st{db = undefined}
+ after
+ couch_db:close(Db)
+ end;
{not_found, _} ->
St1
end.