This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/main by this push:
new 83658d06d A few more quickjs scanner fixes
83658d06d is described below
commit 83658d06d12447b7d1abccc1a64b84e020899ba4
Author: Nick Vatamaniuc <[email protected]>
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.