Source:
<code>public void hostsFailed(Set<Integer> failedHosts) { m_failedHostExecutorService.submit(new Runnable() { @Override public void run() { if (m_leaderAppointer.isLeader() && m_cartographer.hasPartitionMastersOnHosts(failedHosts)) { <START> VoltZK.createMpRepairBlocker(m_messenger.getZK(), hostLog); <END> } if (!m_leaderAppointer.isClusterKSafe(failedHosts)) { VoltDB.crashLocalVoltDB("Some partitions have no replicas. Cluster has become unviable.", false, null); return; } handleHostsFailedForMigratePartitionLeader(failedHosts); acceptExportStreamMastership(failedHosts); if (m_cartographer.isPartitionZeroLeader() || isFirstZeroPartitionReplica(failedHosts)) { for (int hostId : failedHosts) { m_snmp.hostDown(FaultLevel.ERROR, hostId, "Host left cluster mesh due to connection loss"); } final int missing = m_leaderAppointer.getKSafetyStatsSet().stream() .max((s1,s2) -> s1.getMissingCount() - s2.getMissingCount()) .map(s->s.getMissingCount()).orElse(failedHosts.size()); final int expected = m_clusterSettings.getReference().hostcount(); m_snmp.statistics(FaultFacility.CLUSTER, "Node lost. Cluster is down to " + (expected - missing) + " members out of original "+ expected + "."); } for (int hostId : failedHosts) { CoreZK.removeRejoinNodeIndicatorForHost(m_messenger.getZK(), hostId); VoltZK.removeStopNodeIndicator(m_messenger.getZK(), ZKUtil.joinZKPath(VoltZK.host_ids_be_stopped, Integer.toString(hostId)), hostLog); m_messenger.removeStopNodeNotice(hostId); } stopRejoiningHost(); m_clientInterface.handleFailedHosts(failedHosts); } }); }</code><technical_language>performance considerations, I feel call createActionBlocker</technical_language>

Target:
public void hostsFailed(Set<Integer> failedHosts) { m_failedHostExecutorService.submit(new Runnable() { @Override public void run() { if (m_leaderAppointer.isLeader() && m_cartographer.hasPartitionMastersOnHosts(failedHosts)) { VoltZK.createActionBlocker(m_messenger.getZK(), VoltZK.mpRepairInProgress, CreateMode.EPHEMERAL, hostLog, "MP Repair"); } if (!m_leaderAppointer.isClusterKSafe(failedHosts)) { VoltDB.crashLocalVoltDB("Some partitions have no replicas. Cluster has become unviable.", false, null); return; } handleHostsFailedForMigratePartitionLeader(failedHosts); acceptExportStreamMastership(failedHosts); if (m_cartographer.isPartitionZeroLeader() || isFirstZeroPartitionReplica(failedHosts)) { for (int hostId : failedHosts) { m_snmp.hostDown(FaultLevel.ERROR, hostId, "Host left cluster mesh due to connection loss"); } final int missing = m_leaderAppointer.getKSafetyStatsSet().stream() .max((s1,s2) -> s1.getMissingCount() - s2.getMissingCount()) .map(s->s.getMissingCount()).orElse(failedHosts.size()); final int expected = m_clusterSettings.getReference().hostcount(); m_snmp.statistics(FaultFacility.CLUSTER, "Node lost. Cluster is down to " + (expected - missing) + " members out of original "+ expected + "."); } for (int hostId : failedHosts) { CoreZK.removeRejoinNodeIndicatorForHost(m_messenger.getZK(), hostId); VoltZK.removeStopNodeIndicator(m_messenger.getZK(), ZKUtil.joinZKPath(VoltZK.host_ids_be_stopped, Integer.toString(hostId)), hostLog); m_messenger.removeStopNodeNotice(hostId); } stopRejoiningHost(); m_clientInterface.handleFailedHosts(failedHosts); } }); }