You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by to...@apache.org on 2020/09/14 17:41:46 UTC
[couchdb] branch fix-compaction-race-condition created (now 46b124c)
This is an automated email from the ASF dual-hosted git repository.
tonysun83 pushed a change to branch fix-compaction-race-condition
in repository https://gitbox.apache.org/repos/asf/couchdb.git.
at 46b124c fix race condition
This branch includes the following new commits:
new 46b124c fix race condition
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[couchdb] 01/01: fix race condition
Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tonysun83 pushed a commit to branch fix-compaction-race-condition
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 46b124c131ec812444adb2a235550a0d1aefd5eb
Author: Tony Sun <to...@gmail.com>
AuthorDate: Mon Sep 14 10:36:17 2020 -0700
fix race condition
This fixes a94e693f32672e4613bce0d80d0b9660f85275ea because a race
condition exisited where the 'DOWN' message could be received
before the compactor pid is spawned. Adding a synchronous call to
get the compactor pid guarantees that the couch_db_updater process
handling of finish_compaction has occurred.
---
src/couch/src/couch_db.erl | 9 +++++++++
src/smoosh/src/smoosh_channel.erl | 2 +-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index e1d726d..390a198 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -37,6 +37,7 @@
get_committed_update_seq/1,
get_compacted_seq/1,
get_compactor_pid/1,
+ get_compactor_pid_sync/1,
get_db_info/1,
get_partition_info/2,
get_del_doc_count/1,
@@ -572,6 +573,14 @@ get_compacted_seq(#db{}=Db) ->
get_compactor_pid(#db{compactor_pid = Pid}) ->
Pid.
+get_compactor_pid_sync(#db{main_pid=Pid}=Db) ->
+ case gen_server:call(Pid, compactor_pid, infinity) of
+ CPid when is_pid(CPid) ->
+ CPid;
+ _ ->
+ nil
+ end.
+
get_db_info(Db) ->
#db{
name = Name,
diff --git a/src/smoosh/src/smoosh_channel.erl b/src/smoosh/src/smoosh_channel.erl
index 2a45c17..2bc98be 100644
--- a/src/smoosh/src/smoosh_channel.erl
+++ b/src/smoosh/src/smoosh_channel.erl
@@ -293,7 +293,7 @@ start_compact(State, Db) ->
maybe_remonitor_cpid(State, DbName, Reason) when is_binary(DbName) ->
{ok, Db} = couch_db:open_int(DbName, []),
- case couch_db:get_compactor_pid(Db) of
+ case couch_db:get_compactor_pid_sync(Db) of
nil ->
couch_log:warning("exit for compaction of ~p: ~p",
[smoosh_utils:stringify(DbName), Reason]),