diff --git a/src/v/cluster/controller_backend.cc b/src/v/cluster/controller_backend.cc index 7bf9392df95c..486bad6443cd 100644 --- a/src/v/cluster/controller_backend.cc +++ b/src/v/cluster/controller_backend.cc @@ -209,6 +209,15 @@ std::error_code check_configuration_update( partition->ntp()); return errc::partition_configuration_in_joint_mode; } + + if (includes_self && partition->raft()->has_configuration_override()) { + vlog( + clusterlog.trace, + "[{}] contains current node and there is configuration override " + "active", + partition->ntp()); + return errc::partition_configuration_in_joint_mode; + } /* * if replica set is a leader it must have configuration committed i.e. it * was successfully replicated to majority of followers. diff --git a/src/v/raft/consensus.h b/src/v/raft/consensus.h index 39c525dd8039..fa2c2d0cac74 100644 --- a/src/v/raft/consensus.h +++ b/src/v/raft/consensus.h @@ -524,6 +524,10 @@ class consensus { return _replication_monitor; } + bool has_configuration_override() const { + return _configuration_manager.has_configuration_override(); + } + private: friend replication_monitor; friend replicate_entries_stm;