You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by sa...@apache.org on 2015/11/06 11:51:15 UTC

[20/30] ode git commit: cluster enabled instance lock manager implementation-1

cluster enabled instance lock manager implementation-1


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

Branch: refs/heads/ODE-563
Commit: cfa4a97b0a0ec854790a16bcedcc5279afa6656a
Parents: 09a4486
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 23:43:55 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 23:43:55 2015 +0530

----------------------------------------------------------------------
 .../ode/bpel/AbstractInstanceLockManager.java   | 38 -------------------
 .../org/apache/ode/bpel/clapi/ClusterLock.java  |  4 +-
 .../apache/ode/bpel/clapi/ClusterManager.java   |  8 +++-
 .../bpel/iapi/AbstractInstanceLockManager.java  | 37 +++++++++++++++++++
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 24 ++++++++++--
 .../ode/bpel/engine/InstanceLockManager.java    |  2 +-
 .../hazelcast/HazelcastClusterImpl.java         |  3 +-
 .../hazelcast/HazelcastDeploymentLock.java      |  1 +
 .../hazelcast/HazelcastInstanceLock.java        | 39 ++++++++++----------
 9 files changed, 90 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
deleted file mode 100644
index 7a34b2c..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ode.bpel;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from
- * concurrent access when entering jacob
- */
-public abstract class AbstractInstanceLockManager {
-    abstract public void unlock(Long iid);
-
-    abstract public void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
-            TimeoutException;
-
-    /** Exception class indicating a time-out occured  while obtaining a lock. */
-    public static final class TimeoutException extends Exception {
-        private static final long serialVersionUID = 7247629086692580285L;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
index 9eaf705..118b275 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -38,14 +38,14 @@ public interface ClusterLock {
     boolean unlockMap(String key);
 
     /**
-     * Tries to acquire the lock for the specified key ant time period.
+     * Tries to acquire the lock for the specified key
      * @param key
      * @return
      */
     boolean tryLockMap(String key);
 
     /**
-     *
+     * Tries to acquire the lock for the specified key and time period.
      * @param key
      * @param time
      * @param tu

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index cbfb12f..d73810d 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -18,7 +18,7 @@
  */
 package org.apache.ode.bpel.clapi;
 
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.io.File;
 
@@ -58,7 +58,13 @@ public interface ClusterManager {
      */
     void registerClusterProcessStoreMessageListener();
 
+    /**
+     * Return deployment lock for cluster
+     */
     ClusterLock getDeploymentLock();
 
+    /**
+     * Return instance lock for cluster
+     */
     AbstractInstanceLockManager getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
new file mode 100644
index 0000000..b53ac65
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.bpel.iapi;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Abstract class to implement an instance lock manager
+ */
+public abstract class AbstractInstanceLockManager {
+    public abstract void unlock(Long iid);
+
+    public abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
+            TimeoutException;
+
+    /** Exception class indicating a time-out occured  while obtaining a lock. */
+    public static final class TimeoutException extends Exception {
+        private static final long serialVersionUID = 7247629086692580285L;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index e278c7d..fe38cf0 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -21,12 +21,22 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.evt.BpelEvent;
-import org.apache.ode.bpel.iapi.*;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.BpelEngine;
+import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.bpel.iapi.MessageExchange;
+import org.apache.ode.bpel.iapi.OdeGlobalConfig;
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
+import org.apache.ode.bpel.iapi.ProcessState;
+import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
@@ -50,7 +60,13 @@ import org.w3c.dom.Element;
 import javax.wsdl.Operation;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -98,7 +114,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private AbstractInstanceLockManager _instanceLockManager;
+    private final AbstractInstanceLockManager _instanceLockManager;
 
     final Contexts _contexts;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index dba127b..f712552 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -20,7 +20,7 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.util.HashMap;
 import java.util.Map;

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 57984c0..8eac0b6 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,7 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 
 /**
@@ -78,6 +78,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             uuid = localMember.getUuid();
             __log.info("Registering HZ localMember ID " + nodeID);
             markAsMaster();
+
             deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index 44bbea8..2f5aa4d 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -64,6 +64,7 @@ public class HazelcastDeploymentLock implements ClusterLock{
     }
 
     public boolean tryLockMap(String key,int time, TimeUnit tu) {
+        // Noting to do here.
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 40f1d66..6988746 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -20,9 +20,10 @@ package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -43,7 +44,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
     public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
             AbstractInstanceLockManager.TimeoutException {
         if (iid == null) {
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(" Instance Id null at lock[]");
             }
             return;
@@ -51,15 +52,15 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
         String thrd = Thread.currentThread().toString();
 
-        if(__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled()) {
             __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
         }
 
-        putIfAbsent(iid.toString(),iid.toString());
+        putIfAbsent(iid.toString(), iid.toString());
 
-        if (!tryLockMap(iid.toString(),time, tu)) {
+        if (!tryLockMap(iid.toString(), time, tu)) {
 
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(thrd + ": lock(iid=" + iid + ", " +
                         "time=" + time + tu + ")-->TIMEOUT");
             }
@@ -70,7 +71,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
     public void unlock(Long iid) {
         if (iid == null) {
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(" unlock, instance id is null");
             }
             return;
@@ -80,38 +81,38 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
         unlockMap(iid.toString());
 
-        if(__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled()) {
             __log.debug(thrd + " unlock(iid=" + iid + ")");
         }
     }
 
     public boolean lockMap(String key) {
-        _lock_map.lock(key);
+        // Noting to do here.
         return true;
     }
 
     public boolean unlockMap(String key) {
         if (_lock_map.get(key) == "true") {
             _lock_map.unlock(key);
-            _lock_map.replace(key,"false");
+            _lock_map.replace(key, "false");
+            return true;
         }
-        return true;
+        return false;
     }
 
     public boolean tryLockMap(String key) {
-        boolean state = _lock_map.tryLock(key);
-        return state;
+        // Noting to do here.
+        return true;
     }
 
-    public boolean tryLockMap(String key,int time, TimeUnit tu) {
-        boolean state = true;
+    public boolean tryLockMap(String key, int time, TimeUnit tu) {
+        boolean state = false;
         try {
-        state = _lock_map.tryLock(key,time,tu);
+            state = _lock_map.tryLock(key, time, tu);
         } catch (InterruptedException ex) {
-            __log.error(ex);
+            __log.error("Interruption occured" +ex);
         }
-
-        _lock_map.replace(key,"" +state);
+        _lock_map.replace(key, "" + state);
         return state;
     }
 }