You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2015/09/04 18:22:00 UTC

activemq-artemis git commit: fixing locking on the CLI & shared storage

Repository: activemq-artemis
Updated Branches:
  refs/heads/master 1e27f1a65 -> a82080978


fixing locking on the CLI & shared storage

The CLI lock was broken when two nodes were sharing the journals


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/a8208097
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/a8208097
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/a8208097

Branch: refs/heads/master
Commit: a82080978fa63a320bf30d5891a0d81f5be1b1b0
Parents: 1e27f1a
Author: Clebert Suconic <cl...@apache.org>
Authored: Fri Sep 4 12:05:20 2015 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Fri Sep 4 12:21:49 2015 -0400

----------------------------------------------------------------------
 .../apache/activemq/artemis/cli/Artemis.java    |  5 ++--
 .../artemis/cli/commands/Configurable.java      | 26 ++++++++++++++------
 .../activemq/artemis/cli/commands/Run.java      |  2 +-
 .../cli/commands/tools/LockAbstract.java        |  4 +--
 4 files changed, 23 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a8208097/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
index e094751..a72ee51 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
@@ -102,10 +102,9 @@ public class Artemis {
       String instance = artemisInstance != null ? artemisInstance.getAbsolutePath() : System.getProperty("artemis.instance");
       Cli.CliBuilder<Action> builder = Cli.<Action>builder("artemis").withDescription("ActiveMQ Artemis Command Line").withCommand(HelpAction.class).withCommand(Producer.class).withCommand(Consumer.class).withCommand(Browse.class).withDefaultCommand(HelpAction.class);
 
-      builder.withGroup("data").withDescription("data tools group (print|exp|imp|exp|encode|decode|compact) (example ./artemis data print)").
-         withDefaultCommand(HelpData.class).withCommands(PrintData.class, XmlDataExporter.class, XmlDataImporter.class, DecodeJournal.class, EncodeJournal.class, CompactJournal.class);
-
       if (instance != null) {
+         builder.withGroup("data").withDescription("data tools group (print|exp|imp|exp|encode|decode|compact) (example ./artemis data print)").
+            withDefaultCommand(HelpData.class).withCommands(PrintData.class, XmlDataExporter.class, XmlDataImporter.class, DecodeJournal.class, EncodeJournal.class, CompactJournal.class);
          builder = builder.withCommands(Run.class, Stop.class, Kill.class);
       }
       else {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a8208097/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Configurable.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Configurable.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Configurable.java
index f29a3e3..c4bd2d4 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Configurable.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Configurable.java
@@ -80,13 +80,25 @@ public abstract class Configurable extends ActionAbstract {
    private static RandomAccessFile serverLockFile = null;
    private static FileLock serverLockLock = null;
 
-   protected static void lock(File journalPlace) throws Exception {
-      journalPlace.mkdirs();
-      File fileLock = new File(journalPlace, "cli.lock");
-      RandomAccessFile file = new RandomAccessFile(fileLock, "rw");
-      serverLockLock = file.getChannel().tryLock();
-      if (serverLockLock == null) {
-         throw new CLIException("Error: There is another process using the journal at " + journalPlace + ". Cannot start the process!");
+   protected static void lockCLI(File lockPlace) throws Exception {
+      if (lockPlace != null) {
+         lockPlace.mkdirs();
+         File fileLock = new File(lockPlace, "cli.lock");
+         RandomAccessFile file = new RandomAccessFile(fileLock, "rw");
+         serverLockLock = file.getChannel().tryLock();
+         if (serverLockLock == null) {
+            throw new CLIException("Error: There is another process using the server at " + lockPlace + ". Cannot start the process!");
+         }
+      }
+   }
+
+   protected File getLockPlace() throws Exception {
+      String brokerInstance = getBrokerInstance();
+      if (brokerInstance != null) {
+         return new File(new File(brokerInstance),"lock");
+      }
+      else {
+         return null;
       }
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a8208097/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Run.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Run.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Run.java
index d585b90..ca13356 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Run.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Run.java
@@ -66,7 +66,7 @@ public class Run extends Configurable {
 
       FileConfiguration fileConfiguration = getFileConfiguration();
 
-      lock(fileConfiguration.getJournalLocation());
+      lockCLI(getLockPlace());
 
       Artemis.printBanner();
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a8208097/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/LockAbstract.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/LockAbstract.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/LockAbstract.java
index e451ef5..9a6984d 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/LockAbstract.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/LockAbstract.java
@@ -17,8 +17,6 @@
 
 package org.apache.activemq.artemis.cli.commands.tools;
 
-import java.io.File;
-
 import org.apache.activemq.artemis.cli.commands.Action;
 import org.apache.activemq.artemis.cli.commands.ActionContext;
 
@@ -26,7 +24,7 @@ public abstract class LockAbstract  extends DataAbstract implements Action {
    @Override
    public Object execute(ActionContext context) throws Exception {
       super.execute(context);
-      lock(new File(getJournal()));
+      lockCLI(getLockPlace());
 
       return null;
    }