Revert "ARTEMIS-187 hold lock between live server and tools"
This reverts commit f0f4f1684d
.
Sorry about this.. I will rework this and send a commit again
This commit is contained in:
parent
154e9d610d
commit
030f2fc59a
|
@ -33,14 +33,12 @@ public final class CompactJournal extends DataAbstract implements Action {
|
||||||
public Object execute(ActionContext context) throws Exception {
|
public Object execute(ActionContext context) throws Exception {
|
||||||
super.execute(context);
|
super.execute(context);
|
||||||
try {
|
try {
|
||||||
testLock();
|
|
||||||
Configuration configuration = getFileConfiguration();
|
Configuration configuration = getFileConfiguration();
|
||||||
compactJournal(new File(getJournal()), "activemq-data", "amq", configuration.getJournalMinFiles(), configuration.getJournalFileSize(), null);
|
compactJournal(new File(getJournal()), "activemq-data", "amq", configuration.getJournalMinFiles(), configuration.getJournalFileSize(), null);
|
||||||
compactJournal(new File(getBinding()), "activemq-bindings", "bindings", 2, 1048576, null);
|
compactJournal(new File(getBinding()), "activemq-bindings", "bindings", 2, 1048576, null);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
treatError(e, "data", "compact");
|
treatError(e, "data", "compact");
|
||||||
return e;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,15 +18,9 @@
|
||||||
package org.apache.activemq.artemis.cli.commands.tools;
|
package org.apache.activemq.artemis.cli.commands.tools;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.channels.FileLock;
|
|
||||||
|
|
||||||
import io.airlift.airline.Option;
|
import io.airlift.airline.Option;
|
||||||
import org.apache.activemq.artemis.cli.commands.Configurable;
|
import org.apache.activemq.artemis.cli.commands.Configurable;
|
||||||
import org.apache.activemq.artemis.core.config.Configuration;
|
|
||||||
import org.apache.activemq.artemis.core.server.JournalType;
|
|
||||||
import org.apache.activemq.artemis.core.server.impl.AIOFileLockNodeManager;
|
|
||||||
import org.apache.activemq.artemis.core.server.impl.FileLockNodeManager;
|
|
||||||
import org.apache.activemq.artemis.jlibaio.LibaioContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract class for places where you need bindings, journal paging and large messages configuration
|
* Abstract class for places where you need bindings, journal paging and large messages configuration
|
||||||
|
@ -45,31 +39,6 @@ public abstract class DataAbstract extends Configurable {
|
||||||
@Option(name = "--large-messages", description = "The folder used for large-messages (default from broker.xml)")
|
@Option(name = "--large-messages", description = "The folder used for large-messages (default from broker.xml)")
|
||||||
public String largeMessges;
|
public String largeMessges;
|
||||||
|
|
||||||
|
|
||||||
protected void testLock() throws Exception {
|
|
||||||
|
|
||||||
FileLockNodeManager fileLockNodeManager;
|
|
||||||
Configuration configuration = getFileConfiguration();
|
|
||||||
if (getFileConfiguration().getJournalType() == JournalType.ASYNCIO && LibaioContext.isLoaded()) {
|
|
||||||
fileLockNodeManager = new AIOFileLockNodeManager(new File(getJournal()), false, configuration.getJournalLockAcquisitionTimeout());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fileLockNodeManager = new FileLockNodeManager(new File(getJournal()), false, configuration.getJournalLockAcquisitionTimeout());
|
|
||||||
}
|
|
||||||
|
|
||||||
fileLockNodeManager.start();
|
|
||||||
|
|
||||||
try (FileLock lock = fileLockNodeManager.tryLockLive()) {
|
|
||||||
if (lock == null) {
|
|
||||||
throw new RuntimeException("Server is locked!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
fileLockNodeManager.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLargeMessages() throws Exception {
|
public String getLargeMessages() throws Exception {
|
||||||
if (largeMessges == null) {
|
if (largeMessges == null) {
|
||||||
largeMessges = getFileConfiguration().getLargeMessagesLocation().getAbsolutePath();
|
largeMessges = getFileConfiguration().getLargeMessagesLocation().getAbsolutePath();
|
||||||
|
|
|
@ -63,12 +63,10 @@ public class PrintData extends DataAbstract implements Action {
|
||||||
public Object execute(ActionContext context) throws Exception {
|
public Object execute(ActionContext context) throws Exception {
|
||||||
super.execute(context);
|
super.execute(context);
|
||||||
try {
|
try {
|
||||||
testLock();
|
|
||||||
printData(new File(getBinding()), new File(getJournal()), new File(getPaging()));
|
printData(new File(getBinding()), new File(getJournal()), new File(getPaging()));
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
treatError(e, "data", "print");
|
treatError(e, "data", "print");
|
||||||
return e;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,12 +129,10 @@ public final class XmlDataExporter extends DataAbstract implements Action {
|
||||||
super.execute(context);
|
super.execute(context);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
testLock();
|
|
||||||
process(context.out, getBinding(), getJournal(), getPaging(), getLargeMessages());
|
process(context.out, getBinding(), getJournal(), getPaging(), getLargeMessages());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
treatError(e, "data", "exp");
|
treatError(e, "data", "exp");
|
||||||
return e;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,15 +93,6 @@ public class ArtemisTest {
|
||||||
// Some exceptions may happen on the initialization, but they should be ok on start the basic core protocol
|
// Some exceptions may happen on the initialization, but they should be ok on start the basic core protocol
|
||||||
Artemis.execute("run");
|
Artemis.execute("run");
|
||||||
|
|
||||||
Object object = Artemis.execute("data", "print");
|
|
||||||
Assert.assertTrue("An error was expected", object != null && object instanceof Throwable);
|
|
||||||
|
|
||||||
object = Artemis.execute("data", "compact");
|
|
||||||
Assert.assertTrue("An error was expected", object != null && object instanceof Throwable);
|
|
||||||
|
|
||||||
object = Artemis.execute("data", "exp");
|
|
||||||
Assert.assertTrue("An error was expected", object != null && object instanceof Throwable);
|
|
||||||
|
|
||||||
try (ServerLocator locator = ServerLocatorImpl.newLocator("tcp://localhost:61616");
|
try (ServerLocator locator = ServerLocatorImpl.newLocator("tcp://localhost:61616");
|
||||||
ClientSessionFactory factory = locator.createSessionFactory();
|
ClientSessionFactory factory = locator.createSessionFactory();
|
||||||
ClientSession coreSession = factory.createSession()) {
|
ClientSession coreSession = factory.createSession()) {
|
||||||
|
|
|
@ -21,7 +21,6 @@ import java.io.IOException;
|
||||||
import java.io.RandomAccessFile;
|
import java.io.RandomAccessFile;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.channels.FileChannel;
|
import java.nio.channels.FileChannel;
|
||||||
import java.nio.channels.FileLock;
|
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException;
|
import org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException;
|
||||||
import org.apache.activemq.artemis.api.core.SimpleString;
|
import org.apache.activemq.artemis.api.core.SimpleString;
|
||||||
|
@ -131,8 +130,6 @@ public abstract class NodeManager implements ActiveMQComponent {
|
||||||
releaseBackup();
|
releaseBackup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract FileLock tryLockLive();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensures existence of persistent information about the server's nodeID.
|
* Ensures existence of persistent information about the server's nodeID.
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -347,10 +347,9 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
protected NodeManager createNodeManager(final File directory, boolean replicatingBackup) {
|
protected NodeManager createNodeManager(final File directory, boolean replicatingBackup) {
|
||||||
NodeManager manager;
|
NodeManager manager;
|
||||||
if (!configuration.isPersistenceEnabled()) {
|
if (!configuration.isPersistenceEnabled()) {
|
||||||
return new InVMNodeManager(replicatingBackup);
|
manager = new InVMNodeManager(replicatingBackup);
|
||||||
}
|
}
|
||||||
|
else if (configuration.getJournalType() == JournalType.ASYNCIO && LibaioContext.isLoaded()) {
|
||||||
if (configuration.getJournalType() == JournalType.ASYNCIO && LibaioContext.isLoaded()) {
|
|
||||||
manager = new AIOFileLockNodeManager(directory, replicatingBackup, configuration.getJournalLockAcquisitionTimeout());
|
manager = new AIOFileLockNodeManager(directory, replicatingBackup, configuration.getJournalLockAcquisitionTimeout());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -73,15 +73,6 @@ public class FileLockNodeManager extends NodeManager {
|
||||||
super.start();
|
super.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileLock tryLockLive() {
|
|
||||||
try {
|
|
||||||
return tryLock(FileLockNodeManager.LIVE_LOCK_POS);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAwaitingFailback() throws Exception {
|
public boolean isAwaitingFailback() throws Exception {
|
||||||
return getState() == FileLockNodeManager.FAILINGBACK;
|
return getState() == FileLockNodeManager.FAILINGBACK;
|
||||||
|
|
|
@ -18,7 +18,6 @@ package org.apache.activemq.artemis.core.server.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.channels.FileLock;
|
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException;
|
import org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException;
|
||||||
|
@ -96,12 +95,6 @@ public final class InVMNodeManager extends NodeManager {
|
||||||
backupLock.acquire();
|
backupLock.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public FileLock tryLockLive() {
|
|
||||||
// no op.. doesn't make sense on InVM
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startLiveNode() throws Exception {
|
public void startLiveNode() throws Exception {
|
||||||
state = FAILING_BACK;
|
state = FAILING_BACK;
|
||||||
|
|
|
@ -16,11 +16,6 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.artemis.core.server.impl;
|
package org.apache.activemq.artemis.core.server.impl;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentMap;
|
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQException;
|
import org.apache.activemq.artemis.api.core.ActiveMQException;
|
||||||
import org.apache.activemq.artemis.api.core.Pair;
|
import org.apache.activemq.artemis.api.core.Pair;
|
||||||
import org.apache.activemq.artemis.api.core.SimpleString;
|
import org.apache.activemq.artemis.api.core.SimpleString;
|
||||||
|
@ -37,6 +32,11 @@ import org.apache.activemq.artemis.core.server.cluster.ActiveMQServerSideProtoco
|
||||||
import org.apache.activemq.artemis.core.server.cluster.ha.LiveOnlyPolicy;
|
import org.apache.activemq.artemis.core.server.cluster.ha.LiveOnlyPolicy;
|
||||||
import org.apache.activemq.artemis.core.server.cluster.ha.ScaleDownPolicy;
|
import org.apache.activemq.artemis.core.server.cluster.ha.ScaleDownPolicy;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
public class LiveOnlyActivation extends Activation {
|
public class LiveOnlyActivation extends Activation {
|
||||||
|
|
||||||
//this is how we act when we initially start as live
|
//this is how we act when we initially start as live
|
||||||
|
@ -55,11 +55,6 @@ public class LiveOnlyActivation extends Activation {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
/* We will hold a lock here so print-data and other tools
|
|
||||||
* won't be able to run */
|
|
||||||
activeMQServer.getNodeManager().startLiveNode();
|
|
||||||
|
|
||||||
activeMQServer.initialisePart1(false);
|
activeMQServer.initialisePart1(false);
|
||||||
|
|
||||||
activeMQServer.initialisePart2(false);
|
activeMQServer.initialisePart2(false);
|
||||||
|
@ -84,12 +79,6 @@ public class LiveOnlyActivation extends Activation {
|
||||||
scaleDownServerLocator.close();
|
scaleDownServerLocator.close();
|
||||||
scaleDownServerLocator = null;
|
scaleDownServerLocator = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
activeMQServer.getNodeManager().stop();
|
|
||||||
}
|
|
||||||
catch (Throwable ignored) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void freezeConnections(RemotingService remotingService) {
|
public void freezeConnections(RemotingService remotingService) {
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
package org.apache.activemq.artemis.tests.integration.discovery;
|
package org.apache.activemq.artemis.tests.integration.discovery;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.nio.channels.FileLock;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -177,11 +176,6 @@ public class DiscoveryBaseTest extends ActiveMQTestBase {
|
||||||
this.setNodeID(nodeID);
|
this.setNodeID(nodeID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public FileLock tryLockLive() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void awaitLiveNode() throws Exception {
|
public void awaitLiveNode() throws Exception {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue