This commit is contained in:
Clebert Suconic 2018-07-11 09:34:35 -04:00
commit 7d7daa1ff2
4 changed files with 49 additions and 22 deletions

View File

@ -79,24 +79,27 @@ public class ReplicatedPolicyConfiguration implements HAPolicyConfiguration {
return initialReplicationSyncTimeout;
}
public void setInitialReplicationSyncTimeout(long initialReplicationSyncTimeout) {
public ReplicatedPolicyConfiguration setInitialReplicationSyncTimeout(long initialReplicationSyncTimeout) {
this.initialReplicationSyncTimeout = initialReplicationSyncTimeout;
return this;
}
public boolean getVoteOnReplicationFailure() {
return voteOnReplicationFailure;
}
public void setVoteOnReplicationFailure(boolean voteOnReplicationFailure) {
public ReplicatedPolicyConfiguration setVoteOnReplicationFailure(boolean voteOnReplicationFailure) {
this.voteOnReplicationFailure = voteOnReplicationFailure;
return this;
}
public int getQuorumSize() {
return quorumSize;
}
public void setQuorumSize(int quorumSize) {
public ReplicatedPolicyConfiguration setQuorumSize(int quorumSize) {
this.quorumSize = quorumSize;
return this;
}
@ -104,12 +107,14 @@ public class ReplicatedPolicyConfiguration implements HAPolicyConfiguration {
return voteRetries;
}
public void setVoteRetries(int voteRetries) {
public ReplicatedPolicyConfiguration setVoteRetries(int voteRetries) {
this.voteRetries = voteRetries;
return this;
}
public void setVoteRetryWait(long voteRetryWait) {
public ReplicatedPolicyConfiguration setVoteRetryWait(long voteRetryWait) {
this.voteRetryWait = voteRetryWait;
return this;
}
public long getVoteRetryWait() {
@ -120,7 +125,9 @@ public class ReplicatedPolicyConfiguration implements HAPolicyConfiguration {
return quorumVoteWait;
}
public void setQuorumVoteWait(int quorumVoteWait) {
public ReplicatedPolicyConfiguration setQuorumVoteWait(int quorumVoteWait) {
new Exception("here").printStackTrace();
this.quorumVoteWait = quorumVoteWait;
return this;
}
}

View File

@ -105,12 +105,12 @@ public final class DescribeJournal {
private final List<RecordInfo> records;
private final List<PreparedTransactionInfo> preparedTransactions;
private static final Configuration CONFIGURATION;
static {
private static Configuration getConfiguration() {
Configuration configuration;
String instanceFolder = System.getProperty("artemis.instance");
if (instanceFolder != null) {
CONFIGURATION = new FileConfiguration();
configuration = new FileConfiguration();
File configFile = new File(instanceFolder + "/etc/broker.xml");
URL url;
@ -121,19 +121,21 @@ public final class DescribeJournal {
xml = XMLUtil.replaceSystemProps(xml);
Element e = XMLUtil.stringToElement(xml);
String root = ((FileConfiguration) CONFIGURATION).getRootElement();
String root = ((FileConfiguration) configuration).getRootElement();
NodeList children = e.getElementsByTagName(root);
if (root != null && children.getLength() > 0) {
Node item = children.item(0);
XMLUtil.validate(item, ((FileConfiguration) CONFIGURATION).getSchema());
((FileConfiguration) CONFIGURATION).parse((Element) item, url);
XMLUtil.validate(item, ((FileConfiguration) configuration).getSchema());
((FileConfiguration) configuration).parse((Element) item, url);
}
} catch (Exception e) {
logger.error("failed to load broker.xml", e);
}
} else {
CONFIGURATION = new ConfigurationImpl();
configuration = new ConfigurationImpl();
}
return configuration;
}
public DescribeJournal(List<RecordInfo> records, List<PreparedTransactionInfo> preparedTransactions) {
@ -166,10 +168,11 @@ public final class DescribeJournal {
}
public static DescribeJournal describeMessagesJournal(final File messagesDir, PrintStream out, boolean safe) throws Exception {
Configuration configuration = getConfiguration();
SequentialFileFactory messagesFF = new NIOSequentialFileFactory(messagesDir, null, 1);
// Will use only default values. The load function should adapt to anything different
JournalImpl messagesJournal = new JournalImpl(CONFIGURATION.getJournalFileSize(), CONFIGURATION.getJournalMinFiles(), CONFIGURATION.getJournalPoolFiles(), 0, 0, messagesFF, "activemq-data", "amq", 1);
JournalImpl messagesJournal = new JournalImpl(configuration.getJournalFileSize(), configuration.getJournalMinFiles(), configuration.getJournalPoolFiles(), 0, 0, messagesFF, "activemq-data", "amq", 1);
return describeJournal(messagesFF, messagesJournal, messagesDir, out, safe);
}

View File

@ -21,6 +21,7 @@ import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration;
import org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration;
import org.apache.activemq.artemis.core.server.cluster.ha.ReplicatedPolicy;
import org.junit.Test;
public class QuorumResultWaitTest extends StaticClusterWithBackupFailoverTest {
public static final int QUORUM_VOTE_WAIT_CONFIGURED_TIME_SEC = 12;
@ -33,7 +34,7 @@ public class QuorumResultWaitTest extends StaticClusterWithBackupFailoverTest {
((ReplicatedPolicyConfiguration) servers[2].getConfiguration().getHAPolicyConfiguration()).setGroupName("group2");
((ReplicaPolicyConfiguration) servers[4].getConfiguration().getHAPolicyConfiguration()).setGroupName("group1");
((ReplicaPolicyConfiguration) servers[5].getConfiguration().getHAPolicyConfiguration()).setGroupName("group2");
ReplicatedPolicyConfiguration replicatedPolicyConf = new ReplicatedPolicyConfiguration();
ReplicatedPolicyConfiguration replicatedPolicyConf = new ReplicatedPolicyConfiguration().setQuorumVoteWait(QUORUM_VOTE_WAIT_CONFIGURED_TIME_SEC);
replicatedPolicyConf.setGroupName("group0");
replicatedPolicyConf.setVoteRetries(5);
replicatedPolicyConf.setVoteRetryWait(100);
@ -43,12 +44,16 @@ public class QuorumResultWaitTest extends StaticClusterWithBackupFailoverTest {
@Test
public void testQuorumVotingResultWait() throws Exception {
setupCluster();
startServers(0, 1, 2);
startServers(3, 4, 5);
//Assert if the default time 30 sec is used
assertEquals(ActiveMQDefaultConfiguration.getDefaultQuorumVoteWait(), ((ReplicatedPolicy)(servers[0].getHAPolicy())).getQuorumVoteWait());
//Assert if the configured time is used.
assertEquals(QUORUM_VOTE_WAIT_CONFIGURED_TIME_SEC, ((ReplicatedPolicy)(servers[3].getHAPolicy())).getQuorumVoteWait());
try {
startServers(0, 1, 2);
startServers(3, 4, 5);
//Assert if the default time 30 sec is used
assertEquals(ActiveMQDefaultConfiguration.getDefaultQuorumVoteWait(), ((ReplicatedPolicy) (servers[0].getHAPolicy())).getQuorumVoteWait());
//Assert if the configured time is used.
assertEquals(QUORUM_VOTE_WAIT_CONFIGURED_TIME_SEC, ((ReplicatedPolicy) (servers[3].getHAPolicy())).getQuorumVoteWait());
} finally {
stopServers(0, 1, 2, 3, 4, 5);
}
}
@Override

View File

@ -21,6 +21,7 @@ import org.apache.activemq.artemis.cli.commands.tools.PrintData;
import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
import org.apache.activemq.artemis.core.persistence.impl.journal.DescribeJournal;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.jms.server.config.impl.FileJMSConfiguration;
@ -32,6 +33,9 @@ import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
public class JournalDataPrintTest extends ActiveMQTestBase {
@ -49,9 +53,17 @@ public class JournalDataPrintTest extends ActiveMQTestBase {
try {
server.start();
server.stop();
// This will force some static load that used to be on the class, which would make this test to fail.
DescribeJournal journal = new DescribeJournal(null, null);
System.setProperty("artemis.instance",
this.getClass().getClassLoader().getResource("dataprint").getFile());
PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile());
PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile(),
new PrintStream(new OutputStream() {
@Override
public void write(int b) throws IOException {
// dev/null
}
}), false);
// list journal file
File dirFile = server.getConfiguration().getJournalLocation().getAbsoluteFile();