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:50:56 UTC
[01/30] ode git commit: initial commit
Repository: ode
Updated Branches:
refs/heads/ODE-563 [created] 26dacc201
initial commit
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/50c4dfe0
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/50c4dfe0
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/50c4dfe0
Branch: refs/heads/ODE-563
Commit: 50c4dfe022c664e50519c0f048795cf787383b7f
Parents: 482c873
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jun 7 16:13:27 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jun 7 16:13:27 2015 +0530
----------------------------------------------------------------------
Rakefile | 18 ++-
.../java/org/apache/ode/axis2/ODEServer.java | 50 +++++++
.../apache/ode/bpel/hzapi/HazelcastCluster.java | 56 ++++++++
.../apache/ode/bpel/engine/BpelServerImpl.java | 5 +
.../org/apache/ode/bpel/engine/Contexts.java | 3 +
clustering/pom.xml | 30 ++++
.../java/org/apache/ode/clustering/Test.java | 4 +
.../hazelcast/HazelcastClusterImpl.java | 140 +++++++++++++++++++
.../hazelcast/HazelcastConstants.java | 29 ++++
.../hazelcast/HazelcastInstanceConfig.java | 56 ++++++++
dependencies.rb | 1 +
pom.xml | 1 +
12 files changed, 387 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 2a23e7b..1320043 100644
--- a/Rakefile
+++ b/Rakefile
@@ -83,10 +83,10 @@ define "ode" do
desc "ODE Axis Integration Layer"
define "axis2" do
compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-runtime",
- "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents"),
+ "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents", "clustering"),
AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.httpclient, COMMONS.lang,
DERBY, GERONIMO.kernel, GERONIMO.transaction, JAVAX.activation, JAVAX.servlet, JAVAX.stream,
- JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J
+ JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
test.exclude 'org.apache.ode.axis2.management.*'
test.with project("tools"), AXIOM, JAVAX.javamail, COMMONS.codec, COMMONS.httpclient, XERCES, WOODSTOX
@@ -99,12 +99,12 @@ define "ode" do
libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao",
"bpel-epr", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple",
"bpel-schemas", "bpel-store", "dao-hibernate", "jca-ra", "jca-server",
- "utils", "dao-jpa", "agents"),
+ "utils", "dao-jpa", "agents", "clustering"),
AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils,
COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream, JIBX,
GERONIMO.connector, GERONIMO.kernel, GERONIMO.transaction, LOG4J, OPENJPA, SAXON, TRANQL,
- WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, LOG4J
+ WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
package(:war).with(:libs=>libs).path("WEB-INF").tap do |web_inf|
web_inf.merge project("dao-jpa-ojpa-derby").package(:zip)
@@ -166,7 +166,7 @@ define "ode" do
desc "ODE APIs"
define "bpel-api" do
- compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J
+ compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J, HAZELCAST
package :jar
end
@@ -206,6 +206,12 @@ define "ode" do
package :jar
end
+ desc "ODE Clustering"
+ define "clustering" do
+ compile.with projects("bpel-api"),HAZELCAST, COMMONS.logging
+ package :jar
+ end
+
desc "ODE BPEL Object Model"
define "bpel-obj" do
compile.with project("utils"), SAXON, WSDL4J, COMMONS.collections
@@ -225,7 +231,7 @@ define "ode" do
desc "ODE Runtime Engine"
define "bpel-runtime" do
compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-obj", "bpel-schemas",
- "bpel-store", "utils", "agents"),
+ "bpel-store", "utils", "agents","clustering"),
COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 7cbf142..1547042 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -82,6 +82,9 @@ import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
+import org.apache.ode.clustering.hazelcast.*;
+import com.hazelcast.core.*;
+
/**
* Server class called by our Axis hooks to handle all ODE lifecycle management.
*
@@ -133,6 +136,14 @@ public class ODEServer {
public Runnable txMgrCreatedCallback;
+ private HazelcastInstanceConfig hazelcastInstanceConfig;
+
+ private HazelcastClusterImpl hazelcastClusterImpl;
+
+ private String clusteringState = "";
+
+ private boolean isClusteringEnabled;
+
public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
}
@@ -184,6 +195,11 @@ public class ODEServer {
if (txMgrCreatedCallback != null) {
txMgrCreatedCallback.run();
}
+
+ clusteringState = _odeConfig.getClusteringState();
+ if (isClusteringEnabled()) initClustering();
+ else __log.info("Clustering has not been initialized");
+
__log.debug("Creating data source.");
initDataSource();
__log.debug("Starting DAO.");
@@ -455,6 +471,39 @@ public class ODEServer {
}
}
+ public boolean isClusteringEnabled() {
+ boolean state;
+ if (clusteringState.equals("true")) state = true;
+ else state = false;
+ setClustering(state);
+ return state;
+ }
+
+ public void setClustering (boolean state) {
+ isClusteringEnabled = state;
+ }
+
+ public boolean getClusteringState() {
+ return isClusteringEnabled;
+ }
+
+ /**
+ * Initialize the clustering if it is enabled
+ */
+ private void initClustering() {
+ String hzConfig = System.getProperty("hazelcast.config");
+ if (hzConfig != null) hazelcastInstanceConfig = new HazelcastInstanceConfig();
+ else {
+ File hzXml = new File(_configRoot, "hazelcast.xml");
+ if (!hzXml.isFile())
+ __log.error("hazelcast.xml does not exist or is not a file");
+ else hazelcastInstanceConfig = new HazelcastInstanceConfig(hzXml);
+ }
+ if (hazelcastInstanceConfig != null) {
+ hazelcastClusterImpl = new HazelcastClusterImpl(hazelcastInstanceConfig.getHazelcastInstance());
+ }
+ }
+
/**
* Initialize the DAO.
*
@@ -533,6 +582,7 @@ public class ODEServer {
_bpelServer.setCronScheduler(_cronScheduler);
_bpelServer.setDaoConnectionFactory(_daoCF);
+ _bpelServer.setHazelcastCluster(hazelcastClusterImpl);
_bpelServer.setInMemDaoConnectionFactory(new BpelDAOConnectionFactoryImpl(_scheduler, _odeConfig.getInMemMexTtl()));
_bpelServer.setEndpointReferenceContext(eprContext);
_bpelServer.setMessageExchangeContext(new MessageExchangeContextImpl(this));
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
new file mode 100644
index 0000000..4e03c7d
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
@@ -0,0 +1,56 @@
+/*
+ * 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.hzapi;
+
+import com.hazelcast.core.Member;
+
+import java.util.List;
+
+public interface HazelcastCluster {
+
+ /**
+ * Initialization of the cluster
+ */
+ void init();
+
+ /**
+ * Get hostName + port nu of Member
+ * @param member
+ * @return
+ */
+ String getHazelCastNodeID(Member member);
+
+ /**
+ * Check whether current node is the leader or not.
+ */
+ void isLeader();
+
+ /**
+ * returns Current Nodes in the cluster.
+ * @return
+ */
+ List<String> getKnownNodes();
+
+ /**
+ * Return isMaster
+ * @return
+ */
+ boolean getIsMaster();
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index 666ed65..92e9784 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -59,6 +59,7 @@ import org.apache.ode.bpel.iapi.Scheduler.MapSerializableRunnable;
import org.apache.ode.bpel.iapi.Scheduler.Synchronizer;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.o.OProcess;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import org.apache.ode.utils.msg.MessageBundle;
import org.apache.ode.utils.stl.CollectionsX;
import org.apache.ode.utils.stl.MemberOfFunction;
@@ -534,6 +535,10 @@ public class BpelServerImpl implements BpelServer, Scheduler.JobProcessor {
_contexts.bindingContext = bc;
}
+ public void setHazelcastCluster(HazelcastClusterImpl hzCImpl) {
+ _contexts.hazelcastClusterImpl = hzCImpl;
+ }
+
public DebuggerContext getDebugger(QName pid) throws BpelEngineException {
return _engine._activeProcesses.get(pid)._debugger;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
index 9fa3258..115f4f7 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
@@ -28,6 +28,7 @@ import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.evar.ExternalVariableModule;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import java.util.HashMap;
import java.util.List;
@@ -46,6 +47,8 @@ public class Contexts {
public CronScheduler cronScheduler;
+ public HazelcastClusterImpl hazelcastClusterImpl;
+
EndpointReferenceContext eprContext;
BindingContext bindingContext;
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/pom.xml
----------------------------------------------------------------------
diff --git a/clustering/pom.xml b/clustering/pom.xml
new file mode 100644
index 0000000..d0e4b7c
--- /dev/null
+++ b/clustering/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-clustering</artifactId>
+ <name>ODE :: Clustering</name>
+ <parent>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </parent>
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/Test.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/Test.java b/clustering/src/main/java/org/apache/ode/clustering/Test.java
new file mode 100644
index 0000000..0e25733
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/Test.java
@@ -0,0 +1,4 @@
+package org.apache.ode.clustering;
+
+public class Test {
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/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
new file mode 100644
index 0000000..afe0e95
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -0,0 +1,140 @@
+/*
+ * 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.clustering.hazelcast;
+
+import com.hazelcast.core.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.ode.bpel.hzapi.HazelcastCluster;
+
+/**
+ * This class implements necessary methods to build the cluster using hazelcast
+ */
+public class HazelcastClusterImpl implements HazelcastCluster{
+ private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
+
+ private HazelcastInstance _hazelcastInstance;
+ private boolean isMaster = false;
+ private String message = "";
+ private Member leader;
+
+ public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
+ _hazelcastInstance = hazelcastInstance;
+ init();
+ }
+
+ public void init() {
+ // Registering this node in the cluster.
+ _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+
+ // Register for listening to message listener
+ ITopic<String> clusterMessageTopic = _hazelcastInstance.getTopic("clusterMsg");
+ clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+
+ Member localMember = _hazelcastInstance.getCluster().getLocalMember();
+ String localMemberID = getHazelCastNodeID(localMember);
+ __log.info("Registering HZ localMember ID " + localMemberID);
+ _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
+ .put(localMemberID, isMaster);
+ }
+
+ public String getHazelCastNodeID(Member member) {
+ String hostName = member.getSocketAddress().getHostName();
+ int port = member.getSocketAddress().getPort();
+ return hostName + ":" + port;
+ }
+
+ class ClusterManager {
+ IMap<String, String> lock_map;
+
+ ClusterManager() {
+ lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+ }
+
+ void lock(String key) {
+ lock_map.lock(key);
+ }
+
+ void unlock(String key) {
+ lock_map.unlock(key);
+ }
+ }
+
+ class ClusterMemberShipListener implements MembershipListener {
+
+ @Override
+ public void memberAdded(MembershipEvent membershipEvent) {
+ // Noting to do here.
+ }
+
+ @Override
+ public void memberRemoved(MembershipEvent membershipEvent) {
+ isLeader();
+ // Allow Leader to update distributed map.
+ if (isMaster) {
+ String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
+ _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
+ _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
+ }
+ }
+
+ @Override
+ public void memberAttributeChanged(MemberAttributeEvent memberAttributeEvent) {
+ // Noting to do here.
+ }
+ }
+
+ class ClusterMessageListener implements MessageListener<String> {
+ @Override
+ public void onMessage(Message<String> msg) {
+ message = msg.getMessageObject();
+ }
+ }
+
+
+ public void isLeader() {
+ leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
+ if (leader.localMember()) {
+ isMaster = true;
+ }
+ __log.info(isMaster);
+ }
+
+ public List<String> getKnownNodes() {
+ List<String> nodeList = new ArrayList<String>();
+ for (Object s : _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).keySet()) {
+ nodeList.add((String) _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).get(s));
+ }
+ return nodeList;
+ }
+
+ public boolean getIsMaster() {
+ return isMaster;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
new file mode 100644
index 0000000..e201b70
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. 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.clustering.hazelcast;
+
+/**
+ * Constants used in Hazelcast based clustering implementation
+ */
+public final class HazelcastConstants {
+ public static final String ODE_CLUSTER_NODE_MAP = "ODE_NODE_ID_MAP";
+ public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
+
+ private HazelcastConstants() {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
new file mode 100644
index 0000000..9e8c59b
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
@@ -0,0 +1,56 @@
+/*
+* 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.clustering.hazelcast;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.config.FileSystemXmlConfig;
+import com.hazelcast.core.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+/**
+ * This is to create hazelcast instance.
+ * It sets the config object using hazelcast.xml file.First, it looks for the hazelcast.config system property. If it is set, its value is used as the path.
+ * Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+ */
+public class HazelcastInstanceConfig {
+ private HazelcastInstance hazelcastInstance;
+
+ public HazelcastInstanceConfig() {
+ hazelcastInstance = Hazelcast.newHazelcastInstance();
+ }
+
+ /**
+ *
+ * @param hzXml
+ */
+ public HazelcastInstanceConfig(File hzXml) {
+ try {
+ Config config = new FileSystemXmlConfig(hzXml);
+ hazelcastInstance = Hazelcast.newHazelcastInstance(config);
+ } catch (FileNotFoundException fnf) {
+ }
+ }
+
+ public HazelcastInstance getHazelcastInstance() {
+ return hazelcastInstance;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index 9a69f1a..33da5e4 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,6 +75,7 @@ GERONIMO = struct(
:transaction =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
:connector =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
)
+HAZELCAST ="com.hazelcast:hazelcast:jar:3.4.2"
HIBERNATE = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
"asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
HSQLDB = "hsqldb:hsqldb:jar:1.8.0.7"
http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c43c2d0..f36373c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,6 +165,7 @@
<module>jbi-karaf-pmapi-httpbinding</module>
<module>axis2-war</module>
<module>bpel-itest</module>
+ <module>clustering</module>
</modules>
<build>
[29/30] ode git commit: appended the Apache Licence in new files
Posted by sa...@apache.org.
appended the Apache Licence in new files
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/6c92a254
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/6c92a254
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/6c92a254
Branch: refs/heads/ODE-563
Commit: 6c92a254a2a0d90540cd36f2b23fe9ba6d7effa5
Parents: 8fe5546
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Sep 18 13:56:20 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Sep 18 13:56:20 2015 +0530
----------------------------------------------------------------------
.../ode/bpel/clapi/ClusterProcessStore.java | 18 +++++++++++
.../hazelcast/HazelcastConstants.java | 33 ++++++++++----------
2 files changed, 35 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/6c92a254/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
index 45ff33c..ca792bc 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
@@ -1,3 +1,21 @@
+/*
+ * 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.clapi;
import java.util.Collection;
http://git-wip-us.apache.org/repos/asf/ode/blob/6c92a254/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index aa787e9..8f204ff 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -1,20 +1,21 @@
/*
-* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
-*
-* WSO2 Inc. 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.
-*/
+ * 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.clustering.hazelcast;
/**
[27/30] ode git commit: Done cleanup within cluster implementation
Posted by sa...@apache.org.
Done cleanup within cluster implementation
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/348ae9de
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/348ae9de
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/348ae9de
Branch: refs/heads/ODE-563
Commit: 348ae9deb804ac5e9a9f1bafd1ebdbf53b490e1a
Parents: 43a8df8
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 26 15:55:32 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 26 15:55:32 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 37 ++---
.../ode/axis2/deploy/DeploymentPoller.java | 3 +-
.../ode/axis2/service/DeploymentWebService.java | 40 ++---
.../apache/ode/bpel/clapi/ClusterManager.java | 7 +-
.../bpel/clapi/ProcessStoreClusterEvent.java | 11 +-
.../bpel/clapi/ProcessStoreClusterListener.java | 24 +++
.../ode/il/config/OdeConfigProperties.java | 12 +-
.../ode/store/ClusterProcessStoreImpl.java | 5 +-
.../hazelcast/HazelcastClusterImpl.java | 152 ++++++++++++++-----
.../hazelcast/HazelcastConstants.java | 6 +-
repositories.rb | 2 +-
.../ode/scheduler/simple/SimpleScheduler.java | 16 +-
12 files changed, 192 insertions(+), 123 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index b3f5d2f..4860150 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -32,6 +32,7 @@ import org.apache.ode.axis2.service.ManagementService;
import org.apache.ode.axis2.util.ClusterUrlTransformer;
import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.clapi.ClusterMemberListener;
+import org.apache.ode.bpel.clapi.ClusterProcessStore;
import org.apache.ode.bpel.connector.BpelServerConnector;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -119,7 +120,7 @@ public class ODEServer {
public Runnable txMgrCreatedCallback;
- private boolean isClusteringEnabled = false;
+ private boolean clusteringEnabled = false;
public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
@@ -173,8 +174,8 @@ public class ODEServer {
txMgrCreatedCallback.run();
}
- String clusteringState = _odeConfig.getClusteringState();
- if (clusteringState != null && isClusteringEnabled(clusteringState)) {
+ clusteringEnabled = _odeConfig.isClusteringEnabled();
+ if (clusteringEnabled) {
initClustering();
} else __log.info(__msgs.msgOdeClusteringNotInitialized());
@@ -197,10 +198,9 @@ public class ODEServer {
_store.loadAll();
if (_clusterManager != null) {
- _clusterManager.registerClusterProcessStoreMessageListener();
- if (_scheduler instanceof SimpleScheduler) {
- _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
- }
+ _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
+ _clusterManager.setClusterProcessStore((ClusterProcessStore) _store);
+ _clusterManager.init(_configRoot);
}
try {
@@ -466,20 +466,8 @@ public class ODEServer {
}
}
- private boolean isClusteringEnabled(String clusteringState) {
- boolean state;
- if (clusteringState.equals("true")) state = true;
- else state = false;
- setClustering(state);
- return state;
- }
-
- private void setClustering (boolean state) {
- isClusteringEnabled = state;
- }
-
- public boolean getIsCluteringEnabled() {
- return isClusteringEnabled;
+ public boolean isClusteringEnabled() {
+ return clusteringEnabled;
}
/**
@@ -493,7 +481,6 @@ public class ODEServer {
} catch (Exception ex) {
__log.error("Error while loading class : " + clusterImplName, ex);
}
- _clusterManager.init(_configRoot);
}
/**
@@ -524,15 +511,15 @@ public class ODEServer {
}
protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
- if (isClusteringEnabled)
+ if (clusteringEnabled)
return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, _clusterManager);
else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
}
protected Scheduler createScheduler() {
SimpleScheduler scheduler;
- if (isClusteringEnabled) {
- scheduler = new SimpleScheduler(_clusterManager.getUuid(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+ if (clusteringEnabled) {
+ scheduler = new SimpleScheduler(_clusterManager.getNodeID(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), clusteringEnabled);
scheduler.setClusterManager(_clusterManager);
} else
scheduler = new SimpleScheduler(new GUID().toString(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index baa790b..169ca4f 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -49,7 +49,6 @@ import org.apache.ode.utils.WatchDog;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileFilter;
-import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
@@ -99,7 +98,7 @@ public class DeploymentPoller {
public DeploymentPoller(File deployDir, final ODEServer odeServer) {
_odeServer = odeServer;
_deployDir = deployDir;
- clusterEnabled = _odeServer.getIsCluteringEnabled();
+ clusterEnabled = _odeServer.isClusteringEnabled();
if (!_deployDir.exists()) {
boolean isDeployDirCreated = _deployDir.mkdir();
if (!isDeployDirCreated) {
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 61bf00d..01e003b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -20,24 +20,6 @@
package org.apache.ode.axis2.service;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.activation.DataHandler;
-import javax.wsdl.Definition;
-import javax.wsdl.WSDLException;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
-import javax.xml.namespace.QName;
-
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNamespace;
@@ -45,27 +27,37 @@ import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
-import org.apache.ode.bpel.clapi.ClusterLock;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.receivers.AbstractMessageReceiver;
import org.apache.axis2.util.Utils;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.commons.lang.StringUtils;
import org.apache.ode.axis2.ODEServer;
import org.apache.ode.axis2.OdeFault;
import org.apache.ode.axis2.deploy.DeploymentPoller;
import org.apache.ode.axis2.hooks.ODEAxisService;
-import org.apache.ode.bpel.iapi.BpelServer;
+import org.apache.ode.bpel.clapi.ClusterLock;
import org.apache.ode.bpel.iapi.ProcessConf;
import org.apache.ode.bpel.iapi.ProcessStore;
import org.apache.ode.il.OMUtils;
-import org.apache.ode.utils.fs.FileUtils;
import org.apache.ode.utils.Namespaces;
+import org.apache.ode.utils.fs.FileUtils;
+
+import javax.activation.DataHandler;
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+import java.io.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
/**
* Axis wrapper for process deployment.
@@ -95,7 +87,7 @@ public class DeploymentWebService {
_store = store;
_poller = poller;
_odeServer = odeServer;
- clusterEnabled = _odeServer.getIsCluteringEnabled();
+ clusterEnabled = _odeServer.isClusteringEnabled();
Definition def;
WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/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 07d3d8d..5a2e0f9 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
@@ -38,7 +38,7 @@ public interface ClusterManager {
* Return whether the local member is Master or not
* @return
*/
- boolean getIsMaster();
+ boolean isMaster();
/**
* Set the Process Store object which uses for clustering
@@ -55,8 +55,7 @@ public interface ClusterManager {
/**
* Register the cluster for message listener
*/
- void registerClusterProcessStoreMessageListener();
-
+ void registerClusterProcessStoreMessageListener(ProcessStoreClusterListener listener);
/**
* Register Scheduler as ClusterMemberListener
* @param listener
@@ -81,5 +80,5 @@ public interface ClusterManager {
/**
* Return local member's uuid in the cluster
*/
- String getUuid();
+ String getNodeID();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
index a396f6f..79d9a78 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
@@ -27,7 +27,8 @@ public abstract class ProcessStoreClusterEvent implements Serializable {
protected String info ;
- private String uuid;
+ /** Unique ID of the Node in the Cluster generating the Event */
+ private String eventGeneratingNode;
public ProcessStoreClusterEvent(String deploymentUnit) {
this.deploymentUnit = deploymentUnit;
@@ -38,12 +39,12 @@ public abstract class ProcessStoreClusterEvent implements Serializable {
return "{ProcessStoreClusterEvent#" + deploymentUnit +"}";
}
- public void setUuid(String uuid) {
- this.uuid = uuid;
+ public void setEventGeneratingNode(String uuid) {
+ this.eventGeneratingNode = uuid;
}
- public String getUuid() {
- return uuid;
+ public String getEventGeneratingNode() {
+ return eventGeneratingNode;
}
public String getDuName() {
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
new file mode 100644
index 0000000..26f42cf
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
@@ -0,0 +1,24 @@
+/*
+ * 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.clapi;
+
+public interface ProcessStoreClusterListener {
+ public void onProcessStoreClusterEvent(ProcessStoreClusterEvent message);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index 5c0ed13..5697422 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -19,6 +19,10 @@
package org.apache.ode.il.config;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.utils.SystemUtils;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -26,10 +30,6 @@ import java.io.IOException;
import java.util.Map;
import java.util.Properties;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ode.utils.SystemUtils;
-
/**
* Configuration object used for configuring the intergration layer. The propereties are those likely to be common to all layers.
*
@@ -295,8 +295,8 @@ public class OdeConfigProperties {
return getProperty(OdeConfigProperties.PROP_DEPLOY_DIR);
}
- public String getClusteringState() {
- return getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED);
+ public boolean isClusteringEnabled() {
+ return Boolean.valueOf(getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED, "false"));
}
public String getClusteringImplClass() {
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 51fea5a..d701e23 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -47,7 +47,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
super(eprContext,ds,persistenceType,props,createDatamodel);
_clusterManager = clusterManager;
- _clusterManager.setClusterProcessStore(this);
}
public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -59,7 +58,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
private void publishProcessStoreDeployedEvent(String duName){
deployedEvent = new ProcessStoreDeployedEvent(duName);
_clusterManager.publishProcessStoreClusterEvent(deployedEvent);
- __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getUuid());
+ __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getEventGeneratingNode());
}
public void deployProcesses(final String duName) {
@@ -121,7 +120,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
private void publishProcessStoreUndeployedEvent(String duName){
undeployedEvent = new ProcessStoreUndeployedEvent(duName);
_clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
- __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getUuid());
+ __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getEventGeneratingNode());
}
/**
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/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 f68068a..9d2a554 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
@@ -18,8 +18,20 @@
*/
package org.apache.ode.clustering.hazelcast;
-import com.hazelcast.core.*;
+import com.hazelcast.config.Config;
import com.hazelcast.config.FileSystemXmlConfig;
+import com.hazelcast.config.ListenerConfig;
+import com.hazelcast.config.TopicConfig;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IMap;
+import com.hazelcast.core.ITopic;
+import com.hazelcast.core.Member;
+import com.hazelcast.core.MemberAttributeEvent;
+import com.hazelcast.core.MembershipEvent;
+import com.hazelcast.core.MembershipListener;
+import com.hazelcast.core.Message;
+import com.hazelcast.core.MessageListener;
import java.io.File;
import java.io.FileNotFoundException;
@@ -34,21 +46,28 @@ import org.apache.ode.bpel.clapi.*;
/**
* This class implements necessary methods to build the cluster using hazelcast
*/
-public class HazelcastClusterImpl implements ClusterManager {
+public class HazelcastClusterImpl implements ClusterManager, ProcessStoreClusterListener {
private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
+ private String nodeHostName;
private String nodeID;
- private String uuid;
- private Member leader;
private IMap<String, String> deployment_lock_map;
private IMap<Long, Long> instance_lock_map;
- private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
+ private ITopic<ProcessStoreClusterEvent> clusterDeploymentMessageTopic;
private ClusterProcessStore _clusterProcessStore;
- private ClusterMemberListener _listener;
private ClusterLock<String> _hazelcastDeploymentLock;
private ClusterLock<Long> _hazelcastInstanceLock;
+ private ClusterDeploymentMessageListener clusterDeploymentMessageListener;
+ private ClusterMemberShipListener clusterMemberShipListener;
+ private List<ClusterMemberListener> clusterMemberListenerList = null;
+
+ public HazelcastClusterImpl() {
+ clusterMemberShipListener = new ClusterMemberShipListener();
+ clusterDeploymentMessageListener = new ClusterDeploymentMessageListener();
+ clusterDeploymentMessageListener.registerClusterProcessStoreListener((ProcessStoreClusterListener)this);
+ }
public void init(File configRoot) {
@@ -63,7 +82,8 @@ public class HazelcastClusterImpl implements ClusterManager {
__log.error("hazelcast.xml does not exist or is not a file");
else
try {
- _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+ Config config = loadConfig(hzXml);
+ _hazelcastInstance = Hazelcast.newHazelcastInstance(config);
} catch (FileNotFoundException fnf) {
__log.error(fnf);
}
@@ -71,37 +91,71 @@ public class HazelcastClusterImpl implements ClusterManager {
if (_hazelcastInstance != null) {
// Registering this node in the cluster.
- _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+ //_hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
Member localMember = _hazelcastInstance.getCluster().getLocalMember();
- nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
- uuid = localMember.getUuid();
- __log.info("Registering HZ localMember ID " + nodeID);
-
- markAsMaster();
+ nodeHostName = localMember.getSocketAddress().getHostName() + ":" + localMember.getSocketAddress().getPort();
+ nodeID = localMember.getUuid();
+ __log.info("Registering HZ localMember:" + nodeHostName);
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);
+ clusterDeploymentMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
_hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
_hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
+
+ markAsMaster();
}
}
+ protected Config loadConfig(File hazelcastConfigFile) throws FileNotFoundException {
+ Config config = new FileSystemXmlConfig(hazelcastConfigFile);
+
+ //add Cluster membership listener
+ ListenerConfig clusterMemberShipListenerConfig = new ListenerConfig();
+ clusterMemberShipListenerConfig.setImplementation(clusterMemberShipListener);
+ config.addListenerConfig(clusterMemberShipListenerConfig);
+
+ //set topic message listener
+ ListenerConfig topicListenerConfig = new ListenerConfig();
+ topicListenerConfig.setImplementation(clusterDeploymentMessageListener);
+ TopicConfig topicConfig = config.getTopicConfig(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
+ topicConfig.addMessageListenerConfig(topicListenerConfig);
+
+ return config;
+ }
+
class ClusterMemberShipListener implements MembershipListener {
+
+ public ClusterMemberShipListener() {
+ clusterMemberListenerList = new ArrayList<ClusterMemberListener>();
+ }
+
+ public void registerClusterMemberListener(ClusterMemberListener listener) {
+ clusterMemberListenerList.add(listener);
+ }
+
@Override
public void memberAdded(MembershipEvent membershipEvent) {
- String nodeId = membershipEvent.getMember().getUuid();
- __log.info("Member Added " +nodeId);
- if(isMaster && _listener != null) _listener.memberAdded(nodeId);
+ String eventNodeID = membershipEvent.getMember().getUuid();
+ __log.info("Member Added " + eventNodeID);
+ if (isMaster) {
+ for (ClusterMemberListener listener : clusterMemberListenerList) {
+ listener.memberAdded(eventNodeID);
+ }
+ }
}
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
- String nodeId = membershipEvent.getMember().getUuid();
- __log.info("Member Removed " + nodeId);
+ String eventNodeID = membershipEvent.getMember().getUuid();
+ __log.info("Member Removed " + eventNodeID);
markAsMaster();
- if(isMaster && _listener != null) _listener.memberRemoved(nodeId);
+ if (isMaster) {
+ for (ClusterMemberListener listener : clusterMemberListenerList) {
+ listener.memberRemoved(eventNodeID);
+ }
+ }
}
@Override
@@ -111,36 +165,48 @@ public class HazelcastClusterImpl implements ClusterManager {
}
public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
- clusterEvent.setUuid(uuid);
- __log.info("Send " +clusterEvent.getInfo() +" Cluster Message " +"for " +clusterEvent.getDuName() +" [" +nodeID +"]");
- clusterMessageTopic.publish(clusterEvent);
+ clusterEvent.setEventGeneratingNode(nodeID);
+ __log.info("Send " + clusterEvent.getInfo() + " Cluster Message " + "for " + clusterEvent.getDuName() + " [" + nodeHostName + "]");
+ clusterDeploymentMessageTopic.publish(clusterEvent);
}
- class ClusterMessageListener implements MessageListener<ProcessStoreClusterEvent> {
+ class ClusterDeploymentMessageListener implements MessageListener<ProcessStoreClusterEvent> {
+ List<ProcessStoreClusterListener> clusterProcessStoreListenerList = null;
+
+ public ClusterDeploymentMessageListener() {
+ clusterProcessStoreListenerList = new ArrayList<ProcessStoreClusterListener>();
+ }
+
+ public void registerClusterProcessStoreListener(ProcessStoreClusterListener listener) {
+ clusterProcessStoreListenerList.add(listener);
+ }
+
@Override
public void onMessage(Message<ProcessStoreClusterEvent> msg) {
- handleEvent(msg.getMessageObject());
+ for (ProcessStoreClusterListener listener : clusterProcessStoreListenerList) {
+ listener.onProcessStoreClusterEvent(msg.getMessageObject());
+ }
}
}
- private void handleEvent(ProcessStoreClusterEvent message) {
+ public void onProcessStoreClusterEvent(ProcessStoreClusterEvent message) {
if (message instanceof ProcessStoreDeployedEvent) {
ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
- String eventUuid = event.getUuid();
- if (!uuid.equals(eventUuid)) {
+ String eventUuid = event.getEventGeneratingNode();
+ if (!nodeID.equals(eventUuid)) {
String duName = event.getDuName();
- __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
+ __log.info("Receive " + event.getInfo() + " Cluster Message " + "for " + event.getDuName() + " [" + nodeHostName + "]");
_clusterProcessStore.deployProcesses(duName);
}
}
else if (message instanceof ProcessStoreUndeployedEvent) {
ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
- String eventUuid = event.getUuid();
- if (!uuid.equals(eventUuid)) {
+ String eventUuid = event.getEventGeneratingNode();
+ if (!nodeID.equals(eventUuid)) {
String duName = event.getDuName();
- __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
+ __log.info("Receive " + event.getInfo() + " Cluster Message " + "for " + event.getDuName() + " [" + nodeHostName + "]");
_clusterProcessStore.undeployProcesses(duName);
}
}
@@ -148,36 +214,38 @@ public class HazelcastClusterImpl implements ClusterManager {
}
private void markAsMaster() {
- leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
- if (leader.localMember() && isMaster == false) {
+ Member member = _hazelcastInstance.getCluster().getMembers().iterator().next();
+ if (member.localMember() && isMaster == false) {
isMaster = true;
- if(_listener != null) _listener.memberElectedAsMaster(uuid);
+ for (ClusterMemberListener listener : clusterMemberListenerList) {
+ listener.memberElectedAsMaster(nodeID);
+ }
}
__log.info(isMaster);
}
- public boolean getIsMaster() {
+ public boolean isMaster() {
return isMaster;
}
- public String getUuid() {
- return uuid;
+ public String getNodeID() {
+ return nodeID;
}
public void setClusterProcessStore(ClusterProcessStore store) {
_clusterProcessStore = store;
}
- public void registerClusterProcessStoreMessageListener() {
- clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+ public void registerClusterProcessStoreMessageListener(ProcessStoreClusterListener listener) {
+ clusterDeploymentMessageListener.registerClusterProcessStoreListener(listener);
}
public void registerClusterMemberListener(ClusterMemberListener listener) {
- _listener = listener;
+ clusterMemberShipListener.registerClusterMemberListener(listener);
}
public void shutdown() {
- if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
+ if (_hazelcastInstance != null) _hazelcastInstance.shutdown();
}
public ClusterLock<String> getDeploymentLock(){
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index 76e7341..aa787e9 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,9 +21,9 @@ package org.apache.ode.clustering.hazelcast;
* Constants used in Hazelcast based clustering implementation
*/
public final class HazelcastConstants {
- public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "DEPLOYMENT_LOCK";
- public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK = "PROCESS_INSTANCE_LOCK ";
- public static final String ODE_CLUSTER_MSG = "CLUSTER_MSG";
+ public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "ODE_DEPLOYMENT_LOCK";
+ public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK = "ODE_PROCESS_INSTANCE_LOCK ";
+ public static final String ODE_CLUSTER_DEPLOYMENT_TOPIC = "ODE_DEPLOYMENT_TOPIC";
private HazelcastConstants() {
}
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/repositories.rb
----------------------------------------------------------------------
diff --git a/repositories.rb b/repositories.rb
index f6a40fa..e23cde1 100644
--- a/repositories.rb
+++ b/repositories.rb
@@ -15,5 +15,5 @@
repositories.remote << "http://repo1.maven.org/maven2"
repositories.remote << "http://people.apache.org/~vanto/m2/"
-repositories.remote << "https://repository.apache.org/content/groups/snapshots"
+repositories.remote << "http://repository.apache.org/content/groups/snapshots"
repositories.release_to[:url] ||= "sftp://guest@localhost/home/guest"
http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index df33ae0..1da5571 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -482,7 +482,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
if(!_isClusterEnabled) enqueueTasksReadnodeIds();
else {
- if (_clusterManager.getIsMaster()) enqueueTasksReadnodeIds();
+ if (_clusterManager.isMaster()) enqueueTasksReadnodeIds();
}
_todo.start();
@@ -725,16 +725,16 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
}
}
- /*public void updateHeartBeat(String nodeId) {
+ public void updateHeartBeat(String nodeId) {
if (nodeId == null)
return;
- if (_nodeId.equals(nodeId))
- return;
+ /*if (_nodeId.equals(nodeId))
+ return;*/
- _lastHeartBeat.put(nodeId, System.currentTimeMillis());
+ //_lastHeartBeat.put(nodeId, System.currentTimeMillis());
_knownNodes.add(nodeId);
- }*/
+ }
boolean doLoadImmediate() {
__log.debug("LOAD IMMEDIATE started");
@@ -815,7 +815,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
final ArrayList<String> activeNodes;
// for cluster mode
- if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+ if (_isClusterEnabled && _clusterManager.isMaster()) {
activeNodes = (ArrayList) _clusterManager.getActiveNodes();
}
//for standalone ODE deployments
@@ -984,7 +984,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
// for cluster mode
- if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+ if (_isClusterEnabled && _clusterManager.isMaster()) {
ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
//find stale nodes
[22/30] ode git commit: removed additional imports
Posted by sa...@apache.org.
removed additional imports
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/9a0b7428
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/9a0b7428
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/9a0b7428
Branch: refs/heads/ODE-563
Commit: 9a0b7428b3bd92ffe2a7d44c08efa67c8a93ccc3
Parents: dfb500c
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 12 20:54:47 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 12 20:54:47 2015 +0530
----------------------------------------------------------------------
.../apache/ode/bpel/engine/BpelEngineImpl.java | 19 +++++++++--
.../ode/scheduler/simple/SimpleScheduler.java | 33 ++++++++++++++------
2 files changed, 41 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/9a0b7428/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 feb4cd1..db2febb 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
@@ -26,7 +26,17 @@ 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.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,12 @@ 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;
/**
http://git-wip-us.apache.org/repos/asf/ode/blob/9a0b7428/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a0d67ce..a56b86e 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,18 +19,33 @@
package org.apache.ode.scheduler.simple;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.Scheduler;
-import javax.transaction.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
-
/**
* A reliable and relatively simple scheduler that uses a database to persist information about
* scheduled tasks.
@@ -493,9 +508,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
return;
_todo.stop();
- _todo.clearTasks(UpgradeJobsTask.class); //check gsoc
+ _todo.clearTasks(UpgradeJobsTask.class);
_todo.clearTasks(LoadImmediateTask.class);
- _todo.clearTasks(CheckStaleNodes.class); //check gsoc
+ _todo.clearTasks(CheckStaleNodes.class);
_processedSinceLastLoadTask.clear();
_outstandingJobs.clear();
[25/30] ode git commit: Cluster Enabled Simple Scheduler-2
Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-2
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/3f5ef53a
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/3f5ef53a
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/3f5ef53a
Branch: refs/heads/ODE-563
Commit: 3f5ef53ab9f248d3f443196bd96de6507ad94148
Parents: 15f1883
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jul 21 00:21:05 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jul 21 00:21:05 2015 +0530
----------------------------------------------------------------------
Rakefile | 2 +-
.../java/org/apache/ode/axis2/ODEServer.java | 5 +-
.../apache/ode/bpel/clapi/ClusterManager.java | 17 ++
.../ode/bpel/clapi/ClusterMemberListener.java | 29 +++
.../hazelcast/HazelcastClusterImpl.java | 36 ++--
.../ode/scheduler/simple/SchedulerListener.java | 27 ---
.../ode/scheduler/simple/SimpleScheduler.java | 185 +++++++++----------
7 files changed, 157 insertions(+), 144 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 7c0fa67..5475227 100644
--- a/Rakefile
+++ b/Rakefile
@@ -208,7 +208,7 @@ define "ode" do
desc "ODE Clustering"
define "clustering" do
- compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
+ compile.with projects("bpel-api","bpel-store","scheduler-simple"),HAZELCAST, COMMONS.logging
package :jar
end
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 6803350..222fedd 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -50,7 +50,6 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
-import org.omg.CORBA.StringHolder;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
@@ -198,7 +197,7 @@ public class ODEServer {
_store.loadAll();
if (_clusterManager != null) {
_clusterManager.registerClusterProcessStoreMessageListener();
- _clusterManager.setScheduler(_scheduler);
+ _clusterManager.registerClusterMemberListener(_scheduler);
}
try {
@@ -489,7 +488,7 @@ public class ODEServer {
Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
_clusterManager = (ClusterManager) clusterImplClass.newInstance();
} catch (Exception ex) {
- __log.error("Error while loading class : " +clusterImplName ,ex);
+ __log.error("Error while loading class : " + clusterImplName, ex);
}
_clusterManager.init(_configRoot);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/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 70d7c03..a00959a 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
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.clapi;
import java.io.File;
+import java.util.List;
public interface ClusterManager {
@@ -57,6 +58,12 @@ public interface ClusterManager {
void registerClusterProcessStoreMessageListener();
/**
+ * Register Scheduler as ClusterMemberListener
+ * @param scheduler
+ */
+ void registerClusterMemberListener(Object scheduler);
+
+ /**
* Return deployment lock for cluster
*/
ClusterLock getDeploymentLock();
@@ -65,4 +72,14 @@ public interface ClusterManager {
* Return instance lock for cluster
*/
ClusterLock getInstanceLock();
+
+ /**
+ * Return active node list in the cluster
+ */
+ List<String> getActiveNodes();
+
+ /**
+ * Return local member's uuid in the cluster
+ */
+ String getUuid();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
new file mode 100644
index 0000000..4225f7d
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
@@ -0,0 +1,29 @@
+/*
+ * 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.clapi;
+
+public interface ClusterMemberListener {
+
+ void memberAdded(String nodeId);
+
+ void memberRemoved(String nodeId);
+
+ void memberElectedAsMaster();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/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 63a889a..971df3e 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.iapi.Scheduler;
+import org.apache.ode.scheduler.simple.SimpleScheduler;
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -47,7 +47,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private IMap<Long, Long> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
- private Scheduler _scheduler;
+ private SimpleScheduler _scheduler;
private ClusterLock<String> _hazelcastDeploymentLock;
private ClusterLock<Long> _hazelcastInstanceLock;
@@ -77,7 +77,6 @@ public class HazelcastClusterImpl implements ClusterManager {
nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
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);
@@ -93,15 +92,15 @@ public class HazelcastClusterImpl implements ClusterManager {
public void memberAdded(MembershipEvent membershipEvent) {
String nodeId = membershipEvent.getMember().getUuid();
__log.info("Member Added " +nodeId);
- if(isMaster) _simpleScheduler.memberAdded(nodeId);
+ _scheduler.memberAdded(nodeId);
}
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
- String nodeId = membershipEvent.getMember().getUuid();
- __log.info("Member Removed " +nodeId);
+ String nodeId = membershipEvent.getMember().getUuid();
+ __log.info("Member Removed " + nodeId);
markAsMaster();
- if(isMaster) _simpleScheduler.memberRemoved(nodeId, uuid);
+ _scheduler.memberRemoved(nodeId);
}
@Override
@@ -149,9 +148,9 @@ public class HazelcastClusterImpl implements ClusterManager {
private void markAsMaster() {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
- if (leader.localMember()) {
+ if (leader.localMember() && isMaster == false) {
isMaster = true;
- _simpleScheduler.setIsMasterNode(true);
+ _scheduler.memberElectedAsMaster();
}
__log.info(isMaster);
}
@@ -168,15 +167,16 @@ public class HazelcastClusterImpl implements ClusterManager {
_clusterProcessStore = store;
}
- public void setScheduler(Scheduler scheduler) {
- _scheduler = scheduler;
- _scheduler.setClusterManager(this);
- }
-
public void registerClusterProcessStoreMessageListener() {
clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
+ public void registerClusterMemberListener(Object scheduler) {
+ _scheduler = (SimpleScheduler) scheduler;
+ markAsMaster();
+ _scheduler.setClusterManager(this);
+ }
+
public void shutdown() {
if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
}
@@ -189,11 +189,11 @@ public class HazelcastClusterImpl implements ClusterManager {
return _hazelcastInstanceLock;
}
- public List<String> getKnownNodes() {
- List<String> nodesList = new ArrayList<String>();
+ public List<String> getActiveNodes() {
+ List<String> nodeList = new ArrayList<String>();
for(Member m : _hazelcastInstance.getCluster().getMembers())
- nodesList.add(m.getUuid()) ;
- return nodesList;
+ nodeList.add(m.getUuid()) ;
+ return nodeList;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
deleted file mode 100644
index 3786912..0000000
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
+++ /dev/null
@@ -1,27 +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.scheduler.simple;
-
-public interface SchedulerListener {
-
- void memberAdded(String nodeId);
-
- void memberRemoved(String nodeId,String masterId);
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index 3b6ec4d..a0dbf5a 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -22,6 +22,7 @@ package org.apache.ode.scheduler.simple;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterMemberListener;
import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.Scheduler;
@@ -52,7 +53,7 @@ import java.util.concurrent.atomic.AtomicLong;
* @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
*
*/
-public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener {
+public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberListener {
private static final Log __log = LogFactory.getLog(SimpleScheduler.class);
private static final int DEFAULT_TRANSACTION_TIMEOUT = 60 * 1000;
@@ -102,13 +103,21 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
private boolean _isClusterEnabled;
+ private String _masterId;
+
private ClusterManager _clusterManager;
- /** All the nodes we know about */
- private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
+ /** All the nodes which are taken from the database*/
+ private CopyOnWriteArraySet<String> _dbNodes = new CopyOnWriteArraySet<String>();
+
+ /** All the stale nodes */
+ private CopyOnWriteArraySet<String> _staleNodes = new CopyOnWriteArraySet<String>();
+
+ /** All the nodes when members are added to the cluster*/
+ private CopyOnWriteArraySet<String> _clusterNodes = new CopyOnWriteArraySet<String>();
/** When we last heard from our nodes. */
- private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
+ //private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
/** Set of outstanding jobs, i.e., jobs that have been enqueued but not dequeued or dispatched yet.
Used to avoid cases where a job would be dispatched twice if the server is under high load and
@@ -460,13 +469,15 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
_processedSinceLastLoadTask.clear();
_outstandingJobs.clear();
- _knownNodes.clear();
+ _dbNodes.clear();
+ _clusterNodes.clear();
+ _staleNodes.clear();
try {
execTransaction(new Callable<Void>() {
public Void call() throws Exception {
- _knownNodes.addAll(_db.getNodeIds());
+ _dbNodes.addAll(_db.getNodeIds());
return null;
}
@@ -475,21 +486,21 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
__log.error("Error retrieving node list.", ex);
throw new ContextException("Error retrieving node list.", ex);
}
+ _clusterNodes.add(_nodeId);
long now = System.currentTimeMillis();
// Pretend we got a heartbeat...
- for (String s : _knownNodes) _lastHeartBeat.put(s, now);
+ //for (String s : _knownNodes) _lastHeartBeat.put(s, now);
// schedule immediate job loading for now!
_todo.enqueue(new LoadImmediateTask(now));
// schedule check for stale nodes, make it random so that the nodes don't overlap.
- if (!_isClusterEnabled)
- _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+ _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
// do the upgrade sometime (random) in the immediate interval.
- enqueUpgradeJobsTask(now);
+ _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
_todo.start();
_running = true;
@@ -517,16 +528,33 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
_running = false;
}
- public void memberAdded(final String nodeId) {
- _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis()+ randomMean(_immediateInterval)));
+ public void memberAdded(String nodeId) {
+ _clusterNodes.add(nodeId);
}
- public void memberRemoved(final String nodeId, final String masterId) {
- recoverClusterStaleNodes(nodeId, masterId);
+ public void memberRemoved(String nodeId) {
+ _staleNodes.add(nodeId);
}
- public void enqueUpgradeJobsTask(long now) {
- _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+ // Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
+ public void memberElectedAsMaster() {
+ _masterId = _nodeId;
+ _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + randomMean(_staleInterval)));
+ _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis() + randomMean(_immediateInterval)));
+ _dbNodes.clear();
+ try {
+ execTransaction(new Callable<Void>() {
+
+ public Void call() throws Exception {
+ _dbNodes.addAll(_db.getNodeIds());
+ return null;
+ }
+
+ });
+ } catch (Exception ex) {
+ __log.error("Error retrieving node list.", ex);
+ throw new ContextException("Error retrieving node list.", ex);
+ }
}
class RunJob implements Callable<Void> {
@@ -701,7 +729,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
}
}
- public void updateHeartBeat(String nodeId) {
+ /*public void updateHeartBeat(String nodeId) {
if (nodeId == null)
return;
@@ -710,7 +738,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
_lastHeartBeat.put(nodeId, System.currentTimeMillis());
_knownNodes.add(nodeId);
- }
+ }*/
boolean doLoadImmediate() {
__log.debug("LOAD IMMEDIATE started");
@@ -788,10 +816,19 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
boolean doUpgrade() {
__log.debug("UPGRADE started");
- final ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
- // Don't forget about self.
- knownNodes.add(_nodeId);
- Collections.sort(knownNodes);
+ final ArrayList<String> activeNodes;
+
+ // for cluster mode
+ if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+ activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+ }
+ //for standalone ODE deployments
+ else {
+ activeNodes = new ArrayList<String>();
+ activeNodes.add(_nodeId);
+ }
+
+ Collections.sort(activeNodes);
// We're going to try to upgrade near future jobs using the db only.
// We assume that the distribution of the trailing digits in the
@@ -803,9 +840,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
return execTransaction(new Callable<Boolean>() {
public Boolean call() throws Exception {
- int numNodes = knownNodes.size();
+ int numNodes = activeNodes.size();
for (int i = 0; i < numNodes; ++i) {
- String node = knownNodes.get(i);
+ String node = activeNodes.get(i);
_db.updateAssignToNode(node, i, numNodes, maxtime);
}
return true;
@@ -822,41 +859,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
}
- boolean doClusterJobsUpgrade() {
- __log.debug("UPGRADE started for Cluster Mode");
- final ArrayList<String> knownNodes = _clusterManager.getKnownNodes();
- Collections.sort(knownNodes);
-
- // We're going to try to upgrade near future jobs using the db only.
- // We assume that the distribution of the trailing digits in the
- // scheduled time are uniformly distributed, and use modular division
- // of the time by the number of nodes to create the node assignment.
- // This can be done in a single update statement.
- final long maxtime = System.currentTimeMillis() + _nearFutureInterval;
- try {
- return execTransaction(new Callable<Boolean>() {
-
- public Boolean call() throws Exception {
- int numNodes = knownNodes.size();
- for (int i = 0; i < numNodes; ++i) {
- String node = knownNodes.get(i);
- _db.updateAssignToNode(node, i, numNodes, maxtime);
- }
- return true;
- }
-
- });
-
- } catch (Exception ex) {
- __log.error("Database error upgrading jobs.", ex);
- return false;
- } finally {
- __log.debug("UPGRADE complete");
- }
-
- }
-
-
/**
* Re-assign stale node's jobs to self.
* @param nodeId
@@ -876,10 +878,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
__log.debug("reassigned " + numrows + " jobs to self. ");
}
- // We can now forget about this node, if we see it again, it will be
- // "new to us"
- _knownNodes.remove(nodeId);
- _lastHeartBeat.remove(nodeId);
+ if(_isClusterEnabled) _staleNodes.remove(nodeId);
+
+ // If the stale node id is in _clusterNodes or _dbNodes, remove it.
+ _clusterNodes.remove(nodeId);
+ _dbNodes.remove(nodeId);
// Force a load-immediate to catch anything new from the recovered node.
doLoadImmediate();
@@ -900,31 +903,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
// return delay;
// }
- void recoverClusterStaleNodes(final String nodeId, final String masterId) {
- if (__log.isDebugEnabled()) {
- __log.debug("recovering stale nodes for Cluster Mode " + nodeId);
- }
- try {
- int numrows = execTransaction(new Callable<Integer>() {
- public Integer call() throws Exception {
- return _db.updateReassign(nodeId, masterId);
- }
- });
-
- if (__log.isDebugEnabled()) {
- __log.debug("reassigned " + numrows + " jobs to master node. ");
- }
-
- // Force a load-immediate to catch anything new from the recovered node.
- doLoadImmediate();
-
- } catch (Exception ex) {
- __log.error("Database error reassigning node.", ex);
- } finally {
- __log.debug("node recovery complete");
- }
- }
-
private abstract class SchedulerTask extends Task implements Runnable {
SchedulerTask(long schedDate) {
super(schedDate);
@@ -979,8 +957,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
boolean success = false;
try {
- if (_isClusterEnabled && _clusterManager.getIsMaster()) success = doClusterJobsUpgrade();
- else success = doUpgrade();
+ success = doUpgrade();
} finally {
long future = System.currentTimeMillis() + (success ? (long) (_nearFutureInterval * .50) : 1000);
_nextUpgrade.set(future);
@@ -1003,14 +980,32 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
public void run() {
_todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + _staleInterval));
__log.debug("CHECK STALE NODES started");
- for (String nodeId : _knownNodes) {
- Long lastSeen = _lastHeartBeat.get(nodeId);
- if ((lastSeen == null || (System.currentTimeMillis() - lastSeen) > _staleInterval)
- && !_nodeId.equals(nodeId))
- {
+
+ ArrayList<String> knownNodes = new ArrayList<String>();
+ knownNodes.addAll(_dbNodes);
+ knownNodes.addAll(_clusterNodes);
+
+ // for cluster mode
+ if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+ ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
+
+ //find stale nodes
+ knownNodes.removeAll(memberList);
+ if (knownNodes.size() != 0) {
+ for (String nodeId : knownNodes) {
+ _staleNodes.add(nodeId);
+ }
+ }
+ for (String nodeId : _staleNodes) {
recoverStaleNode(nodeId);
}
}
+ // for standalone ode node
+ else {
+ for (String nodeId : knownNodes) {
+ if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
+ }
+ }
}
}
[08/30] ode git commit: redesigning phase 2
Posted by sa...@apache.org.
redesigning phase 2
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/521d640d
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/521d640d
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/521d640d
Branch: refs/heads/ODE-563
Commit: 521d640d672133d3864a61c54ba2b59e70e35a4b
Parents: afa36ee
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 16 17:20:04 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 16 17:20:04 2015 +0530
----------------------------------------------------------------------
Rakefile | 10 +--
.../java/org/apache/ode/axis2/ODEServer.java | 6 +-
.../ode/axis2/deploy/DeploymentPoller.java | 29 ++++----
.../ode/axis2/service/DeploymentWebService.java | 25 +++++--
.../apache/ode/bpel/clapi/ClusterManager.java | 22 +++++++
.../bpel/clapi/ProcessStoreDeployedEvent.java | 40 ++++++++++++
.../ode/store/ClusterProcessStoreImpl.java | 43 +++---------
.../hazelcast/HazelcastClusterImpl.java | 69 ++++++++++++++++----
.../hazelcast/HazelcastConstants.java | 1 -
.../hazelcast/HazelcastInstanceConfig.java | 56 ----------------
10 files changed, 175 insertions(+), 126 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 06dcbd5..7c0fa67 100644
--- a/Rakefile
+++ b/Rakefile
@@ -86,7 +86,7 @@ define "ode" do
"scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents", "clustering"),
AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.httpclient, COMMONS.lang,
DERBY, GERONIMO.kernel, GERONIMO.transaction, JAVAX.activation, JAVAX.servlet, JAVAX.stream,
- JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
+ JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J
test.exclude 'org.apache.ode.axis2.management.*'
test.with project("tools"), AXIOM, JAVAX.javamail, COMMONS.codec, COMMONS.httpclient, XERCES, WOODSTOX
@@ -166,7 +166,7 @@ define "ode" do
desc "ODE APIs"
define "bpel-api" do
- compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J, HAZELCAST
+ compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J
package :jar
end
@@ -208,7 +208,7 @@ define "ode" do
desc "ODE Clustering"
define "clustering" do
- compile.with projects("bpel-api"),HAZELCAST, COMMONS.logging
+ compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
package :jar
end
@@ -270,8 +270,8 @@ define "ode" do
desc "ODE Process Store"
define "bpel-store" do
compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
- "dao-hibernate", "dao-jpa", "clustering", "utils"),
- JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J,HAZELCAST
+ "dao-hibernate", "dao-jpa", "utils"),
+ JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
compile { open_jpa_enhance }
resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 26489d2..f0ad470 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -234,7 +234,7 @@ public class ODEServer {
try {
__log.debug("Initializing Deployment Web Service");
- new DeploymentWebService().enableService(_configContext.getAxisConfiguration(), _store, _poller, _appRoot.getAbsolutePath(), _workRoot.getAbsolutePath());
+ new DeploymentWebService().enableService(_configContext.getAxisConfiguration(), _store, _poller, _appRoot.getAbsolutePath(), _workRoot.getAbsolutePath(),this);
} catch (Exception e) {
throw new ServletException(e);
}
@@ -490,8 +490,8 @@ public class ODEServer {
private void initClustering() {
String clusterImplName = _odeConfig.getClusteringImplClass();
try {
- Class<?> clustering_class = this.getClass().getClassLoader().loadClass(clusterImplName);
- _clusterManager = (ClusterManager) clustering_class.newInstance();
+ Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
+ _clusterManager = (ClusterManager) clusterImplClass.newInstance();
} catch (Exception ex) {
__log.error(ex);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 66890ba..ccb029b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -54,7 +54,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+import org.apache.ode.bpel.clapi.ClusterManager;
/**
* Polls a directory for the deployment of a new deployment unit.
@@ -100,7 +100,7 @@ public class DeploymentPoller {
public DeploymentPoller(File deployDir, final ODEServer odeServer) {
_odeServer = odeServer;
_deployDir = deployDir;
- clusterEnabled = _odeServer.getClusteringState();
+ clusterEnabled = _odeServer.getIsCluteringEnabled();
if (!_deployDir.exists()) {
boolean isDeployDirCreated = _deployDir.mkdir();
if (!isDeployDirCreated) {
@@ -140,10 +140,13 @@ public class DeploymentPoller {
// Checking for new deployment directories
if (isDeploymentFromODEFileSystemAllowed() && files != null) {
for (File file : files) {
- __log.info("Trying to access the lock for " +file.getName());
- duLocked = lock(file.getName());
- try {
- if (duLocked) {
+ String test = file.getName();
+ __log.info("Trying to access the lock for " + test);
+ __log.info("Test null key value " +test);
+ duLocked = pollerTryLock(test);
+
+ if (duLocked) {
+ try {
File deployXml = new File(file, "deploy.xml");
File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
@@ -185,10 +188,10 @@ public class DeploymentPoller {
} catch (Exception e) {
__log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
}
+ } finally {
+ __log.info("Trying to release the lock for " + file.getName());
+ unlock(file.getName());
}
- } finally {
- __log.info("Trying to release the lock for " + file.getName());
- unlock(file.getName());
}
}
}
@@ -341,16 +344,16 @@ public class DeploymentPoller {
}
//Implementation of IMap key Lock
- public boolean lock(String key) {
+ private boolean pollerTryLock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+ return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
}
else return true;
}
- public boolean unlock(String key) {
+ private boolean unlock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+ return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
}
else return true;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index bd35167..1951cf5 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -55,6 +55,7 @@ import org.apache.axis2.util.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.lang.StringUtils;
+import org.apache.ode.axis2.ODEServer;
import org.apache.ode.axis2.OdeFault;
import org.apache.ode.axis2.deploy.DeploymentPoller;
import org.apache.ode.axis2.hooks.ODEAxisService;
@@ -76,9 +77,11 @@ public class DeploymentWebService {
private final OMNamespace _deployapi;
private File _deployPath;
+ private ODEServer _odeServer;
private DeploymentPoller _poller;
private ProcessStore _store;
+ private boolean clusterEnabled;
public DeploymentWebService() {
_pmapi = OMAbstractFactory.getOMFactory().createOMNamespace("http://www.apache.org/ode/pmapi","pmapi");
@@ -86,10 +89,12 @@ public class DeploymentWebService {
}
public void enableService(AxisConfiguration axisConfig, ProcessStore store,
- DeploymentPoller poller, String rootpath, String workPath) throws AxisFault, WSDLException {
+ DeploymentPoller poller, String rootpath, String workPath, ODEServer odeServer) throws AxisFault, WSDLException {
_deployPath = new File(workPath, "processes");
_store = store;
_poller = poller;
+ _odeServer = odeServer;
+ clusterEnabled = _odeServer.getIsCluteringEnabled();
Definition def;
WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();
@@ -170,7 +175,7 @@ public class DeploymentWebService {
__log.info("Trying to access the lock for " + dest.getName());
//lock on deployment unit directory name
- duLocked = _poller.lock(dest.getName());
+ duLocked = lock(dest.getName());
if (duLocked) {
boolean createDir = dest.mkdir();
@@ -214,7 +219,7 @@ public class DeploymentWebService {
sendResponse(factory, messageContext, "deployResponse", response);
} finally {
__log.info("Trying to release the lock for " + dest.getName());
- _poller.unlock(dest.getName());
+ unlock(dest.getName());
}
}
} finally {
@@ -366,6 +371,18 @@ public class DeploymentWebService {
out.close();
}
+ //Implementation of IMap key Lock
+ private boolean lock(String key) {
+ if(clusterEnabled) {
+ return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
+ }
+ else return true;
+ }
-
+ private boolean unlock(String key) {
+ if(clusterEnabled) {
+ return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+ }
+ else return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/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 4a0aded..a1fe194 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
@@ -54,6 +54,28 @@ public interface ClusterManager {
*/
boolean unlock(String key);
+ /**
+ * Tries to acquire the lock for the specified key.
+ * @param key
+ * @return
+ */
+ boolean tryLock(String key);
+ /**
+ * Set the Process Store object which uses for clustering
+ * @param ps
+ */
+ void setClusterProcessStore(Object ps);
+ /**
+ * Publish Deploy event to the cluster by deploy initiator
+ * @param event
+ */
+ void publishProcessStoreEvent(Object event);
+
+ /**
+ * Handle event according to received event
+ * @param message
+ */
+ void handleEvent(Object message);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
new file mode 100644
index 0000000..a623d47
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
@@ -0,0 +1,40 @@
+/*
+ * 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.clapi;
+
+import java.io.Serializable;
+
+public class ProcessStoreDeployedEvent implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public final String deploymentUnit;
+
+ public final String info;
+
+ public ProcessStoreDeployedEvent(String deploymentUnit) {
+ this.info = "Deployment Event";
+ this.deploymentUnit = deploymentUnit;
+ }
+
+ @Override
+ public String toString() {
+ return "{ProcessStoreDeployedEvent#" + deploymentUnit +"}";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 22ba2cd..6f35110 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -20,9 +20,9 @@ package org.apache.ode.store;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
import org.apache.ode.bpel.iapi.ProcessState;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import org.apache.ode.bpel.iapi.EndpointReferenceContext;
import org.apache.ode.il.config.OdeConfigProperties;
@@ -33,24 +33,17 @@ import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import com.hazelcast.core.*;
-
public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
- private HazelcastInstance _hazelcastInstance;
- private Member deployInitiator;
- private ITopic<String> clusterMessageTopic;
private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+ private ClusterManager _clusterManager;
+ private ProcessStoreDeployedEvent deployedEvent;
-
- public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
+ public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
super(eprContext,ds,persistenceType,props,createDatamodel);
- _hazelcastInstance = hazelcastClusterImpl.getHazelcastInstance();
-
- // Register for listening to message listener
- clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
- clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+ _clusterManager = clusterManager;
+ _clusterManager.setClusterProcessStore(this);
}
public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -63,9 +56,9 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
return deployed;
}
- public void publishProcessStoreDeployedEvent(String duName){
- deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
- clusterMessageTopic.publish("Deployed " +duName);
+ private void publishProcessStoreDeployedEvent(String duName){
+ deployedEvent = new ProcessStoreDeployedEvent(duName);
+ _clusterManager.publishProcessStoreEvent(deployedEvent);
}
public void publishService(final String duName) {
@@ -110,22 +103,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
//loadAll();
}
- class ClusterMessageListener implements MessageListener<String> {
- @Override
- public void onMessage(Message<String> msg) {
- String message = msg.getMessageObject();
- String arr[] = message.split(" ", 2);
- String duName = arr[1];
- if(message.contains("Deployed ")) {
- if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
- __log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
- publishService(duName);
- }
- else deployInitiator = null;
- }
- }
- }
-
private Pattern getPreviousPackageVersionPattern(String duName) {
String[] nameParts = duName.split("/");
/* Replace the version number (if any) with regexp to match any version number */
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/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 6ae701b..2e6868f 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
@@ -19,38 +19,49 @@
package org.apache.ode.clustering.hazelcast;
import com.hazelcast.core.*;
+import com.hazelcast.config.FileSystemXmlConfig;
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
/**
* This class implements necessary methods to build the cluster using hazelcast
*/
-public class HazelcastClusterImpl implements ClusterManager{
+public class HazelcastClusterImpl implements ClusterManager {
private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
private Member leader;
-
+ private Member deployInitiator;
private IMap<String, String> lock_map;
+ private ITopic<Object> clusterMessageTopic;
+ private ClusterProcessStoreImpl _clusterProcessStore;
public void init(File configRoot) {
- //First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
- //Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+ /*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
+ Else it will load the hazelcast.xml file using FileSystemXmlConfig()*/
String hzConfig = System.getProperty("hazelcast.config");
if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
else {
File hzXml = new File(configRoot, "hazelcast.xml");
if (!hzXml.isFile())
__log.error("hazelcast.xml does not exist or is not a file");
- else _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+ else
+ try {
+ _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+ } catch (FileNotFoundException fnf) {
+ __log.error(fnf);
+ }
}
if (_hazelcastInstance != null) {
@@ -60,10 +71,15 @@ public class HazelcastClusterImpl implements ClusterManager{
__log.info("Registering HZ localMember ID " + localMember);
markAsMaster();
lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+
+ // Register for listening to message listener
+ clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+ clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
}
public boolean lock(String key) {
+ lock_map.putIfAbsent(key,key);
lock_map.lock(key);
boolean state = lock_map.isLocked(key);
__log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -81,6 +97,13 @@ public class HazelcastClusterImpl implements ClusterManager{
return state;
}
+ public boolean tryLock(String key) {
+ lock_map.putIfAbsent(key,key);
+ boolean state = lock_map.tryLock(key);
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state );
+ return state;
+ }
+
class ClusterMemberShipListener implements MembershipListener {
@Override
public void memberAdded(MembershipEvent membershipEvent) {
@@ -90,10 +113,6 @@ public class HazelcastClusterImpl implements ClusterManager{
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
markAsMaster();
- // Allow Leader to update distributed map.
- if (isMaster) {
- String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
- }
}
@Override
@@ -102,6 +121,32 @@ public class HazelcastClusterImpl implements ClusterManager{
}
}
+ public void publishProcessStoreEvent(Object deployedEvent) {
+ deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+ clusterMessageTopic.publish(deployedEvent);
+ }
+
+
+ class ClusterMessageListener implements MessageListener<Object> {
+ @Override
+ public void onMessage(Message<Object> msg) {
+ handleEvent(msg.getMessageObject());
+ }
+ }
+
+ public void handleEvent(Object message) {
+ if (message instanceof ProcessStoreDeployedEvent) {
+ ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
+
+ if (_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+ String duName = event.deploymentUnit;
+ __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+ _clusterProcessStore.publishService(duName);
+ } else deployInitiator = null;
+ }
+
+ }
+
public void markAsMaster() {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember()) {
@@ -114,7 +159,9 @@ public class HazelcastClusterImpl implements ClusterManager{
return isMaster;
}
- public HazelcastInstance getHazelcastInstance() {
- return _hazelcastInstance;
+ public void setClusterProcessStore(Object store) {
+ if (store instanceof ClusterProcessStoreImpl)
+ _clusterProcessStore = (ClusterProcessStoreImpl) store;
}
}
+
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index e201b70..f9d1004 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,7 +21,6 @@ package org.apache.ode.clustering.hazelcast;
* Constants used in Hazelcast based clustering implementation
*/
public final class HazelcastConstants {
- public static final String ODE_CLUSTER_NODE_MAP = "ODE_NODE_ID_MAP";
public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
private HazelcastConstants() {
http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
deleted file mode 100644
index 9e8c59b..0000000
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
+++ /dev/null
@@ -1,56 +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.clustering.hazelcast;
-
-import com.hazelcast.config.Config;
-import com.hazelcast.config.FileSystemXmlConfig;
-import com.hazelcast.core.*;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * This is to create hazelcast instance.
- * It sets the config object using hazelcast.xml file.First, it looks for the hazelcast.config system property. If it is set, its value is used as the path.
- * Else it will load the hazelcast.xml file using FileSystemXmlConfig()
- */
-public class HazelcastInstanceConfig {
- private HazelcastInstance hazelcastInstance;
-
- public HazelcastInstanceConfig() {
- hazelcastInstance = Hazelcast.newHazelcastInstance();
- }
-
- /**
- *
- * @param hzXml
- */
- public HazelcastInstanceConfig(File hzXml) {
- try {
- Config config = new FileSystemXmlConfig(hzXml);
- hazelcastInstance = Hazelcast.newHazelcastInstance(config);
- } catch (FileNotFoundException fnf) {
- }
- }
-
- public HazelcastInstance getHazelcastInstance() {
- return hazelcastInstance;
- }
-}
-
[13/30] ode git commit: Back to hazelcast 3.4.2
Posted by sa...@apache.org.
Back to hazelcast 3.4.2
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/ca74e005
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/ca74e005
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/ca74e005
Branch: refs/heads/ODE-563
Commit: ca74e0054249d894467b915cc313cf205bc98fbc
Parents: 7eac2b1
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jun 25 23:33:48 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jun 25 23:33:48 2015 +0530
----------------------------------------------------------------------
dependencies.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/ca74e005/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index f85e38a..33da5e4 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,7 +75,7 @@ GERONIMO = struct(
:transaction =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
:connector =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
)
-HAZELCAST ="com.hazelcast:hazelcast:jar:3.5"
+HAZELCAST ="com.hazelcast:hazelcast:jar:3.4.2"
HIBERNATE = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
"asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
HSQLDB = "hsqldb:hsqldb:jar:1.8.0.7"
[06/30] ode git commit: retire previous processes
Posted by sa...@apache.org.
retire previous processes
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/b4cd9a48
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/b4cd9a48
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/b4cd9a48
Branch: refs/heads/ODE-563
Commit: b4cd9a483bce77070cb21231296ad89c3e8b4593
Parents: 0b19e7e
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 15 00:19:23 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 15 00:19:23 2015 +0530
----------------------------------------------------------------------
.../ode/store/ClusterProcessStoreImpl.java | 37 +++++++++++++++-----
.../org/apache/ode/store/ProcessStoreImpl.java | 4 +++
2 files changed, 33 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/b4cd9a48/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f364fb7..7f79a8b 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -20,6 +20,8 @@ package org.apache.ode.store;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.ProcessState;
import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import org.apache.ode.bpel.iapi.EndpointReferenceContext;
import org.apache.ode.il.config.OdeConfigProperties;
@@ -27,9 +29,7 @@ import org.apache.ode.il.config.OdeConfigProperties;
import javax.sql.DataSource;
import javax.xml.namespace.QName;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collection;
+import java.util.*;
import com.hazelcast.core.*;
@@ -39,6 +39,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private HazelcastInstance _hazelcastInstance;
private Member deployInitiator;
private ITopic<String> clusterMessageTopic;
+ private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+
public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
super(eprContext,ds,persistenceType,props,createDatamodel);
@@ -51,6 +53,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
public Collection<QName> deploy(final File deploymentUnitDirectory) {
Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
+ Map<QName, ProcessConfImpl> _processes = getProcessesMap();
+ for (QName key :_processes.keySet()) {
+ if(!loaded.contains(_processes.get(key))) loaded.add(_processes.get(key));
+ }
publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
return deployed;
}
@@ -60,14 +66,29 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
clusterMessageTopic.publish("Deployed " +duName);
}
+ //have to write code for retire previous versions
public void publishService(final String duName) {
- final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+ final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
+ String namePart = duName.split("-")[0];
+ ProcessState state = ProcessState.ACTIVE;
+
+ for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
+ ProcessConfImpl pconf = iterator.next();
+ if (pconf.getPackage().contains(namePart) && pconf.getState().equals(state)) {
+ pconf.setState(ProcessState.RETIRED);
+ confs.add(pconf);
+ }
+ }
+
try {
exec(new Callable<Object>() {
public Object call(ConfStoreConnection conn) {
DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
if (dudao != null) {
- loaded.addAll(load(dudao));
+ List<ProcessConfImpl> load = load(dudao);
+ loaded.addAll(load);
+ confs.addAll(load);
+
}
return null;
}
@@ -76,13 +97,14 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
__log.error("Error loading DU from store: " + duName, ex);
}
- for (ProcessConfImpl p : loaded) {
+ for (ProcessConfImpl p : confs) {
try {
fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
} catch (Exception except) {
__log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
}
}
+ //loadAll();
}
class ClusterMessageListener implements MessageListener<String> {
@@ -96,9 +118,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
__log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
publishService(duName);
}
+ else deployInitiator = null;
}
}
}
-
-
}
http://git-wip-us.apache.org/repos/asf/ode/blob/b4cd9a48/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 1a99ef6..d6f76f3 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -899,4 +899,8 @@ public class ProcessStoreImpl implements ProcessStore {
}
}
}
+
+ protected Map<QName, ProcessConfImpl> getProcessesMap() {
+ return _processes;
+ }
}
[23/30] ode git commit: tested with concurrent process
Posted by sa...@apache.org.
tested with concurrent process
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/9ffe0c77
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/9ffe0c77
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/9ffe0c77
Branch: refs/heads/ODE-563
Commit: 9ffe0c779115515c045888229871187bf3c41a24
Parents: 9a0b742
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 15 00:21:09 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 15 00:21:09 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 56 +++++++-------------
.../hazelcast/HazelcastInstanceLock.java | 15 ++----
2 files changed, 24 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/9ffe0c77/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 34e245a..da62139 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -19,38 +19,11 @@
package org.apache.ode.axis2;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.sql.DataSource;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAResource;
-
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
+import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.axis2.deploy.DeploymentPoller;
@@ -64,12 +37,7 @@ import org.apache.ode.bpel.engine.BpelServerImpl;
import org.apache.ode.bpel.engine.CountLRUDehydrationPolicy;
import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.extvar.jdbc.JdbcExternalVariableModule;
-import org.apache.ode.bpel.iapi.BpelEventListener;
-import org.apache.ode.bpel.iapi.EndpointReferenceContext;
-import org.apache.ode.bpel.iapi.ProcessConf;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.iapi.*;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
import org.apache.ode.bpel.pmapi.InstanceManagement;
@@ -78,11 +46,25 @@ import org.apache.ode.il.config.OdeConfigProperties;
import org.apache.ode.il.dbutil.Database;
import org.apache.ode.scheduler.simple.JdbcDelegate;
import org.apache.ode.scheduler.simple.SimpleScheduler;
-import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.store.ClusterProcessStoreImpl;
+import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.sql.DataSource;
+import javax.transaction.*;
+import javax.transaction.xa.XAResource;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+
/**
* Server class called by our Axis hooks to handle all ODE lifecycle management.
*
@@ -136,7 +118,7 @@ public class ODEServer {
public Runnable txMgrCreatedCallback;
- private boolean isClusteringEnabled;
+ private boolean isClusteringEnabled = false;
public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
@@ -213,7 +195,7 @@ public class ODEServer {
registerExternalVariableModules();
_store.loadAll();
- _clusterManager.registerClusterProcessStoreMessageListener();
+ if (_clusterManager != null) _clusterManager.registerClusterProcessStoreMessageListener();
try {
_bpelServer.start();
http://git-wip-us.apache.org/repos/asf/ode/blob/9ffe0c77/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 aa6c086..1729bac 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
@@ -46,26 +46,23 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,TimeoutException {
if (iid == null) {
- if (__log.isDebugEnabled()) {
+ if (__log.isDebugEnabled())
__log.debug(" Instance Id null at lock[]");
- }
return;
}
String thrd = Thread.currentThread().toString();
- if (__log.isDebugEnabled()) {
+ if (__log.isDebugEnabled())
__log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
- }
putIfAbsent(iid, iid);
if (!_lock_map.tryLock(iid, time, tu)) {
- if (__log.isDebugEnabled()) {
+ if (__log.isDebugEnabled())
__log.debug(thrd + ": lock(iid=" + iid + ", " +
"time=" + time + tu + ")-->TIMEOUT");
- }
throw new TimeoutException();
}
@@ -73,9 +70,8 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
public void unlock(Long iid) {
if (iid == null) {
- if (__log.isDebugEnabled()) {
+ if (__log.isDebugEnabled())
__log.debug(" unlock, instance id is null");
- }
return;
}
@@ -83,9 +79,8 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
_lock_map.unlock(iid);
- if (__log.isDebugEnabled()) {
+ if (__log.isDebugEnabled())
__log.debug(thrd + " unlock(iid=" + iid + ")");
- }
}
public boolean tryLock(Long key) {
[17/30] ode git commit: Use AbstractInstanceLockManager
Posted by sa...@apache.org.
Use AbstractInstanceLockManager
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/4a101a41
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/4a101a41
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/4a101a41
Branch: refs/heads/ODE-563
Commit: 4a101a41e853bbdae8148ac6ee7150845ac742da
Parents: 94f19ed
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 8 14:20:07 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 8 14:20:07 2015 +0530
----------------------------------------------------------------------
.../main/java/org/apache/ode/bpel/clapi/ClusterManager.java | 3 ++-
.../main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java | 2 +-
.../java/org/apache/ode/bpel/engine/InstanceLockManager.java | 6 +++---
.../apache/ode/clustering/hazelcast/HazelcastClusterImpl.java | 6 +++---
4 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/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 6f610a4..25110b4 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
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.clapi;
import java.io.File;
+import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
public interface ClusterManager {
@@ -57,5 +58,5 @@ public interface ClusterManager {
void registerClusterProcessStoreMessageListener();
ClusterLock getDeploymentLock();
- ClusterLock getInstanceLock();
+ org.apache.ode.bpel.engine.AbstractInstanceLockManager getInstanceLock();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/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 81d8a4c..5bef134 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
@@ -115,7 +115,7 @@ public class BpelEngineImpl implements BpelEngine {
private SharedEndpoints _sharedEps;
/** Manage instance-level locks. */
- private final AbstractInstanceLockManager _instanceLockManager;
+ private AbstractInstanceLockManager _instanceLockManager;
final Contexts _contexts;
http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/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 e49e8e9..652d2ec 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
@@ -36,7 +36,7 @@ import java.util.concurrent.locks.Lock;
*
* @author Maciej Szefler - m s z e f l e r @ g m a i l . c o m
*/
-public class InstanceLockManager {
+public class InstanceLockManager extends AbstractInstanceLockManager {
private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
@@ -137,7 +137,7 @@ public class InstanceLockManager {
}
/** Exception class indicating a time-out occured while obtaining a lock. */
- public static final class TimeoutException extends Exception {
+ /*public static final class TimeoutException extends Exception {
private static final long serialVersionUID = 7247629086692580285L;
- }
+ }*/
}
http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/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 aa24947..fb25606 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
@@ -48,7 +48,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
private ClusterLock _hazelcastDeploymentLock;
- private ClusterLock _hazelcastInstanceLock;
+ private AbstractInstanceLockManager _hazelcastInstanceLock;
public void init(File configRoot) {
@@ -82,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
_hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
- _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
+ _hazelcastInstanceLock = (AbstractInstanceLockManager) new HazelcastInstanceLock(instance_lock_map);
}
}
@@ -169,7 +169,7 @@ public class HazelcastClusterImpl implements ClusterManager {
return _hazelcastDeploymentLock;
}
- public ClusterLock getInstanceLock(){
+ public AbstractInstanceLockManager getInstanceLock(){
return _hazelcastInstanceLock;
}
}
[12/30] ode git commit: added patch and log messages
Posted by sa...@apache.org.
added patch and log messages
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/7eac2b12
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/7eac2b12
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/7eac2b12
Branch: refs/heads/ODE-563
Commit: 7eac2b120049195526698c761a6fae4c12201496
Parents: 4137714
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jun 25 23:20:50 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jun 25 23:20:50 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 1 +
.../org/apache/ode/bpel/clapi/ClusterLock.java | 27 ++++++++++++++++++++
.../apache/ode/bpel/clapi/ClusterManager.java | 7 +++--
.../ode/bpel/clapi/ClusterProcessStore.java | 13 ++++++++++
.../ode/store/ClusterProcessStoreImpl.java | 11 ++++++--
.../hazelcast/HazelcastClusterImpl.java | 27 ++++++++++----------
6 files changed, 69 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 51f05dd..9b133fc 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -213,6 +213,7 @@ public class ODEServer {
registerExternalVariableModules();
_store.loadAll();
+ _clusterManager.registerClusterProcessStoreMessageListener();
try {
_bpelServer.start();
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/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
new file mode 100644
index 0000000..ff17188
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -0,0 +1,27 @@
+package org.apache.ode.bpel.clapi;
+
+public interface ClusterLock {
+ /**
+ * Acquire the lock for each file in the file system
+ *
+ * @param key
+ * @return
+ */
+ boolean lock(String key);
+
+ /**
+ * Release the lock acquired by each file
+ *
+ * @param key
+ * @return
+ */
+ boolean unlock(String key);
+
+ /**
+ * Tries to acquire the lock for the specified key.
+ *
+ * @param key
+ * @return
+ */
+ boolean tryLock(String key);
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/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 da2d668..c57358c 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
@@ -60,7 +60,7 @@ public interface ClusterManager {
* Set the Process Store object which uses for clustering
* @param ps
*/
- void setClusterProcessStore(Object ps);
+ void setClusterProcessStore(ClusterProcessStore ps);
/**
* Publish Deploy event to the cluster by deploy initiator
@@ -75,5 +75,8 @@ public interface ClusterManager {
*/
void putIfAbsent(String key, String keyVal);
-
+ /**
+ * Register the cluster for message listener
+ */
+ void registerClusterProcessStoreMessageListener();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
new file mode 100644
index 0000000..45ff33c
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
@@ -0,0 +1,13 @@
+package org.apache.ode.bpel.clapi;
+
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.iapi.ProcessStore;
+
+public interface ClusterProcessStore extends ProcessStore {
+ public void deployProcesses(String duName);
+
+ public Collection<QName> undeployProcesses(String duName);
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f0ae9d1..f36ea69 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -21,6 +21,7 @@ package org.apache.ode.store;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterProcessStore;
import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
import org.apache.ode.bpel.iapi.ProcessState;
@@ -29,12 +30,13 @@ import org.apache.ode.il.config.OdeConfigProperties;
import javax.sql.DataSource;
import javax.xml.namespace.QName;
+
import java.io.File;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-public class ClusterProcessStoreImpl extends ProcessStoreImpl{
+public class ClusterProcessStoreImpl extends ProcessStoreImpl implements ClusterProcessStore {
private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
private ClusterManager _clusterManager;
@@ -56,9 +58,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private void publishProcessStoreDeployedEvent(String duName){
deployedEvent = new ProcessStoreDeployedEvent(duName);
_clusterManager.publishProcessStoreClusterEvent(deployedEvent);
+ __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getUuid());
}
- public void publishService(final String duName) {
+ public void deployProcesses(final String duName) {
final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
ProcessState state = ProcessState.ACTIVE;
@@ -69,6 +72,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
Matcher matcher = duNamePattern.matcher(pconf.getPackage());
if (matcher.matches() && pconf.getState().equals(state)) {
pconf.setState(ProcessState.RETIRED);
+ __log.info("Set state of " +pconf.getProcessId() +"to " +pconf.getState());
confs.add(pconf);
}
}
@@ -79,6 +83,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
if (dudao != null) {
List<ProcessConfImpl> load = load(dudao);
+ __log.info("Loading DU from store: " + duName);
for(ProcessConfImpl p : load) {
_processes.put(p.getProcessId(),p);
}
@@ -93,6 +98,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
for (ProcessConfImpl p : confs) {
try {
+ __log.info("Fire event of " + p.getProcessId() +" " +p.getState());
fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
} catch (Exception except) {
__log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
@@ -112,6 +118,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private void publishProcessStoreUndeployedEvent(String duName){
undeployedEvent = new ProcessStoreUndeployedEvent(duName);
_clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
+ __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getUuid());
}
/**
http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/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 36859eb..89469e3 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.store.ClusterProcessStoreImpl;
+
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -43,7 +43,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private Member leader;
private IMap<String, String> lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
- private ClusterProcessStoreImpl _clusterProcessStore;
+ private ClusterProcessStore _clusterProcessStore;
public void init(File configRoot) {
@@ -71,10 +71,7 @@ public class HazelcastClusterImpl implements ClusterManager {
__log.info("Registering HZ localMember ID " + localMember);
markAsMaster();
lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
-
- // Register for listening to message listener
clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
- clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
}
@@ -103,11 +100,12 @@ public class HazelcastClusterImpl implements ClusterManager {
class ClusterMemberShipListener implements MembershipListener {
@Override
public void memberAdded(MembershipEvent membershipEvent) {
- // Noting to do here.
+ __log.info("Member Added " +membershipEvent.getMember().getUuid());
}
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
+ __log.info("Member Removed " +membershipEvent.getMember().getUuid());
markAsMaster();
}
@@ -119,7 +117,7 @@ public class HazelcastClusterImpl implements ClusterManager {
public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
- __log.info("UUID " +clusterEvent.getUuid());
+ __log.info("Send " +clusterEvent.getInfo() +"Cluster Message " +"for " +clusterEvent.getDuName());
clusterMessageTopic.publish(clusterEvent);
}
@@ -137,8 +135,8 @@ public class HazelcastClusterImpl implements ClusterManager {
if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
String duName = event.getDuName();
- __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
- _clusterProcessStore.publishService(duName);
+ __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+ _clusterProcessStore.deployProcesses(duName);
}
}
@@ -147,7 +145,7 @@ public class HazelcastClusterImpl implements ClusterManager {
if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
String duName = event.getDuName();
- __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+ __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
_clusterProcessStore.undeployProcesses(duName);
}
}
@@ -166,9 +164,12 @@ public class HazelcastClusterImpl implements ClusterManager {
return isMaster;
}
- public void setClusterProcessStore(Object store) {
- if (store instanceof ClusterProcessStoreImpl)
- _clusterProcessStore = (ClusterProcessStoreImpl) store;
+ public void setClusterProcessStore(ClusterProcessStore store) {
+ _clusterProcessStore = store;
+ }
+
+ public void registerClusterProcessStoreMessageListener() {
+ clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
}
[19/30] ode git commit: fixed errors
Posted by sa...@apache.org.
fixed errors
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/09a44867
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/09a44867
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/09a44867
Branch: refs/heads/ODE-563
Commit: 09a448675000801befa747c802a9043439418a81
Parents: f1f9f3f
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 10:25:51 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 10:25:51 2015 +0530
----------------------------------------------------------------------
.../org/apache/ode/bpel/clapi/ClusterManager.java | 2 +-
.../hazelcast/HazelcastClusterImpl.java | 2 +-
.../hazelcast/HazelcastDeploymentLock.java | 6 ++++++
.../hazelcast/HazelcastInstanceLock.java | 18 ++++++++++++------
4 files changed, 20 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/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 4616126..cbfb12f 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
@@ -33,7 +33,7 @@ public interface ClusterManager {
/**
* shutdown the cluster instance
*/
- void shutdwon();
+ void shutdown();
/**
* Return whether the local member is Master or not
http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/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 8bd9c7d..57984c0 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
@@ -166,7 +166,7 @@ public class HazelcastClusterImpl implements ClusterManager {
if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
}
- public ClusterLock getDeplymentLock(){
+ public ClusterLock getDeploymentLock(){
return _hazelcastDeploymentLock;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/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 34fa5d4..44bbea8 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
@@ -24,6 +24,8 @@ import org.apache.ode.bpel.clapi.ClusterLock;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.concurrent.TimeUnit;
+
public class HazelcastDeploymentLock implements ClusterLock{
private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
@@ -60,4 +62,8 @@ public class HazelcastDeploymentLock implements ClusterLock{
}
return state;
}
+
+ public boolean tryLockMap(String key,int time, TimeUnit tu) {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/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 e673a81..40f1d66 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
@@ -36,7 +36,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
_lock_map = lock_map;
}
- private void putIfAbsent(String key, String keyVal) {
+ public void putIfAbsent(String key, String keyVal) {
_lock_map.putIfAbsent(key, keyVal);
}
@@ -85,12 +85,12 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
}
}
- private boolean lockMap(String key) {
+ public boolean lockMap(String key) {
_lock_map.lock(key);
return true;
}
- private boolean unlockMap(String key) {
+ public boolean unlockMap(String key) {
if (_lock_map.get(key) == "true") {
_lock_map.unlock(key);
_lock_map.replace(key,"false");
@@ -98,13 +98,19 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
return true;
}
- private boolean tryLockMap(String key) {
+ public boolean tryLockMap(String key) {
boolean state = _lock_map.tryLock(key);
return state;
}
- private boolean tryLockMap(String key,int time, TimeUnit tu) {
- boolean state = _lock_map.tryLock(key,time,tu);
+ public boolean tryLockMap(String key,int time, TimeUnit tu) {
+ boolean state = true;
+ try {
+ state = _lock_map.tryLock(key,time,tu);
+ } catch (InterruptedException ex) {
+ __log.error(ex);
+ }
+
_lock_map.replace(key,"" +state);
return state;
}
[18/30] ode git commit: fixed errors with instance lock manager
Posted by sa...@apache.org.
fixed errors with instance lock manager
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/f1f9f3f1
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/f1f9f3f1
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/f1f9f3f1
Branch: refs/heads/ODE-563
Commit: f1f9f3f1ebd87c988fa390c532dd5d7818760fdc
Parents: 4a101a4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 10:02:09 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 10:02:09 2015 +0530
----------------------------------------------------------------------
.../ode/bpel/AbstractInstanceLockManager.java | 38 +++++++++++++++++++
.../apache/ode/bpel/clapi/ClusterManager.java | 6 ++-
.../engine/AbstractInstanceLockManager.java | 38 -------------------
.../apache/ode/bpel/engine/BpelEngineImpl.java | 39 ++++++--------------
.../ode/bpel/engine/InstanceLockManager.java | 10 ++---
.../hazelcast/HazelcastClusterImpl.java | 1 +
.../hazelcast/HazelcastDeploymentLock.java | 3 ++
.../hazelcast/HazelcastInstanceLock.java | 6 ++-
8 files changed, 65 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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
new file mode 100644
index 0000000..7a34b2c
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
@@ -0,0 +1,38 @@
+/*
+ * 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/f1f9f3f1/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 25110b4..4616126 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,8 +18,9 @@
*/
package org.apache.ode.bpel.clapi;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
+
import java.io.File;
-import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
public interface ClusterManager {
@@ -58,5 +59,6 @@ public interface ClusterManager {
void registerClusterProcessStoreMessageListener();
ClusterLock getDeploymentLock();
- org.apache.ode.bpel.engine.AbstractInstanceLockManager getInstanceLock();
+
+ AbstractInstanceLockManager getInstanceLock();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
deleted file mode 100644
index a534e11..0000000
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/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.engine;
-
-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 void unlock(Long iid);
-
- 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;
- }
-}
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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 5bef134..e278c7d 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
@@ -19,42 +19,19 @@
package org.apache.ode.bpel.engine;
-import java.util.ArrayList;
-import java.util.Date;
-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;
-
-import javax.wsdl.Operation;
-import javax.wsdl.PortType;
-import javax.xml.namespace.QName;
-
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.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.*;
import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
import org.apache.ode.bpel.iapi.MessageExchange.Status;
import org.apache.ode.bpel.iapi.MyRoleMessageExchange.CorrelationStatus;
import org.apache.ode.bpel.iapi.Scheduler.JobDetails;
-import org.apache.ode.bpel.iapi.Scheduler.JobInfo;
import org.apache.ode.bpel.iapi.Scheduler.JobType;
import org.apache.ode.bpel.intercept.InterceptorInvoker;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
@@ -70,6 +47,12 @@ import org.apache.ode.utils.msg.MessageBundle;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import javax.wsdl.Operation;
+import javax.wsdl.PortType;
+import javax.xml.namespace.QName;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
/**
* Implementation of the {@link BpelEngine} interface: provides the server methods that should be invoked in the context of a
* transaction.
@@ -115,7 +98,7 @@ public class BpelEngineImpl implements BpelEngine {
private SharedEndpoints _sharedEps;
/** Manage instance-level locks. */
- private AbstractInstanceLockManager _instanceLockManager;
+ private AbstractInstanceLockManager _instanceLockManager;
final Contexts _contexts;
@@ -127,7 +110,6 @@ public class BpelEngineImpl implements BpelEngine {
if(_contexts.clusterManager != null) {
_instanceLockManager = _contexts.clusterManager.getInstanceLock();
}
-
else _instanceLockManager = new InstanceLockManager();
_sharedEps = new SharedEndpoints();
_sharedEps.init();
@@ -435,7 +417,8 @@ public class BpelEngineImpl implements BpelEngine {
// Note that we don't want to wait too long here to get our lock, since we are likely holding
// on to scheduler's locks of various sorts.
try {
- _instanceLockManager.lock(iid, 1, TimeUnit.MICROSECONDS);
+ _instanceLockManager.
+ lock(iid, 1, TimeUnit.MICROSECONDS);
_contexts.scheduler.registerSynchronizer(new Scheduler.Synchronizer() {
public void afterCompletion(boolean success) {
_instanceLockManager.unlock(iid);
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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 652d2ec..dba127b 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,6 +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 java.util.HashMap;
import java.util.Map;
@@ -40,7 +41,7 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
- private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo> ();
+ private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo>();
public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException, TimeoutException {
if (iid == null) return;
@@ -135,9 +136,6 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
return "{Lock for Instance #" + iid +", acquired by " + acquierer + "}";
}
}
-
- /** Exception class indicating a time-out occured while obtaining a lock. */
- /*public static final class TimeoutException extends Exception {
- private static final long serialVersionUID = 7247629086692580285L;
- }*/
}
+
+
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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 fb25606..8bd9c7d 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,6 +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;
/**
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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 4d0aac1..34fa5d4 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
@@ -21,6 +21,9 @@ package org.apache.ode.clustering.hazelcast;
import com.hazelcast.core.IMap;
import org.apache.ode.bpel.clapi.ClusterLock;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
public class HazelcastDeploymentLock implements ClusterLock{
private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/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 3b8ab41..e673a81 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,11 +20,13 @@ package org.apache.ode.clustering.hazelcast;
import com.hazelcast.core.IMap;
import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
import java.util.concurrent.TimeUnit;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
-public class HazelcastInstanceLock extends AbstractInstnaceLockManager implements ClusterLock {
+public class HazelcastInstanceLock extends AbstractInstanceLockManager implements ClusterLock {
private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
private IMap<String, String> _lock_map;
[02/30] ode git commit: second commit
Posted by sa...@apache.org.
second commit
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/79c0b16a
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/79c0b16a
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/79c0b16a
Branch: refs/heads/ODE-563
Commit: 79c0b16a694d9a8a25d9ecd8a05272e5e34d8a7f
Parents: 50c4dfe
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jun 7 20:44:02 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jun 7 20:44:02 2015 +0530
----------------------------------------------------------------------
.../ode/axis2/deploy/DeploymentPoller.java | 94 +++++++++++++-------
.../ode/axis2/service/DeploymentWebService.java | 80 ++++++++++-------
.../ode/il/config/OdeConfigProperties.java | 6 ++
.../hazelcast/HazelcastClusterImpl.java | 22 ++---
4 files changed, 122 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 6f82385..057c0fb 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -54,6 +54,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+
/**
* Polls a directory for the deployment of a new deployment unit.
*/
@@ -74,6 +76,8 @@ public class DeploymentPoller {
private SystemSchedulesConfig _systemSchedulesConf;
+ private boolean clusterEnabled;
+
@SuppressWarnings("unchecked")
private Map<String, WatchDog> dDWatchDogsByPath = new HashMap<String, WatchDog>();
@SuppressWarnings("unchecked")
@@ -96,6 +100,7 @@ public class DeploymentPoller {
public DeploymentPoller(File deployDir, final ODEServer odeServer) {
_odeServer = odeServer;
_deployDir = deployDir;
+ clusterEnabled = _odeServer.getClusteringState();
if (!_deployDir.exists()) {
boolean isDeployDirCreated = _deployDir.mkdir();
if (!isDeployDirCreated) {
@@ -130,50 +135,58 @@ public class DeploymentPoller {
@SuppressWarnings("unchecked")
private void check() {
File[] files = _deployDir.listFiles(_fileFilter);
+ boolean duLocked;
// Checking for new deployment directories
if (isDeploymentFromODEFileSystemAllowed() && files != null) {
for (File file : files) {
- File deployXml = new File(file, "deploy.xml");
- File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
-
- if (!deployXml.exists()) {
- // Skip if deploy.xml is abset
- if (__log.isDebugEnabled()) {
- __log.debug("Not deploying " + file + " (missing deploy.xml)");
- }
- }
+ duLocked = lock(file.getName());
+ try {
+ if (duLocked) {
+ File deployXml = new File(file, "deploy.xml");
+ File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
+
+ if (!deployXml.exists()) {
+ // Skip if deploy.xml is abset
+ if (__log.isDebugEnabled()) {
+ __log.debug("Not deploying " + file + " (missing deploy.xml)");
+ }
+ }
- WatchDog ddWatchDog = ensureDeployXmlWatchDog(file, deployXml);
+ WatchDog ddWatchDog = ensureDeployXmlWatchDog(file, deployXml);
- if (deployedMarker.exists()) {
- checkDeployXmlWatchDog(ddWatchDog);
- continue;
- }
+ if (deployedMarker.exists()) {
+ checkDeployXmlWatchDog(ddWatchDog);
+ continue;
+ }
- try {
- boolean isCreated = deployedMarker.createNewFile();
- if (!isCreated) {
- __log.error("Error while creating file "
+ try {
+ boolean isCreated = deployedMarker.createNewFile();
+ if (!isCreated) {
+ __log.error("Error while creating file "
+ file.getName()
+ ".deployed ,deployment could be inconsistent");
- }
- } catch (IOException e1) {
- __log.error("Error creating deployed marker file, " + file + " will not be deployed");
- continue;
- }
+ }
+ } catch (IOException e1) {
+ __log.error("Error creating deployed marker file, " + file + " will not be deployed");
+ continue;
+ }
- try {
- _odeServer.getProcessStore().undeploy(file);
- } catch (Exception ex) {
- __log.error("Error undeploying " + file.getName());
- }
+ try {
+ _odeServer.getProcessStore().undeploy(file);
+ } catch (Exception ex) {
+ __log.error("Error undeploying " + file.getName());
+ }
- try {
- Collection<QName> deployed = _odeServer.getProcessStore().deploy(file);
- __log.info("Deployment of artifact " + file.getName() + " successful: " + deployed );
- } catch (Exception e) {
- __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
+ try {
+ Collection<QName> deployed = _odeServer.getProcessStore().deploy(file);
+ __log.info("Deployment of artifact " + file.getName() + " successful: " + deployed);
+ } catch (Exception e) {
+ __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
+ }
+ }
+ } finally {
+ unlock(file.getName());
}
}
}
@@ -324,4 +337,19 @@ public class DeploymentPoller {
_odeServer.getProcessStore().refreshSchedules(deploymentPakage);
}
}
+
+ //Implementation of IMap key Lock
+ public boolean lock(String key) {
+ if(clusterEnabled) {
+ _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+ }
+ return true;
+ }
+
+ public boolean unlock(String key) {
+ if(clusterEnabled) {
+ _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+ }
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index aa769ed..1c09bb3 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -109,6 +109,7 @@ public class DeploymentWebService {
String operation = messageContext.getAxisOperation().getName().getLocalPart();
SOAPFactory factory = getSOAPFactory(messageContext);
boolean unknown = false;
+ boolean duLocked;
try {
if (operation.equals("deploy")) {
@@ -166,43 +167,54 @@ public class DeploymentWebService {
_poller.hold();
File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
- boolean createDir = dest.mkdir();
- if(!createDir){
- throw new OdeFault("Error while creating file " + dest.getName());
- }
- unzip(dest, (DataHandler) binaryNode.getDataHandler());
-
- // Check that we have a deploy.xml
- File deployXml = new File(dest, "deploy.xml");
- if (!deployXml.exists())
- throw new OdeFault("The deployment doesn't appear to contain a deployment " +
- "descriptor in its root directory named deploy.xml, aborting.");
-
- Collection<QName> deployed = _store.deploy(dest);
-
- File deployedMarker = new File(_deployPath, dest.getName() + ".deployed");
- if(!deployedMarker.createNewFile()) {
- throw new OdeFault("Error while creating file " + deployedMarker.getName() + "deployment failed");
- }
- // Telling the poller what we deployed so that it doesn't try to deploy it again
- _poller.markAsDeployed(dest);
- __log.info("Deployment of artifact " + dest.getName() + " successful.");
+ //lock on deployment unit directory name
+ duLocked = _poller.lock(dest.getName());
- OMElement response = factory.createOMElement("response", null);
-
- if (__log.isDebugEnabled()) __log.debug("Deployed package: "+dest.getName());
- OMElement d = factory.createOMElement("name", _deployapi);
- d.setText(dest.getName());
- response.addChild(d);
-
- for (QName pid : deployed) {
- if (__log.isDebugEnabled()) __log.debug("Deployed PID: "+pid);
- d = factory.createOMElement("id", _deployapi);
- d.setText(pid);
- response.addChild(d);
+ if (duLocked) {
+ boolean createDir = dest.mkdir();
+ if (!createDir) {
+ throw new OdeFault("Error while creating file " + dest.getName());
+ }
+ try {
+ unzip(dest, (DataHandler) binaryNode.getDataHandler());
+
+ // Check that we have a deploy.xml
+ File deployXml = new File(dest, "deploy.xml");
+ if (!deployXml.exists())
+ throw new OdeFault("The deployment doesn't appear to contain a deployment " +
+ "descriptor in its root directory named deploy.xml, aborting.");
+
+ Collection<QName> deployed = _store.deploy(dest);
+
+ File deployedMarker = new File(_deployPath, dest.getName() + ".deployed");
+ if (!deployedMarker.createNewFile()) {
+ throw new OdeFault("Error while creating file " + deployedMarker.getName() + "deployment failed");
+ }
+
+ // Telling the poller what we deployed so that it doesn't try to deploy it again
+ _poller.markAsDeployed(dest);
+ __log.info("Deployment of artifact " + dest.getName() + " successful.");
+
+
+ OMElement response = factory.createOMElement("response", null);
+
+ if (__log.isDebugEnabled()) __log.debug("Deployed package: " + dest.getName());
+ OMElement d = factory.createOMElement("name", _deployapi);
+ d.setText(dest.getName());
+ response.addChild(d);
+
+ for (QName pid : deployed) {
+ if (__log.isDebugEnabled()) __log.debug("Deployed PID: " + pid);
+ d = factory.createOMElement("id", _deployapi);
+ d.setText(pid);
+ response.addChild(d);
+ }
+ sendResponse(factory, messageContext, "deployResponse", response);
+ } finally {
+ _poller.unlock(dest.getName());
+ }
}
- sendResponse(factory, messageContext, "deployResponse", response);
} finally {
_poller.release();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index 39ca2b0..cef3b74 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -106,6 +106,8 @@ public class OdeConfigProperties {
public static final String DEFAULT_TX_FACTORY_CLASS_NAME = "org.apache.ode.il.EmbeddedGeronimoFactory";
+ public static final String PROP_HAZELCAST_CLUSTERING = "hazelcast.clustering.enabled";
+
private File _cfgFile;
private String _prefix;
@@ -289,6 +291,10 @@ public class OdeConfigProperties {
return getProperty(OdeConfigProperties.PROP_DEPLOY_DIR);
}
+ public String getClusteringState() {
+ return getProperty(OdeConfigProperties.PROP_HAZELCAST_CLUSTERING);
+ }
+
public String getTxFactoryClass() {
return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, DEFAULT_TX_FACTORY_CLASS_NAME);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/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 afe0e95..2cff4c8 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
@@ -39,6 +39,8 @@ public class HazelcastClusterImpl implements HazelcastCluster{
private String message = "";
private Member leader;
+ private IMap<String, String> lock_map;
+
public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
_hazelcastInstance = hazelcastInstance;
init();
@@ -57,6 +59,8 @@ public class HazelcastClusterImpl implements HazelcastCluster{
__log.info("Registering HZ localMember ID " + localMemberID);
_hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
.put(localMemberID, isMaster);
+
+ lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
}
public String getHazelCastNodeID(Member member) {
@@ -65,20 +69,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
return hostName + ":" + port;
}
- class ClusterManager {
- IMap<String, String> lock_map;
-
- ClusterManager() {
- lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
- }
-
- void lock(String key) {
- lock_map.lock(key);
- }
+ public void lock(String key) {
+ lock_map.lock(key);
+ }
- void unlock(String key) {
- lock_map.unlock(key);
- }
+ public void unlock(String key) {
+ lock_map.unlock(key);
}
class ClusterMemberShipListener implements MembershipListener {
[24/30] ode git commit: Cluster Enabled Simple Scheduler-1
Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-1
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/15f1883c
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/15f1883c
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/15f1883c
Branch: refs/heads/ODE-563
Commit: 15f1883c40e845b430c5c40418333ccccfa48b6a
Parents: 9ffe0c7
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 19 00:41:15 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 19 00:41:15 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 12 +-
.../org/apache/ode/test/BPELTestAbstract.java | 53 ++++----
.../hazelcast/HazelcastClusterImpl.java | 29 ++++-
.../java/org/apache/ode/jbi/OdeLifeCycle.java | 25 ++--
.../ode/scheduler/simple/SchedulerListener.java | 27 ++++
.../ode/scheduler/simple/SimpleScheduler.java | 123 +++++++++++++++----
6 files changed, 191 insertions(+), 78 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index da62139..6803350 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -50,6 +50,7 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
+import org.omg.CORBA.StringHolder;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
@@ -195,7 +196,10 @@ public class ODEServer {
registerExternalVariableModules();
_store.loadAll();
- if (_clusterManager != null) _clusterManager.registerClusterProcessStoreMessageListener();
+ if (_clusterManager != null) {
+ _clusterManager.registerClusterProcessStoreMessageListener();
+ _clusterManager.setScheduler(_scheduler);
+ }
try {
_bpelServer.start();
@@ -524,8 +528,10 @@ public class ODEServer {
}
protected Scheduler createScheduler() {
- SimpleScheduler scheduler = new SimpleScheduler(new GUID().toString(),
- new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());
+ String nodeId;
+ if (isClusteringEnabled) nodeId = _clusterManager.getUuid();
+ else nodeId = new GUID().toString();
+ SimpleScheduler scheduler = new SimpleScheduler(nodeId, new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
scheduler.setExecutorService(_executorService);
scheduler.setTransactionManager(_txMgr);
return scheduler;
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
----------------------------------------------------------------------
diff --git a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
index d24b59b..cdda50e 100644
--- a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
+++ b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
@@ -18,44 +18,14 @@
*/
package org.apache.ode.test;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
-import javax.xml.namespace.QName;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.evt.DebugBpelEventListener;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
-import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MessageExchange;
+import org.apache.ode.bpel.iapi.*;
import org.apache.ode.bpel.iapi.MessageExchange.Status;
-import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
import org.apache.ode.bpel.iapi.MyRoleMessageExchange.CorrelationStatus;
-import org.apache.ode.bpel.iapi.ProcessStore;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
import org.apache.ode.il.EmbeddedGeronimoFactory;
import org.apache.ode.il.config.OdeConfigProperties;
@@ -71,6 +41,25 @@ import org.junit.Assert;
import org.junit.Before;
import org.w3c.dom.Element;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public abstract class BPELTestAbstract {
private static final Log log = LogFactory.getLog(BPELTestAbstract.class);
public static final long WAIT_BEFORE_INVOKE_TIMEOUT = 2000;
@@ -139,7 +128,7 @@ public abstract class BPELTestAbstract {
{
JdbcDelegate del = new JdbcDelegate(_dataSource);
- scheduler = new SimpleScheduler("node", del, props);
+ scheduler = new SimpleScheduler("node", del, props,false);
scheduler.setTransactionManager(_txManager);
_cf = new BpelDAOConnectionFactoryImpl(scheduler);
_server.setDaoConnectionFactory(_cf);
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/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 5f2b8f5..63a889a 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,6 +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.iapi.Scheduler;
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -46,6 +47,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private IMap<Long, Long> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
+ private Scheduler _scheduler;
private ClusterLock<String> _hazelcastDeploymentLock;
private ClusterLock<Long> _hazelcastInstanceLock;
@@ -89,13 +91,17 @@ public class HazelcastClusterImpl implements ClusterManager {
class ClusterMemberShipListener implements MembershipListener {
@Override
public void memberAdded(MembershipEvent membershipEvent) {
- __log.info("Member Added " +membershipEvent.getMember().getUuid());
+ String nodeId = membershipEvent.getMember().getUuid();
+ __log.info("Member Added " +nodeId);
+ if(isMaster) _simpleScheduler.memberAdded(nodeId);
}
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
- __log.info("Member Removed " +membershipEvent.getMember().getUuid());
+ String nodeId = membershipEvent.getMember().getUuid();
+ __log.info("Member Removed " +nodeId);
markAsMaster();
+ if(isMaster) _simpleScheduler.memberRemoved(nodeId, uuid);
}
@Override
@@ -145,6 +151,7 @@ public class HazelcastClusterImpl implements ClusterManager {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember()) {
isMaster = true;
+ _simpleScheduler.setIsMasterNode(true);
}
__log.info(isMaster);
}
@@ -153,8 +160,17 @@ public class HazelcastClusterImpl implements ClusterManager {
return isMaster;
}
+ public String getUuid() {
+ return uuid;
+ }
+
public void setClusterProcessStore(ClusterProcessStore store) {
- _clusterProcessStore = store;
+ _clusterProcessStore = store;
+ }
+
+ public void setScheduler(Scheduler scheduler) {
+ _scheduler = scheduler;
+ _scheduler.setClusterManager(this);
}
public void registerClusterProcessStoreMessageListener() {
@@ -172,5 +188,12 @@ public class HazelcastClusterImpl implements ClusterManager {
public ClusterLock<Long> getInstanceLock(){
return _hazelcastInstanceLock;
}
+
+ public List<String> getKnownNodes() {
+ List<String> nodesList = new ArrayList<String>();
+ for(Member m : _hazelcastInstance.getCluster().getMembers())
+ nodesList.add(m.getUuid()) ;
+ return nodesList;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
----------------------------------------------------------------------
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
index 40fb044..0c1b296 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
@@ -19,18 +19,6 @@
package org.apache.ode.jbi;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.concurrent.Executors;
-
-import javax.jbi.JBIException;
-import javax.jbi.component.ComponentContext;
-import javax.jbi.component.ComponentLifeCycle;
-import javax.jbi.component.ServiceUnitManager;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.transaction.TransactionManager;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
@@ -50,6 +38,17 @@ import org.apache.ode.store.ProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
+import javax.jbi.JBIException;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.component.ComponentLifeCycle;
+import javax.jbi.component.ServiceUnitManager;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.transaction.TransactionManager;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.concurrent.Executors;
+
/**
* This class implements ComponentLifeCycle. The JBI framework will start this engine class automatically when JBI framework starts
* up.
@@ -243,7 +242,7 @@ public class OdeLifeCycle implements ComponentLifeCycle {
_ode._executorService = Executors.newCachedThreadPool();
else
_ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
- _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties());
+ _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties(),false);
_ode._scheduler.setJobProcessor(_ode._server);
_ode._scheduler.setExecutorService(_ode._executorService);
_ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
new file mode 100644
index 0000000..3786912
--- /dev/null
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
@@ -0,0 +1,27 @@
+/*
+ * 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.scheduler.simple;
+
+public interface SchedulerListener {
+
+ void memberAdded(String nodeId);
+
+ void memberRemoved(String nodeId,String masterId);
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a56b86e..3b6ec4d 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,33 +19,19 @@
package org.apache.ode.scheduler.simple;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.Scheduler;
+import javax.transaction.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
/**
* A reliable and relatively simple scheduler that uses a database to persist information about
* scheduled tasks.
@@ -66,7 +52,7 @@ import org.apache.ode.bpel.iapi.Scheduler;
* @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
*
*/
-public class SimpleScheduler implements Scheduler, TaskRunner {
+public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener {
private static final Log __log = LogFactory.getLog(SimpleScheduler.class);
private static final int DEFAULT_TRANSACTION_TIMEOUT = 60 * 1000;
@@ -114,6 +100,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
private DatabaseDelegate _db;
+ private boolean _isClusterEnabled;
+
+ private ClusterManager _clusterManager;
+
/** All the nodes we know about */
private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
@@ -147,9 +137,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
private DateFormat debugDateFormatter = new SimpleDateFormat("HH:mm:ss,SSS");
- public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf) {
+ public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf, boolean clusterState) {
_nodeId = nodeId;
_db = del;
+ _isClusterEnabled = clusterState;
_todoLimit = getIntProperty(conf, "ode.scheduler.queueLength", _todoLimit);
_immediateInterval = getLongProperty(conf, "ode.scheduler.immediateInterval", _immediateInterval);
_nearFutureInterval = getLongProperty(conf, "ode.scheduler.nearFutureInterval", _nearFutureInterval);
@@ -183,6 +174,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
_nodeId = nodeId;
}
+ public void setClusterManager(ClusterManager cm) {
+ _clusterManager = cm;
+ }
+
public void setStaleInterval(long staleInterval) {
_staleInterval = staleInterval;
}
@@ -490,10 +485,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
_todo.enqueue(new LoadImmediateTask(now));
// schedule check for stale nodes, make it random so that the nodes don't overlap.
- _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+ if (!_isClusterEnabled)
+ _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
// do the upgrade sometime (random) in the immediate interval.
- _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+ enqueUpgradeJobsTask(now);
_todo.start();
_running = true;
@@ -521,6 +517,18 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
_running = false;
}
+ public void memberAdded(final String nodeId) {
+ _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis()+ randomMean(_immediateInterval)));
+ }
+
+ public void memberRemoved(final String nodeId, final String masterId) {
+ recoverClusterStaleNodes(nodeId, masterId);
+ }
+
+ public void enqueUpgradeJobsTask(long now) {
+ _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+ }
+
class RunJob implements Callable<Void> {
final Job job;
final JobProcessor processor;
@@ -814,6 +822,41 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
}
+ boolean doClusterJobsUpgrade() {
+ __log.debug("UPGRADE started for Cluster Mode");
+ final ArrayList<String> knownNodes = _clusterManager.getKnownNodes();
+ Collections.sort(knownNodes);
+
+ // We're going to try to upgrade near future jobs using the db only.
+ // We assume that the distribution of the trailing digits in the
+ // scheduled time are uniformly distributed, and use modular division
+ // of the time by the number of nodes to create the node assignment.
+ // This can be done in a single update statement.
+ final long maxtime = System.currentTimeMillis() + _nearFutureInterval;
+ try {
+ return execTransaction(new Callable<Boolean>() {
+
+ public Boolean call() throws Exception {
+ int numNodes = knownNodes.size();
+ for (int i = 0; i < numNodes; ++i) {
+ String node = knownNodes.get(i);
+ _db.updateAssignToNode(node, i, numNodes, maxtime);
+ }
+ return true;
+ }
+
+ });
+
+ } catch (Exception ex) {
+ __log.error("Database error upgrading jobs.", ex);
+ return false;
+ } finally {
+ __log.debug("UPGRADE complete");
+ }
+
+ }
+
+
/**
* Re-assign stale node's jobs to self.
* @param nodeId
@@ -857,6 +900,31 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
// return delay;
// }
+ void recoverClusterStaleNodes(final String nodeId, final String masterId) {
+ if (__log.isDebugEnabled()) {
+ __log.debug("recovering stale nodes for Cluster Mode " + nodeId);
+ }
+ try {
+ int numrows = execTransaction(new Callable<Integer>() {
+ public Integer call() throws Exception {
+ return _db.updateReassign(nodeId, masterId);
+ }
+ });
+
+ if (__log.isDebugEnabled()) {
+ __log.debug("reassigned " + numrows + " jobs to master node. ");
+ }
+
+ // Force a load-immediate to catch anything new from the recovered node.
+ doLoadImmediate();
+
+ } catch (Exception ex) {
+ __log.error("Database error reassigning node.", ex);
+ } finally {
+ __log.debug("node recovery complete");
+ }
+ }
+
private abstract class SchedulerTask extends Task implements Runnable {
SchedulerTask(long schedDate) {
super(schedDate);
@@ -911,7 +979,8 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
boolean success = false;
try {
- success = doUpgrade();
+ if (_isClusterEnabled && _clusterManager.getIsMaster()) success = doClusterJobsUpgrade();
+ else success = doUpgrade();
} finally {
long future = System.currentTimeMillis() + (success ? (long) (_nearFutureInterval * .50) : 1000);
_nextUpgrade.set(future);
[11/30] ode git commit: completed version-2 of deploying processes in
the cluster
Posted by sa...@apache.org.
completed version-2 of deploying processes in the cluster
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/4137714c
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/4137714c
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/4137714c
Branch: refs/heads/ODE-563
Commit: 4137714cf38dffd9b7d391bf5e2944e84ccb14d4
Parents: 0afb7c4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 23 09:56:39 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 23 09:56:39 2015 +0530
----------------------------------------------------------------------
.../apache/ode/bpel/clapi/ClusterManager.java | 4 +--
.../ode/store/ClusterProcessStoreImpl.java | 4 +--
.../hazelcast/HazelcastClusterImpl.java | 27 ++++++++------------
3 files changed, 15 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/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 fab2bac..da2d668 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
@@ -64,9 +64,9 @@ public interface ClusterManager {
/**
* Publish Deploy event to the cluster by deploy initiator
- * @param event
+ * @param clusterEvent
*/
- void publishProcessStoreEvent(Object event);
+ void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent);
/**
* Check whether the map has a value for given key, if absent put the value to map
http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 117eab0..f0ae9d1 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -55,7 +55,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private void publishProcessStoreDeployedEvent(String duName){
deployedEvent = new ProcessStoreDeployedEvent(duName);
- _clusterManager.publishProcessStoreEvent(deployedEvent);
+ _clusterManager.publishProcessStoreClusterEvent(deployedEvent);
}
public void publishService(final String duName) {
@@ -111,7 +111,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private void publishProcessStoreUndeployedEvent(String duName){
undeployedEvent = new ProcessStoreUndeployedEvent(duName);
- _clusterManager.publishProcessStoreEvent(undeployedEvent);
+ _clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
}
/**
http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/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 42a3169..36859eb 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
@@ -29,10 +29,7 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.clapi.ClusterManager;
-import org.apache.ode.bpel.clapi.ProcessStoreClusterEvent;
-import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
-import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.bpel.clapi.*;
import org.apache.ode.store.ClusterProcessStoreImpl;
/**
@@ -45,7 +42,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private boolean isMaster = false;
private Member leader;
private IMap<String, String> lock_map;
- private ITopic<Object> clusterMessageTopic;
+ private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStoreImpl _clusterProcessStore;
public void init(File configRoot) {
@@ -120,27 +117,25 @@ public class HazelcastClusterImpl implements ClusterManager {
}
}
- public void publishProcessStoreEvent(Object event) {
- if (event instanceof ProcessStoreClusterEvent) {
- ProcessStoreClusterEvent e = (ProcessStoreClusterEvent) event;
- e.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
- clusterMessageTopic.publish(e);
- }
+ public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
+ clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
+ __log.info("UUID " +clusterEvent.getUuid());
+ clusterMessageTopic.publish(clusterEvent);
}
- class ClusterMessageListener implements MessageListener<Object> {
+ class ClusterMessageListener implements MessageListener<ProcessStoreClusterEvent> {
@Override
- public void onMessage(Message<Object> msg) {
+ public void onMessage(Message<ProcessStoreClusterEvent> msg) {
handleEvent(msg.getMessageObject());
}
}
- private void handleEvent(Object message) {
+ private void handleEvent(ProcessStoreClusterEvent message) {
if (message instanceof ProcessStoreDeployedEvent) {
ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
- if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+ if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
String duName = event.getDuName();
__log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
_clusterProcessStore.publishService(duName);
@@ -150,7 +145,7 @@ public class HazelcastClusterImpl implements ClusterManager {
else if (message instanceof ProcessStoreUndeployedEvent) {
ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
- if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+ if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
String duName = event.getDuName();
__log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
_clusterProcessStore.undeployProcesses(duName);
[05/30] ode git commit: publishing axis2 service in all servers in
cluster
Posted by sa...@apache.org.
publishing axis2 service in all servers in cluster
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/0b19e7e4
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/0b19e7e4
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/0b19e7e4
Branch: refs/heads/ODE-563
Commit: 0b19e7e457a582fa1ab862e620143fb3b7cfbf0d
Parents: 71f3d35
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Jun 12 12:37:18 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Jun 12 12:37:18 2015 +0530
----------------------------------------------------------------------
Rakefile | 2 +-
.../ode/store/ClusterProcessStoreImpl.java | 34 +++++++++++++++++---
.../hazelcast/HazelcastClusterImpl.java | 34 ++------------------
3 files changed, 32 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 5fa4a07..06dcbd5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -271,7 +271,7 @@ define "ode" do
define "bpel-store" do
compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
"dao-hibernate", "dao-jpa", "clustering", "utils"),
- JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
+ JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J,HAZELCAST
compile { open_jpa_enhance }
resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index c6f81ba..f364fb7 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -31,14 +31,22 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
+import com.hazelcast.core.*;
+
public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
- private HazelcastClusterImpl _hazelcastClusterImpl;
+ private HazelcastInstance _hazelcastInstance;
+ private Member deployInitiator;
+ private ITopic<String> clusterMessageTopic;
public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
- super();
- _hazelcastClusterImpl = hazelcastClusterImpl;
+ super(eprContext,ds,persistenceType,props,createDatamodel);
+ _hazelcastInstance = hazelcastClusterImpl.getHazelcastInstance();
+
+ // Register for listening to message listener
+ clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+ clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -48,8 +56,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
}
public void publishProcessStoreDeployedEvent(String duName){
- String returnedDuName = _hazelcastClusterImpl.publishProcessStoreEvent("Deployed " +duName);
- publishService(returnedDuName);
+ deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+ clusterMessageTopic.publish("Deployed " +duName);
}
public void publishService(final String duName) {
@@ -77,4 +85,20 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
}
}
+ class ClusterMessageListener implements MessageListener<String> {
+ @Override
+ public void onMessage(Message<String> msg) {
+ String message = msg.getMessageObject();
+ String arr[] = message.split(" ", 2);
+ String duName = arr[1];
+ if(message.contains("Deployed ")) {
+ if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+ __log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
+ publishService(duName);
+ }
+ }
+ }
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/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 0e53de4..4e6878e 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
@@ -36,12 +36,9 @@ public class HazelcastClusterImpl implements HazelcastCluster{
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
- private String _duName = "";
private Member leader;
- private Member deployInitiator;
private IMap<String, String> lock_map;
- private ITopic<String> clusterMessageTopic;
public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
_hazelcastInstance = hazelcastInstance;
@@ -52,10 +49,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
// Registering this node in the cluster.
_hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
- // Register for listening to message listener
- clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
- clusterMessageTopic.addMessageListener(new ClusterMessageListener());
-
Member localMember = _hazelcastInstance.getCluster().getLocalMember();
String localMemberID = getHazelCastNodeID(localMember);
__log.info("Registering HZ localMember ID " + localMemberID);
@@ -113,22 +106,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
}
}
- class ClusterMessageListener implements MessageListener<String> {
- @Override
- public void onMessage(Message<String> msg) {
- String message = msg.getMessageObject();
- String arr[] = message.split(" ", 2);
- String duName = arr[1];
- if(message.contains("Deployed ")) {
- if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
- setDUName(duName);
- __log.info("Recerive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +"for" +duName);
- }
- }
- }
- }
-
-
public void markAsMaster() {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember()) {
@@ -149,14 +126,7 @@ public class HazelcastClusterImpl implements HazelcastCluster{
return isMaster;
}
- public void setDUName(String duName) {
- _duName = duName;
+ public HazelcastInstance getHazelcastInstance() {
+ return _hazelcastInstance;
}
-
- public String publishProcessStoreEvent(String msg) {
- deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
- clusterMessageTopic.publish(msg);
- return _duName;
- }
-
}
[20/30] ode git commit: cluster enabled instance lock manager
implementation-1
Posted by sa...@apache.org.
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;
}
}
[21/30] ode git commit: Implement ClusterLock using java generics
Posted by sa...@apache.org.
Implement ClusterLock using java generics
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/dfb500c0
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/dfb500c0
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/dfb500c0
Branch: refs/heads/ODE-563
Commit: dfb500c081277bb30b806e6d33468bea1f612533
Parents: cfa4a97
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 12 19:19:06 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 12 19:19:06 2015 +0530
----------------------------------------------------------------------
.../ode/axis2/deploy/DeploymentPoller.java | 8 ++--
.../ode/axis2/service/DeploymentWebService.java | 8 ++--
.../org/apache/ode/bpel/clapi/ClusterLock.java | 30 ++++++++----
.../apache/ode/bpel/clapi/ClusterManager.java | 4 +-
.../bpel/iapi/AbstractInstanceLockManager.java | 37 ---------------
.../apache/ode/bpel/engine/BpelEngineImpl.java | 24 ++--------
.../ode/bpel/engine/InstanceLockManager.java | 22 ++++++++-
.../hazelcast/HazelcastClusterImpl.java | 14 +++---
.../hazelcast/HazelcastDeploymentLock.java | 19 ++++----
.../hazelcast/HazelcastInstanceLock.java | 50 +++++++-------------
.../ode/scheduler/simple/SimpleScheduler.java | 33 ++++---------
11 files changed, 97 insertions(+), 152 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 98f5f82..baa790b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -369,15 +369,15 @@ public class DeploymentPoller {
if(clusterEnabled) {
ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
clusterLock.putIfAbsent(key,key);
- return clusterLock.tryLockMap(key);
+ return clusterLock.tryLock(key);
}
else return true;
}
private boolean unlock(String key) {
- if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
+ if (clusterEnabled) {
+ _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlock(key);
}
- else return true;
+ return true;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 7e4b347..61bf00d 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -389,9 +389,9 @@ public class DeploymentWebService {
if(clusterEnabled) {
ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
clusterLock.putIfAbsent(key,key);
- return clusterLock.lockMap(key);
+ clusterLock.lock(key);
}
- else return true;
+ return true;
}
/**
@@ -399,8 +399,8 @@ public class DeploymentWebService {
*/
private boolean unlock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
+ _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlock(key);
}
- else return true;
+ return true;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 118b275..9c9683f 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
@@ -20,29 +20,38 @@ package org.apache.ode.bpel.clapi;
import java.util.concurrent.TimeUnit;
-public interface ClusterLock {
+public interface ClusterLock<E> {
/**
- * Acquire the lock for each file in the file system
+ * Acquire the lock for specified key
*
* @param key
* @return
*/
- boolean lockMap(String key);
+ void lock(E key);
/**
- * Release the lock acquired by each file
+ * Acquire the lock for specified key and time period
+ *
+ *
+ * @param key
+ * @return
+ */
+ void lock(E key,int time,TimeUnit tu) throws InterruptedException, TimeoutException;
+
+ /**
+ * Release the lock acquired for specified key
*
* @param key
* @return
*/
- boolean unlockMap(String key);
+ void unlock(E key);
/**
* Tries to acquire the lock for the specified key
* @param key
* @return
*/
- boolean tryLockMap(String key);
+ boolean tryLock(E key);
/**
* Tries to acquire the lock for the specified key and time period.
@@ -51,12 +60,17 @@ public interface ClusterLock {
* @param tu
* @return
*/
- boolean tryLockMap(String key, int time, TimeUnit tu);
+ boolean tryLock(E key, int time, TimeUnit tu);
/**
* Check whether the map has a value for given key, if absent put the value to map
* @param key
* @param keyVal
*/
- void putIfAbsent(String key, String keyVal);
+ void putIfAbsent(E key, E keyVal);
+
+ /** Exception class indicating a time-out occured while obtaining a lock. */
+ public static final class TimeoutException extends Exception {
+ private static final long serialVersionUID = 7247629086692580285L;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 d73810d..70d7c03 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,8 +18,6 @@
*/
package org.apache.ode.bpel.clapi;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
-
import java.io.File;
public interface ClusterManager {
@@ -66,5 +64,5 @@ public interface ClusterManager {
/**
* Return instance lock for cluster
*/
- AbstractInstanceLockManager getInstanceLock();
+ ClusterLock getInstanceLock();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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
deleted file mode 100644
index b53ac65..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
+++ /dev/null
@@ -1,37 +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.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/dfb500c0/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 fe38cf0..feb4cd1 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,22 +21,12 @@ package org.apache.ode.bpel.engine;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterLock;
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.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.*;
import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
import org.apache.ode.bpel.iapi.MessageExchange.Status;
@@ -60,13 +50,7 @@ import org.w3c.dom.Element;
import javax.wsdl.Operation;
import javax.wsdl.PortType;
import javax.xml.namespace.QName;
-
-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.*;
import java.util.concurrent.TimeUnit;
/**
@@ -114,7 +98,7 @@ public class BpelEngineImpl implements BpelEngine {
private SharedEndpoints _sharedEps;
/** Manage instance-level locks. */
- private final AbstractInstanceLockManager _instanceLockManager;
+ private final ClusterLock<Long> _instanceLockManager;
final Contexts _contexts;
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 f712552..1571eac 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.iapi.AbstractInstanceLockManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
import java.util.HashMap;
import java.util.Map;
@@ -37,12 +37,16 @@ import java.util.concurrent.locks.Lock;
*
* @author Maciej Szefler - m s z e f l e r @ g m a i l . c o m
*/
-public class InstanceLockManager extends AbstractInstanceLockManager {
+public class InstanceLockManager implements ClusterLock<Long> {
private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo>();
+ public void lock(Long key) {
+ // Noting to do here.
+ }
+
public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException, TimeoutException {
if (iid == null) return;
@@ -106,6 +110,20 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
}
+ public boolean tryLock(Long key) {
+ // Noting to do here.
+ return false;
+ }
+
+ public boolean tryLock(Long key, int time, TimeUnit tu) {
+ // Noting to do here.
+ return false;
+ }
+
+ public void putIfAbsent(Long key, Long keyVal) {
+ // Noting to do here.
+ }
+
@Override
public String toString() {
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 8eac0b6..5f2b8f5 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,8 +30,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
-
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -45,11 +43,11 @@ public class HazelcastClusterImpl implements ClusterManager {
private String uuid;
private Member leader;
private IMap<String, String> deployment_lock_map;
- private IMap<String, String> instance_lock_map;
+ private IMap<Long, Long> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
- private ClusterLock _hazelcastDeploymentLock;
- private AbstractInstanceLockManager _hazelcastInstanceLock;
+ private ClusterLock<String> _hazelcastDeploymentLock;
+ private ClusterLock<Long> _hazelcastInstanceLock;
public void init(File configRoot) {
@@ -84,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
_hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
- _hazelcastInstanceLock = (AbstractInstanceLockManager) new HazelcastInstanceLock(instance_lock_map);
+ _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
}
}
@@ -167,11 +165,11 @@ public class HazelcastClusterImpl implements ClusterManager {
if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
}
- public ClusterLock getDeploymentLock(){
+ public ClusterLock<String> getDeploymentLock(){
return _hazelcastDeploymentLock;
}
- public AbstractInstanceLockManager getInstanceLock(){
+ public ClusterLock<Long> getInstanceLock(){
return _hazelcastInstanceLock;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 2f5aa4d..f36a1b4 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
@@ -26,7 +26,7 @@ import org.apache.commons.logging.LogFactory;
import java.util.concurrent.TimeUnit;
-public class HazelcastDeploymentLock implements ClusterLock{
+public class HazelcastDeploymentLock implements ClusterLock<String>{
private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
private IMap<String, String> _lock_map;
@@ -39,23 +39,21 @@ public class HazelcastDeploymentLock implements ClusterLock{
_lock_map.putIfAbsent(key, keyVal);
}
- public boolean lockMap(String key) {
+ public void lock(String key) {
_lock_map.lock(key);
if (__log.isDebugEnabled()) {
__log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
}
- return true;
}
- public boolean unlockMap(String key) {
+ public void unlock(String key) {
_lock_map.unlock(key);
if (__log.isDebugEnabled()) {
__log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
}
- return true;
}
- public boolean tryLockMap(String key) {
+ public boolean tryLock(String key) {
boolean state = _lock_map.tryLock(key);
if (__log.isDebugEnabled()) {
__log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -63,8 +61,13 @@ public class HazelcastDeploymentLock implements ClusterLock{
return state;
}
- public boolean tryLockMap(String key,int time, TimeUnit tu) {
+ public boolean tryLock(String key,int time, TimeUnit tu) {
+ // Noting to do here.
+ return false;
+
+ }
+
+ public void lock(String key,int time, TimeUnit tu) {
// Noting to do here.
- return true;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/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 6988746..aa6c086 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,29 +20,31 @@ package org.apache.ode.clustering.hazelcast;
import com.hazelcast.core.IMap;
import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-public class HazelcastInstanceLock extends AbstractInstanceLockManager implements ClusterLock {
+public class HazelcastInstanceLock implements ClusterLock<Long> {
private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
- private IMap<String, String> _lock_map;
+ private IMap<Long, Long> _lock_map;
- HazelcastInstanceLock(IMap<String, String> lock_map) {
+ HazelcastInstanceLock(IMap<Long, Long> lock_map) {
_lock_map = lock_map;
}
- public void putIfAbsent(String key, String keyVal) {
+ public void putIfAbsent(Long key, Long keyVal) {
_lock_map.putIfAbsent(key, keyVal);
}
- public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
- AbstractInstanceLockManager.TimeoutException {
+ public void lock(Long key) {
+ // Noting to do here.
+ }
+
+ public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,TimeoutException {
if (iid == null) {
if (__log.isDebugEnabled()) {
__log.debug(" Instance Id null at lock[]");
@@ -56,15 +58,15 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
__log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
}
- putIfAbsent(iid.toString(), iid.toString());
+ putIfAbsent(iid, iid);
- if (!tryLockMap(iid.toString(), time, tu)) {
+ if (!_lock_map.tryLock(iid, time, tu)) {
if (__log.isDebugEnabled()) {
__log.debug(thrd + ": lock(iid=" + iid + ", " +
"time=" + time + tu + ")-->TIMEOUT");
}
- throw new AbstractInstanceLockManager.TimeoutException();
+ throw new TimeoutException();
}
}
@@ -79,40 +81,20 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
String thrd = Thread.currentThread().toString();
- unlockMap(iid.toString());
+ _lock_map.unlock(iid);
if (__log.isDebugEnabled()) {
__log.debug(thrd + " unlock(iid=" + iid + ")");
}
}
- public boolean lockMap(String key) {
+ public boolean tryLock(Long 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");
- return true;
- }
return false;
}
- public boolean tryLockMap(String key) {
+ public boolean tryLock(Long key, int time, TimeUnit tu) {
// Noting to do here.
- return true;
- }
-
- public boolean tryLockMap(String key, int time, TimeUnit tu) {
- boolean state = false;
- try {
- state = _lock_map.tryLock(key, time, tu);
- } catch (InterruptedException ex) {
- __log.error("Interruption occured" +ex);
- }
- _lock_map.replace(key, "" + state);
- return state;
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a56b86e..a0d67ce 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,33 +19,18 @@
package org.apache.ode.scheduler.simple;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.Scheduler;
+import javax.transaction.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
/**
* A reliable and relatively simple scheduler that uses a database to persist information about
* scheduled tasks.
@@ -508,9 +493,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
return;
_todo.stop();
- _todo.clearTasks(UpgradeJobsTask.class);
+ _todo.clearTasks(UpgradeJobsTask.class); //check gsoc
_todo.clearTasks(LoadImmediateTask.class);
- _todo.clearTasks(CheckStaleNodes.class);
+ _todo.clearTasks(CheckStaleNodes.class); //check gsoc
_processedSinceLastLoadTask.clear();
_outstandingJobs.clear();
[30/30] ode git commit: Merge from fork branch sudharma/ODECluster
Posted by sa...@apache.org.
Merge from fork branch sudharma/ODECluster
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/26dacc20
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/26dacc20
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/26dacc20
Branch: refs/heads/ODE-563
Commit: 26dacc2013b6b5e6c6e097b27c94fdd8352393c5
Parents: 8fcaf5f 6c92a25
Author: sathwik <sa...@apache.org>
Authored: Fri Nov 6 12:58:21 2015 +0530
Committer: sathwik <sa...@apache.org>
Committed: Fri Nov 6 12:58:21 2015 +0530
----------------------------------------------------------------------
Rakefile | 16 +-
.../src/main/webapp/WEB-INF/conf/hazelcast.xml | 63 +++++
.../webapp/WEB-INF/conf/ode-axis2.properties | 8 +-
.../java/org/apache/ode/axis2/Messages.java | 4 +
.../java/org/apache/ode/axis2/ODEServer.java | 119 +++++---
.../ode/axis2/deploy/DeploymentPoller.java | 135 +++++++---
.../ode/axis2/service/DeploymentWebService.java | 177 +++++++-----
.../org/apache/ode/bpel/clapi/ClusterLock.java | 76 ++++++
.../apache/ode/bpel/clapi/ClusterManager.java | 84 ++++++
.../ode/bpel/clapi/ClusterMemberListener.java | 29 ++
.../ode/bpel/clapi/ClusterProcessStore.java | 31 +++
.../bpel/clapi/ProcessStoreClusterEvent.java | 58 ++++
.../bpel/clapi/ProcessStoreClusterListener.java | 24 ++
.../bpel/clapi/ProcessStoreDeployedEvent.java | 32 +++
.../bpel/clapi/ProcessStoreUndeployedEvent.java | 32 +++
.../ode/il/config/OdeConfigProperties.java | 22 +-
.../apache/ode/bpel/engine/BpelEngineImpl.java | 36 +--
.../apache/ode/bpel/engine/BpelServerImpl.java | 5 +
.../org/apache/ode/bpel/engine/Contexts.java | 3 +
.../ode/bpel/engine/InstanceLockManager.java | 30 ++-
.../ode/store/ClusterProcessStoreImpl.java | 135 ++++++++++
.../org/apache/ode/store/ProcessStoreImpl.java | 81 +++---
.../org/apache/ode/test/BPELTestAbstract.java | 51 ++--
clustering/pom.xml | 30 +++
.../java/org/apache/ode/clustering/Test.java | 4 +
.../hazelcast/HazelcastClusterImpl.java | 268 +++++++++++++++++++
.../hazelcast/HazelcastConstants.java | 31 +++
.../hazelcast/HazelcastDeploymentLock.java | 73 +++++
.../hazelcast/HazelcastInstanceLock.java | 94 +++++++
dependencies.rb | 1 +
.../java/org/apache/ode/jbi/OdeLifeCycle.java | 23 +-
pom.xml | 1 +
.../ode/scheduler/simple/SimpleScheduler.java | 189 +++++++++----
.../scheduler/simple/SimpleSchedulerTest.java | 27 +-
34 files changed, 1660 insertions(+), 332 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/Rakefile
----------------------------------------------------------------------
diff --cc Rakefile
index a8c5f06,7c0fa67..ac9b74e
--- a/Rakefile
+++ b/Rakefile
@@@ -99,9 -97,9 +99,9 @@@ define "ode" d
desc "ODE Axis2 Based Web Application"
define "axis2-war" do
libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao",
- "bpel-epr", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple",
+ "bpel-epr", "bpel-nobj", "bpel-ql", "bpel-runtime", "scheduler-simple",
"bpel-schemas", "bpel-store", "dao-hibernate", "jca-ra", "jca-server",
- "utils", "dao-jpa", "agents"),
+ "utils", "dao-jpa", "agents", "clustering"),
AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils,
COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream, JIBX,
@@@ -233,16 -230,15 +239,16 @@@
desc "ODE Runtime Engine"
define "bpel-runtime" do
- compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-obj", "bpel-schemas",
- "bpel-store", "utils", "agents","clustering"),
- COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J
+
+ compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-nobj", "bpel-schemas",
- "bpel-store", "utils", "agents"),
++ "bpel-store", "utils", "agents","clustering"),
+ COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J,
+ JACKSON, JAVAX.connector
-
- test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", "bpel-epr"),
- BACKPORT, COMMONS.pool, COMMONS.lang, COMMONS.io, DERBY, JAVAX.connector, JAVAX.transaction,
- GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, HSQLDB, JAVAX.ejb,
- OPENJPA, XERCES, XALAN, DOM4J, HIBERNATE, SPRING_TEST, H2::REQUIRES,
+ test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", "bpel-epr", "bpel-obj"),
+# BACKPORT, COMMONS.pool, COMMONS.lang, COMMONS.io, DERBY, JAVAX.connector, JAVAX.transaction,
+ GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, HSQLDB, JAVAX.ejb, JAVAX.transaction,
+ OPENJPA, XERCES, XALAN, DOM4J, HIBERNATE, SPRING_TEST, H2::REQUIRES, JACKSON,
"tranql:tranql-connector-derby-common:jar:1.1"
package :jar
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/dependencies.rb
----------------------------------------------------------------------
diff --cc dependencies.rb
index 0857cf1,33da5e4..f469c02
--- a/dependencies.rb
+++ b/dependencies.rb
@@@ -75,14 -75,10 +75,15 @@@ GERONIMO = struct
:transaction =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
:connector =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
)
+ HAZELCAST ="com.hazelcast:hazelcast:jar:3.4.2"
HIBERNATE = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
"asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
-HSQLDB = "hsqldb:hsqldb:jar:1.8.0.7"
+HSQLDB = "org.hsqldb:hsqldb:jar:2.3.3"
+JACKSON = [ "com.fasterxml.jackson.core:jackson-core:jar:2.4.0",
+ "com.fasterxml.jackson.core:jackson-databind:jar:2.4.0",
+ "com.fasterxml.jackson.core:jackson-annotations:jar:2.4.0",
+ "com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.4.0",
+ "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.4.0"]
JACOB = "org.apache.ode:jacob:jar:2.0a-SNAPSHOT"
JAVAX = struct(
:activation =>"javax.activation:activation:jar:1.1",
[04/30] ode git commit: first phase of implementing using locking
mechanism
Posted by sa...@apache.org.
first phase of implementing using locking mechanism
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/71f3d35d
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/71f3d35d
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/71f3d35d
Branch: refs/heads/ODE-563
Commit: 71f3d35d7ca766ddfeca8e0884495b9dfc9b7f04
Parents: 764bf64
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Jun 12 01:24:27 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Jun 12 01:24:27 2015 +0530
----------------------------------------------------------------------
Rakefile | 2 +-
.../java/org/apache/ode/axis2/ODEServer.java | 9 ++-
.../ode/axis2/deploy/DeploymentPoller.java | 2 +
.../ode/axis2/service/DeploymentWebService.java | 2 +
.../apache/ode/bpel/hzapi/HazelcastCluster.java | 2 +-
.../ode/store/ClusterProcessStoreImpl.java | 80 ++++++++++++++++++++
.../org/apache/ode/store/ProcessStoreImpl.java | 4 +-
.../hazelcast/HazelcastClusterImpl.java | 46 +++++++----
8 files changed, 126 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 1320043..5fa4a07 100644
--- a/Rakefile
+++ b/Rakefile
@@ -270,7 +270,7 @@ define "ode" do
desc "ODE Process Store"
define "bpel-store" do
compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
- "dao-hibernate", "dao-jpa", "utils"),
+ "dao-hibernate", "dao-jpa", "clustering", "utils"),
JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
compile { open_jpa_enhance }
resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 1547042..d1f6c36 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -79,6 +79,7 @@ import org.apache.ode.il.dbutil.Database;
import org.apache.ode.scheduler.simple.JdbcDelegate;
import org.apache.ode.scheduler.simple.SimpleScheduler;
import org.apache.ode.store.ProcessStoreImpl;
+import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
@@ -526,13 +527,15 @@ public class ODEServer {
_store.registerListener(new ProcessStoreListenerImpl());
_store.setDeployDir(
_odeConfig.getDeployDir() != null ?
- new File(_odeConfig.getDeployDir()) :
- new File(_workRoot, "processes"));
+ new File(_odeConfig.getDeployDir()) :
+ new File(_workRoot, "processes"));
_store.setConfigDir(_configRoot);
}
protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
- return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
+ if (isClusteringEnabled)
+ return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, hazelcastClusterImpl);
+ else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
}
protected Scheduler createScheduler() {
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 25d7f20..66890ba 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -140,6 +140,7 @@ public class DeploymentPoller {
// Checking for new deployment directories
if (isDeploymentFromODEFileSystemAllowed() && files != null) {
for (File file : files) {
+ __log.info("Trying to access the lock for " +file.getName());
duLocked = lock(file.getName());
try {
if (duLocked) {
@@ -186,6 +187,7 @@ public class DeploymentPoller {
}
}
} finally {
+ __log.info("Trying to release the lock for " + file.getName());
unlock(file.getName());
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 1c09bb3..bd35167 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -167,6 +167,7 @@ public class DeploymentWebService {
_poller.hold();
File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
+ __log.info("Trying to access the lock for " + dest.getName());
//lock on deployment unit directory name
duLocked = _poller.lock(dest.getName());
@@ -212,6 +213,7 @@ public class DeploymentWebService {
}
sendResponse(factory, messageContext, "deployResponse", response);
} finally {
+ __log.info("Trying to release the lock for " + dest.getName());
_poller.unlock(dest.getName());
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
index 4e03c7d..adca32c 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
@@ -39,7 +39,7 @@ public interface HazelcastCluster {
/**
* Check whether current node is the leader or not.
*/
- void isLeader();
+ void markAsMaster();
/**
* returns Current Nodes in the cluster.
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
new file mode 100644
index 0000000..c6f81ba
--- /dev/null
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -0,0 +1,80 @@
+/*
+ * 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.store;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.il.config.OdeConfigProperties;
+
+import javax.sql.DataSource;
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collection;
+
+public class ClusterProcessStoreImpl extends ProcessStoreImpl{
+ private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
+
+ private HazelcastClusterImpl _hazelcastClusterImpl;
+
+ public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
+ super();
+ _hazelcastClusterImpl = hazelcastClusterImpl;
+ }
+
+ public Collection<QName> deploy(final File deploymentUnitDirectory) {
+ Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
+ publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
+ return deployed;
+ }
+
+ public void publishProcessStoreDeployedEvent(String duName){
+ String returnedDuName = _hazelcastClusterImpl.publishProcessStoreEvent("Deployed " +duName);
+ publishService(returnedDuName);
+ }
+
+ public void publishService(final String duName) {
+ final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+ try {
+ exec(new Callable<Object>() {
+ public Object call(ConfStoreConnection conn) {
+ DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
+ if (dudao != null) {
+ loaded.addAll(load(dudao));
+ }
+ return null;
+ }
+ });
+ } catch (Exception ex) {
+ __log.error("Error loading DU from store: " + duName, ex);
+ }
+
+ for (ProcessConfImpl p : loaded) {
+ try {
+ fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
+ } catch (Exception except) {
+ __log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index b689bd1..1a99ef6 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -88,6 +88,8 @@ public class ProcessStoreImpl implements ProcessStore {
protected File _configDir;
+
+
/**
* Executor used to process DB transactions. Allows us to isolate the TX context, and to ensure that only one TX gets executed a
* time. We don't really care to parallelize these operations because: i) HSQL does not isolate transactions and we don't want
@@ -592,7 +594,7 @@ public class ProcessStoreImpl implements ProcessStore {
psl.onProcessStoreEvent(pse);
}
- private void fireStateChange(QName processId, ProcessState state, String duname) {
+ protected void fireStateChange(QName processId, ProcessState state, String duname) {
switch (state) {
case ACTIVE:
fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.ACTVIATED, processId, duname));
http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/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 c387b74..0e53de4 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
@@ -36,10 +36,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
- private String message = "";
+ private String _duName = "";
private Member leader;
+ private Member deployInitiator;
private IMap<String, String> lock_map;
+ private ITopic<String> clusterMessageTopic;
public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
_hazelcastInstance = hazelcastInstance;
@@ -51,7 +53,7 @@ public class HazelcastClusterImpl implements HazelcastCluster{
_hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
// Register for listening to message listener
- ITopic<String> clusterMessageTopic = _hazelcastInstance.getTopic("clusterMsg");
+ clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
clusterMessageTopic.addMessageListener(new ClusterMessageListener());
Member localMember = _hazelcastInstance.getCluster().getLocalMember();
@@ -72,18 +74,18 @@ public class HazelcastClusterImpl implements HazelcastCluster{
public boolean lock(String key) {
lock_map.lock(key);
boolean state = lock_map.isLocked(key);
- if (__log.isDebugEnabled()) {
- __log.debug ("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
- }
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
return state;
}
public boolean unlock(String key) {
lock_map.unlock(key);
- boolean state = lock_map.isLocked(key);
- if (__log.isDebugEnabled()) {
- __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
}
+ boolean state = lock_map.isLocked(key);
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
return state;
}
@@ -96,12 +98,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
- isLeader();
+ markAsMaster();
// Allow Leader to update distributed map.
if (isMaster) {
String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
- _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
- _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
+ // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
+ // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
}
}
@@ -114,12 +116,20 @@ public class HazelcastClusterImpl implements HazelcastCluster{
class ClusterMessageListener implements MessageListener<String> {
@Override
public void onMessage(Message<String> msg) {
- message = msg.getMessageObject();
+ String message = msg.getMessageObject();
+ String arr[] = message.split(" ", 2);
+ String duName = arr[1];
+ if(message.contains("Deployed ")) {
+ if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+ setDUName(duName);
+ __log.info("Recerive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +"for" +duName);
+ }
+ }
}
}
- public void isLeader() {
+ public void markAsMaster() {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember()) {
isMaster = true;
@@ -139,8 +149,14 @@ public class HazelcastClusterImpl implements HazelcastCluster{
return isMaster;
}
- public String getMessage() {
- return message;
+ public void setDUName(String duName) {
+ _duName = duName;
+ }
+
+ public String publishProcessStoreEvent(String msg) {
+ deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+ clusterMessageTopic.publish(msg);
+ return _duName;
}
}
[09/30] ode git commit: completed version-1 of deploying processes in
the cluster
Posted by sa...@apache.org.
completed version-1 of deploying processes in the cluster
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/9cb75820
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/9cb75820
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/9cb75820
Branch: refs/heads/ODE-563
Commit: 9cb75820df9f8a87ebb163e4c1c45d7affd6291f
Parents: 521d640
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jun 17 12:32:40 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jun 17 12:32:40 2015 +0530
----------------------------------------------------------------------
.../webapp/WEB-INF/conf/ode-axis2.properties | 8 +++-
.../java/org/apache/ode/axis2/Messages.java | 4 ++
.../java/org/apache/ode/axis2/ODEServer.java | 27 ++++++------
.../ode/axis2/deploy/DeploymentPoller.java | 14 +++----
.../ode/axis2/service/DeploymentWebService.java | 41 +++++++++++++------
.../apache/ode/bpel/clapi/ClusterManager.java | 13 +-----
.../bpel/clapi/ProcessStoreUndeployedEvent.java | 40 ++++++++++++++++++
.../ode/store/ClusterProcessStoreImpl.java | 43 ++++++++++++++++----
.../org/apache/ode/store/ProcessStoreImpl.java | 22 ++++++++++
.../hazelcast/HazelcastClusterImpl.java | 37 +++++++++++------
10 files changed, 183 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
----------------------------------------------------------------------
diff --git a/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties b/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
index 253037c..03ac79c 100644
--- a/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
+++ b/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
@@ -94,4 +94,10 @@ ode-axis2.db.emb.name=derby-jpadb
## Event listeners
#ode-axis2.event.listeners=
-#ode-axis2.event.listeners=org.apache.ode.bpel.common.evt.DebugBpelEventListener
\ No newline at end of file
+#ode-axis2.event.listeners=org.apache.ode.bpel.common.evt.DebugBpelEventListener
+
+## Enable clustering
+#ode-axis2.clustering.enabled=true
+
+## Clustering Implementation class.
+#ode-axis2.clustering.impl.class = org.apache.ode.clustering.hazelcast.HazelcastClusterImpl
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/Messages.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/Messages.java b/axis2/src/main/java/org/apache/ode/axis2/Messages.java
index a95c30d..0581c72 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/Messages.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/Messages.java
@@ -58,6 +58,10 @@ public class Messages extends MessageBundle {
return format("Starting ODE ServiceEngine.");
}
+ public String msgOdeClusteringNotInitialized() {
+ return format("Clustering has not been initialized.");
+ }
+
public String msgOdeStarted() {
return format("ODE Service Engine has been started.");
}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index f0ad470..51f05dd 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -57,6 +57,7 @@ import org.apache.ode.axis2.deploy.DeploymentPoller;
import org.apache.ode.axis2.service.DeploymentWebService;
import org.apache.ode.axis2.service.ManagementService;
import org.apache.ode.axis2.util.ClusterUrlTransformer;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.connector.BpelServerConnector;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -82,8 +83,6 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
-import org.apache.ode.bpel.clapi.ClusterManager;
-
/**
* Server class called by our Axis hooks to handle all ODE lifecycle management.
*
@@ -122,6 +121,8 @@ public class ODEServer {
protected Database _db;
+ protected ClusterManager _clusterManager;
+
private DeploymentPoller _poller;
private BpelServerConnector _connector;
@@ -135,10 +136,6 @@ public class ODEServer {
public Runnable txMgrCreatedCallback;
- private ClusterManager _clusterManager;
-
- private String clusteringState = "";
-
private boolean isClusteringEnabled;
public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
@@ -193,9 +190,10 @@ public class ODEServer {
txMgrCreatedCallback.run();
}
- clusteringState = _odeConfig.getClusteringState();
- if (isClusteringEnabled()) initClustering();
- else __log.info("Clustering has not been initialized");
+ String clusteringState = _odeConfig.getClusteringState();
+ if (clusteringState != null && isClusteringEnabled(clusteringState)) {
+ initClustering();
+ } else __log.info(__msgs.msgOdeClusteringNotInitialized());
__log.debug("Creating data source.");
initDataSource();
@@ -384,6 +382,11 @@ public class ODEServer {
_txMgr = null;
}
+ if (_clusterManager != null) {
+ __log.debug("shutting down cluster manager.");
+ _clusterManager = null;
+ }
+
if (_connector != null) {
try {
__log.debug("shutdown BpelConnector");
@@ -468,7 +471,7 @@ public class ODEServer {
}
}
- public boolean isClusteringEnabled() {
+ private boolean isClusteringEnabled(String clusteringState) {
boolean state;
if (clusteringState.equals("true")) state = true;
else state = false;
@@ -476,7 +479,7 @@ public class ODEServer {
return state;
}
- public void setClustering (boolean state) {
+ private void setClustering (boolean state) {
isClusteringEnabled = state;
}
@@ -493,7 +496,7 @@ public class ODEServer {
Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
_clusterManager = (ClusterManager) clusterImplClass.newInstance();
} catch (Exception ex) {
- __log.error(ex);
+ __log.error("Error while loading class : " +clusterImplName ,ex);
}
_clusterManager.init(_configRoot);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index ccb029b..9964af0 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -41,6 +41,7 @@ package org.apache.ode.axis2.deploy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.axis2.ODEServer;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig;
import org.apache.ode.utils.WatchDog;
@@ -54,8 +55,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.ode.bpel.clapi.ClusterManager;
-
/**
* Polls a directory for the deployment of a new deployment unit.
*/
@@ -140,10 +139,9 @@ public class DeploymentPoller {
// Checking for new deployment directories
if (isDeploymentFromODEFileSystemAllowed() && files != null) {
for (File file : files) {
- String test = file.getName();
- __log.info("Trying to access the lock for " + test);
- __log.info("Test null key value " +test);
- duLocked = pollerTryLock(test);
+ String duName = file.getName();
+ __log.info("Trying to acquire the lock for " + duName);
+ duLocked = pollerTryLock(duName);
if (duLocked) {
try {
@@ -343,7 +341,9 @@ public class DeploymentPoller {
}
}
- //Implementation of IMap key Lock
+ /**
+ * Use to acquire the lock by poller
+ */
private boolean pollerTryLock(String key) {
if(clusterEnabled) {
return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 1951cf5..89c5a63 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -172,7 +172,7 @@ public class DeploymentWebService {
_poller.hold();
File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
- __log.info("Trying to access the lock for " + dest.getName());
+ __log.info("Trying to acquire the lock for deploying: " + dest.getName());
//lock on deployment unit directory name
duLocked = lock(dest.getName());
@@ -218,7 +218,7 @@ public class DeploymentWebService {
}
sendResponse(factory, messageContext, "deployResponse", response);
} finally {
- __log.info("Trying to release the lock for " + dest.getName());
+ __log.info("Trying to release the lock for deploying: " + dest.getName());
unlock(dest.getName());
}
}
@@ -243,20 +243,30 @@ public class DeploymentWebService {
// Put the poller on hold to avoid undesired side effects
_poller.hold();
- Collection<QName> undeployed = _store.undeploy(deploymentDir);
+ __log.info("Trying to acquire the lock for undeploying: " + deploymentDir.getName());
+ duLocked = lock(deploymentDir.getName());
- File deployedMarker = new File(deploymentDir + ".deployed");
- boolean isDeleted = deployedMarker.delete();
+ if (duLocked) {
+ try {
+ Collection<QName> undeployed = _store.undeploy(deploymentDir);
- if (!isDeleted)
- __log.error("Error while deleting file " + deployedMarker.getName());
+ File deployedMarker = new File(deploymentDir + ".deployed");
+ boolean isDeleted = deployedMarker.delete();
- FileUtils.deepDelete(deploymentDir);
+ if (!isDeleted)
+ __log.error("Error while deleting file " + deployedMarker.getName());
- OMElement response = factory.createOMElement("response", null);
- response.setText("" + (undeployed.size() > 0));
- sendResponse(factory, messageContext, "undeployResponse", response);
- _poller.markAsUndeployed(deploymentDir);
+ FileUtils.deepDelete(deploymentDir);
+
+ OMElement response = factory.createOMElement("response", null);
+ response.setText("" + (undeployed.size() > 0));
+ sendResponse(factory, messageContext, "undeployResponse", response);
+ _poller.markAsUndeployed(deploymentDir);
+ } finally {
+ __log.info("Trying to release the lock for undeploying: " + deploymentDir.getName());
+ unlock(deploymentDir.getName());
+ }
+ }
} finally {
_poller.release();
}
@@ -371,7 +381,9 @@ public class DeploymentWebService {
out.close();
}
- //Implementation of IMap key Lock
+ /**
+ * Acquire the lock when deploying using web service
+ */
private boolean lock(String key) {
if(clusterEnabled) {
return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
@@ -379,6 +391,9 @@ public class DeploymentWebService {
else return true;
}
+ /**
+ * Release the lock after completing deploy process
+ */
private boolean unlock(String key) {
if(clusterEnabled) {
return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/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 a1fe194..df4342e 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
@@ -30,12 +30,7 @@ public interface ClusterManager {
void init(File file);
/**
- * Check whether current node is the leader or not.
- */
- void markAsMaster();
-
- /**
- * Return isMaster
+ * Return whether the local member is Master or not
* @return
*/
boolean getIsMaster();
@@ -72,10 +67,4 @@ public interface ClusterManager {
* @param event
*/
void publishProcessStoreEvent(Object event);
-
- /**
- * Handle event according to received event
- * @param message
- */
- void handleEvent(Object message);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
new file mode 100644
index 0000000..347312f
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
@@ -0,0 +1,40 @@
+/*
+ * 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.clapi;
+
+import java.io.Serializable;
+
+public class ProcessStoreUndeployedEvent implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public final String deploymentUnit;
+
+ public final String info;
+
+ public ProcessStoreUndeployedEvent(String deploymentUnit) {
+ this.info = "Undeployment Event";
+ this.deploymentUnit = deploymentUnit;
+ }
+
+ @Override
+ public String toString() {
+ return "{ProcessStoreUndeployedEvent#" + deploymentUnit +"}";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 6f35110..551fd72 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
+import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
import org.apache.ode.bpel.iapi.ProcessState;
import org.apache.ode.bpel.iapi.EndpointReferenceContext;
import org.apache.ode.il.config.OdeConfigProperties;
@@ -36,9 +37,10 @@ import java.util.regex.Pattern;
public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
- private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+ private final Map<QName, ProcessConfImpl> loaded = new HashMap<QName, ProcessConfImpl>();
private ClusterManager _clusterManager;
private ProcessStoreDeployedEvent deployedEvent;
+ private ProcessStoreUndeployedEvent undeployedEvent;
public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
super(eprContext,ds,persistenceType,props,createDatamodel);
@@ -49,8 +51,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
public Collection<QName> deploy(final File deploymentUnitDirectory) {
Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
Map<QName, ProcessConfImpl> _processes = getProcessesMap();
- for (QName key :_processes.keySet()) {
- if(!loaded.contains(_processes.get(key))) loaded.add(_processes.get(key));
+ for (QName key : deployed) {
+ loaded.put(key,_processes.get(key));
}
publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
return deployed;
@@ -67,8 +69,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
- for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
- ProcessConfImpl pconf = iterator.next();
+ for (QName key : loaded.keySet()) {
+ ProcessConfImpl pconf = loaded.get(key);
Matcher matcher = duNamePattern.matcher(pconf.getPackage());
if (matcher.matches() && pconf.getState().equals(state)) {
pconf.setState(ProcessState.RETIRED);
@@ -82,9 +84,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
if (dudao != null) {
List<ProcessConfImpl> load = load(dudao);
- loaded.addAll(load);
+ for(ProcessConfImpl p : load) {
+ loaded.put(p.getProcessId(),p);
+ }
confs.addAll(load);
-
}
return null;
}
@@ -97,10 +100,9 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
try {
fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
} catch (Exception except) {
- __log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+ __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
}
}
- //loadAll();
}
private Pattern getPreviousPackageVersionPattern(String duName) {
@@ -116,4 +118,27 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
return duNamePattern;
}
+
+ public Collection<QName> undeploy(final File dir) {
+ Collection<QName> undeployed = super.undeploy(dir);
+ loaded.keySet().removeAll(undeployed);
+ publishProcessStoreUndeployedEvent(dir.getName());
+ return undeployed;
+ }
+
+ private void publishProcessStoreUndeployedEvent(String duName){
+ undeployedEvent = new ProcessStoreUndeployedEvent(duName);
+ _clusterManager.publishProcessStoreEvent(undeployedEvent);
+ }
+
+ /**
+ * Use to unregister processes when deployment unit is undeployed
+ * @param duName
+ * @return
+ */
+ public Collection<QName> undeployProcesses(final String duName) {
+ Collection<QName> undeployed = super.undeployProcesses(duName);
+ loaded.keySet().removeAll(undeployed);
+ return undeployed;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index d6f76f3..77afe5a 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -903,4 +903,26 @@ public class ProcessStoreImpl implements ProcessStore {
protected Map<QName, ProcessConfImpl> getProcessesMap() {
return _processes;
}
+
+ protected Collection<QName> undeployProcesses(final String duName) {
+ Collection<QName> undeployed = Collections.emptyList();
+ DeploymentUnitDir du;
+ _rw.writeLock().lock();
+ try {
+ du = _deploymentUnits.remove(duName);
+ if (du != null) {
+ undeployed = toPids(du.getProcessNames(), du.getVersion());
+ }
+
+ for (QName pn : undeployed) {
+ fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.UNDEPLOYED, pn, du.getName()));
+ __log.info(__msgs.msgProcessUndeployed(pn));
+ }
+
+ _processes.keySet().removeAll(undeployed);
+ } finally {
+ _rw.writeLock().unlock();
+ }
+ return undeployed;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/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 2e6868f..beba779 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
@@ -29,9 +29,10 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
+import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.store.ClusterProcessStoreImpl;
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -42,14 +43,16 @@ public class HazelcastClusterImpl implements ClusterManager {
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
private Member leader;
- private Member deployInitiator;
+ private Member eventInitiator;
private IMap<String, String> lock_map;
private ITopic<Object> clusterMessageTopic;
private ClusterProcessStoreImpl _clusterProcessStore;
public void init(File configRoot) {
+
/*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
Else it will load the hazelcast.xml file using FileSystemXmlConfig()*/
+
String hzConfig = System.getProperty("hazelcast.config");
if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
else {
@@ -79,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
}
public boolean lock(String key) {
- lock_map.putIfAbsent(key,key);
+ lock_map.putIfAbsent(key, key);
lock_map.lock(key);
boolean state = lock_map.isLocked(key);
__log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -98,9 +101,9 @@ public class HazelcastClusterImpl implements ClusterManager {
}
public boolean tryLock(String key) {
- lock_map.putIfAbsent(key,key);
+ lock_map.putIfAbsent(key, key);
boolean state = lock_map.tryLock(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state );
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
return state;
}
@@ -121,9 +124,9 @@ public class HazelcastClusterImpl implements ClusterManager {
}
}
- public void publishProcessStoreEvent(Object deployedEvent) {
- deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
- clusterMessageTopic.publish(deployedEvent);
+ public void publishProcessStoreEvent(Object event) {
+ eventInitiator = _hazelcastInstance.getCluster().getLocalMember();
+ clusterMessageTopic.publish(event);
}
@@ -134,20 +137,30 @@ public class HazelcastClusterImpl implements ClusterManager {
}
}
- public void handleEvent(Object message) {
+ private void handleEvent(Object message) {
if (message instanceof ProcessStoreDeployedEvent) {
ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
- if (_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+ if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
String duName = event.deploymentUnit;
__log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
_clusterProcessStore.publishService(duName);
- } else deployInitiator = null;
+ } else eventInitiator = null;
+ }
+
+ else if (message instanceof ProcessStoreUndeployedEvent) {
+ ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
+
+ if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
+ String duName = event.deploymentUnit;
+ __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+ _clusterProcessStore.undeployProcesses(duName);
+ } else eventInitiator = null;
}
}
- public void markAsMaster() {
+ private void markAsMaster() {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember()) {
isMaster = true;
[28/30] ode git commit: Tested with two nodes cluster successfully
Posted by sa...@apache.org.
Tested with two nodes cluster successfully
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/8fe5546d
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/8fe5546d
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/8fe5546d
Branch: refs/heads/ODE-563
Commit: 8fe5546d6528b1b2e970971af6c077077b871561
Parents: 348ae9d
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Aug 5 22:39:34 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Aug 5 22:39:34 2015 +0530
----------------------------------------------------------------------
.../src/main/webapp/WEB-INF/conf/hazelcast.xml | 63 ++++++++++++++++++++
.../java/org/apache/ode/axis2/ODEServer.java | 2 +
.../hazelcast/HazelcastClusterImpl.java | 18 +++---
.../hazelcast/HazelcastDeploymentLock.java | 2 +-
.../hazelcast/HazelcastInstanceLock.java | 3 +-
.../ode/scheduler/simple/SimpleScheduler.java | 43 ++++++-------
.../scheduler/simple/SimpleSchedulerTest.java | 27 ++++-----
7 files changed, 113 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
----------------------------------------------------------------------
diff --git a/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml b/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
new file mode 100644
index 0000000..bf1e99e
--- /dev/null
+++ b/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (c) 2008-2013, Hazelcast, Inc. All Rights Reserved.
+ ~
+ ~ Licensed 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.
+ -->
+
+<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.4.xsd"
+ xmlns="http://www.hazelcast.com/schema/config"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <network>
+ <port auto-increment="true" port-count="100">5701</port>
+ <outbound-ports>
+ <ports>0</ports>
+ </outbound-ports>
+ <reuse-address>false</reuse-address>
+ <join>
+ <multicast enabled="false">
+ <multicast-group>224.2.2.3</multicast-group>
+ <multicast-port>54327</multicast-port>
+ </multicast>
+ <tcp-ip enabled="true">
+ <member>127.0.0.1:5701</member>
+ <member>127.0.0.1:5702</member>
+ </tcp-ip>
+ <aws enabled="false">
+ <access-key>my-access-key</access-key>
+ <secret-key>my-secret-key</secret-key>
+ <region>us-west-1</region>
+ <host-header>ec2.amazonaws.com</host-header>
+ <security-group-name>hazelcast-sg</security-group-name>
+ <tag-key>type</tag-key>
+ <tag-value>hz-nodes</tag-value>
+ <multicast enabled="false">
+ <multicast-group>224.2.2.3</multicast-group>
+ <multicast-port>54327</multicast-port>
+ </multicast>
+ </aws>
+ </join>
+ <interfaces enabled="false">
+ <interface>10.10.1.*</interface>
+ </interfaces>
+ <ssl enabled="false" />
+ <socket-interceptor enabled="false" />
+ </network>
+ <partition-group enabled="false"/>
+ <map name="ODE_DEPLOYMENT_LOCK"></map>
+ <map name="ODE_PROCESS_INSTANCE_LOCK"></map>
+ <topic name="ODE_DEPLOYMENT_TOPIC"></topic>
+</hazelcast>
+
+
+
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 4860150..0a13c4a 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -201,6 +201,7 @@ public class ODEServer {
_clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
_clusterManager.setClusterProcessStore((ClusterProcessStore) _store);
_clusterManager.init(_configRoot);
+ ((SimpleScheduler)_scheduler).setNodeId(_clusterManager.getNodeID());
}
try {
@@ -483,6 +484,7 @@ public class ODEServer {
}
}
+
/**
* Initialize the DAO.
*
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/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 9d2a554..4c5cad5 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
@@ -57,8 +57,8 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
private IMap<Long, Long> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterDeploymentMessageTopic;
private ClusterProcessStore _clusterProcessStore;
- private ClusterLock<String> _hazelcastDeploymentLock;
- private ClusterLock<Long> _hazelcastInstanceLock;
+ private HazelcastDeploymentLock hazelcastDeploymentLock;
+ private HazelcastInstanceLock hazelcastInstanceLock;
private ClusterDeploymentMessageListener clusterDeploymentMessageListener;
private ClusterMemberShipListener clusterMemberShipListener;
private List<ClusterMemberListener> clusterMemberListenerList = null;
@@ -67,8 +67,11 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
clusterMemberShipListener = new ClusterMemberShipListener();
clusterDeploymentMessageListener = new ClusterDeploymentMessageListener();
clusterDeploymentMessageListener.registerClusterProcessStoreListener((ProcessStoreClusterListener)this);
+ hazelcastDeploymentLock = new HazelcastDeploymentLock();
+ hazelcastInstanceLock = new HazelcastInstanceLock();
}
+
public void init(File configRoot) {
/*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
@@ -101,9 +104,8 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
clusterDeploymentMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
- _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
- _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
-
+ hazelcastDeploymentLock.setLockMap(deployment_lock_map);
+ hazelcastInstanceLock.setLockMap(instance_lock_map);
markAsMaster();
}
}
@@ -221,7 +223,7 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
listener.memberElectedAsMaster(nodeID);
}
}
- __log.info(isMaster);
+ __log.info("Master node: " +isMaster);
}
public boolean isMaster() {
@@ -249,11 +251,11 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
}
public ClusterLock<String> getDeploymentLock(){
- return _hazelcastDeploymentLock;
+ return (ClusterLock)hazelcastDeploymentLock;
}
public ClusterLock<Long> getInstanceLock(){
- return _hazelcastInstanceLock;
+ return (ClusterLock)hazelcastInstanceLock;
}
public List<String> getActiveNodes() {
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/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 f36a1b4..b753305 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
@@ -31,7 +31,7 @@ public class HazelcastDeploymentLock implements ClusterLock<String>{
private IMap<String, String> _lock_map;
- HazelcastDeploymentLock(IMap<String, String> lock_map) {
+ public void setLockMap(IMap<String, String> lock_map) {
_lock_map = lock_map;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/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 1729bac..8ac11f8 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
@@ -31,8 +31,7 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
private IMap<Long, Long> _lock_map;
-
- HazelcastInstanceLock(IMap<Long, Long> lock_map) {
+ public void setLockMap(IMap<Long, Long> lock_map) {
_lock_map = lock_map;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index 1da5571..517045d 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -479,10 +479,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
// schedule immediate job loading for now!
_todo.enqueue(new LoadImmediateTask(now));
- if(!_isClusterEnabled) enqueueTasksReadnodeIds();
+ if(!_isClusterEnabled) enqueueTasksReadnodeIds(now);
else {
- if (_clusterManager.isMaster()) enqueueTasksReadnodeIds();
+ if (_clusterManager.isMaster()) enqueueTasksReadnodeIds(now);
}
_todo.start();
@@ -521,10 +521,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
// Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
public void memberElectedAsMaster(String masterId) {
- enqueueTasksReadnodeIds();
+ long now = System.currentTimeMillis();
+ enqueueTasksReadnodeIds(now);
}
- private void enqueueTasksReadnodeIds() {
+ private void enqueueTasksReadnodeIds(long now) {
try {
execTransaction(new Callable<Void>() {
@@ -544,8 +545,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
else _knownNodes.add(_nodeId);
- long now = System.currentTimeMillis();
-
// schedule check for stale nodes, make it random so that the nodes don't overlap.
_todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
@@ -815,8 +814,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
final ArrayList<String> activeNodes;
// for cluster mode
- if (_isClusterEnabled && _clusterManager.isMaster()) {
- activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+ if (_isClusterEnabled) {
+ if (_clusterManager.isMaster()) {
+ activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+ } else activeNodes = null;
}
//for standalone ODE deployments
else {
@@ -984,24 +985,26 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
// for cluster mode
- if (_isClusterEnabled && _clusterManager.isMaster()) {
- ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
-
- //find stale nodes
- knownNodes.removeAll(memberList);
- if (knownNodes.size() != 0) {
- for (String nodeId : knownNodes) {
- _staleNodes.add(nodeId);
+ if (_isClusterEnabled) {
+ if (_clusterManager.isMaster()) {
+ ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
+
+ //find stale nodes
+ knownNodes.removeAll(memberList);
+ if (knownNodes.size() != 0) {
+ for (String nodeId : knownNodes) {
+ _staleNodes.add(nodeId);
+ }
+ }
+ for (String nodeId : _staleNodes) {
+ recoverStaleNode(nodeId);
}
- }
- for (String nodeId : _staleNodes) {
- recoverStaleNode(nodeId);
}
}
// for standalone ode node
else {
for (String nodeId : knownNodes) {
- if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
+ if (!_nodeId.equals(nodeId)) recoverStaleNode(nodeId);
}
}
/*for (String nodeId : _knownNodes) {
http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
index 4c89ae9..10e86fc 100644
--- a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
+++ b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
@@ -19,27 +19,26 @@
package org.apache.ode.scheduler.simple;
-import java.util.*;
-
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-
import junit.framework.Assert;
-import junit.framework.TestCase;
-
import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.bpel.iapi.Scheduler.JobInfo;
import org.apache.ode.bpel.iapi.Scheduler.JobProcessor;
import org.apache.ode.bpel.iapi.Scheduler.JobProcessorException;
-import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Properties;
+
public class SimpleSchedulerTest extends Assert implements JobProcessor {
DelegateSupport _ds;
@@ -210,10 +209,10 @@ public class SimpleSchedulerTest extends Assert implements JobProcessor {
_scheduler.setImmediateInterval(1000);
_scheduler.setStaleInterval(1000);
_scheduler.start();
- for (int i = 0; i < 40; ++i) {
- _scheduler.updateHeartBeat("n1");
+ /*for (int i = 0; i < 40; ++i) {
+ _scheduler.updateHeartBeat("n1");
Thread.sleep(100);
- }
+ }*/
_scheduler.stop();
Thread.sleep(1000);
[26/30] ode git commit: Cluster Enabled Simple Scheduler-3
Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-3
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/43a8df89
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/43a8df89
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/43a8df89
Branch: refs/heads/ODE-563
Commit: 43a8df89b9b05c5831cc5fd4d385b018094f7429
Parents: 3f5ef53
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 23 15:52:25 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 23 15:52:25 2015 +0530
----------------------------------------------------------------------
Rakefile | 2 +-
.../java/org/apache/ode/axis2/ODEServer.java | 15 ++--
.../apache/ode/bpel/clapi/ClusterManager.java | 4 +-
.../ode/bpel/clapi/ClusterMemberListener.java | 2 +-
.../org/apache/ode/test/BPELTestAbstract.java | 2 +-
.../hazelcast/HazelcastClusterImpl.java | 17 ++--
.../java/org/apache/ode/jbi/OdeLifeCycle.java | 2 +-
.../ode/scheduler/simple/SimpleScheduler.java | 88 +++++++++++---------
8 files changed, 71 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 5475227..7c0fa67 100644
--- a/Rakefile
+++ b/Rakefile
@@ -208,7 +208,7 @@ define "ode" do
desc "ODE Clustering"
define "clustering" do
- compile.with projects("bpel-api","bpel-store","scheduler-simple"),HAZELCAST, COMMONS.logging
+ compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
package :jar
end
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 222fedd..b3f5d2f 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -31,6 +31,7 @@ import org.apache.ode.axis2.service.DeploymentWebService;
import org.apache.ode.axis2.service.ManagementService;
import org.apache.ode.axis2.util.ClusterUrlTransformer;
import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterMemberListener;
import org.apache.ode.bpel.connector.BpelServerConnector;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -197,7 +198,9 @@ public class ODEServer {
_store.loadAll();
if (_clusterManager != null) {
_clusterManager.registerClusterProcessStoreMessageListener();
- _clusterManager.registerClusterMemberListener(_scheduler);
+ if (_scheduler instanceof SimpleScheduler) {
+ _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
+ }
}
try {
@@ -527,10 +530,12 @@ public class ODEServer {
}
protected Scheduler createScheduler() {
- String nodeId;
- if (isClusteringEnabled) nodeId = _clusterManager.getUuid();
- else nodeId = new GUID().toString();
- SimpleScheduler scheduler = new SimpleScheduler(nodeId, new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+ SimpleScheduler scheduler;
+ if (isClusteringEnabled) {
+ scheduler = new SimpleScheduler(_clusterManager.getUuid(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+ scheduler.setClusterManager(_clusterManager);
+ } else
+ scheduler = new SimpleScheduler(new GUID().toString(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());
scheduler.setExecutorService(_executorService);
scheduler.setTransactionManager(_txMgr);
return scheduler;
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/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 a00959a..07d3d8d 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
@@ -59,9 +59,9 @@ public interface ClusterManager {
/**
* Register Scheduler as ClusterMemberListener
- * @param scheduler
+ * @param listener
*/
- void registerClusterMemberListener(Object scheduler);
+ void registerClusterMemberListener(ClusterMemberListener listener);
/**
* Return deployment lock for cluster
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
index 4225f7d..541ab9c 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
@@ -24,6 +24,6 @@ public interface ClusterMemberListener {
void memberRemoved(String nodeId);
- void memberElectedAsMaster();
+ void memberElectedAsMaster(String masterId);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
----------------------------------------------------------------------
diff --git a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
index cdda50e..00bdf7d 100644
--- a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
+++ b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
@@ -128,7 +128,7 @@ public abstract class BPELTestAbstract {
{
JdbcDelegate del = new JdbcDelegate(_dataSource);
- scheduler = new SimpleScheduler("node", del, props,false);
+ scheduler = new SimpleScheduler("node", del, props);
scheduler.setTransactionManager(_txManager);
_cf = new BpelDAOConnectionFactoryImpl(scheduler);
_server.setDaoConnectionFactory(_cf);
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/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 971df3e..f68068a 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,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.scheduler.simple.SimpleScheduler;
/**
* This class implements necessary methods to build the cluster using hazelcast
@@ -47,7 +46,7 @@ public class HazelcastClusterImpl implements ClusterManager {
private IMap<Long, Long> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
- private SimpleScheduler _scheduler;
+ private ClusterMemberListener _listener;
private ClusterLock<String> _hazelcastDeploymentLock;
private ClusterLock<Long> _hazelcastInstanceLock;
@@ -78,6 +77,8 @@ 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);
@@ -92,7 +93,7 @@ public class HazelcastClusterImpl implements ClusterManager {
public void memberAdded(MembershipEvent membershipEvent) {
String nodeId = membershipEvent.getMember().getUuid();
__log.info("Member Added " +nodeId);
- _scheduler.memberAdded(nodeId);
+ if(isMaster && _listener != null) _listener.memberAdded(nodeId);
}
@Override
@@ -100,7 +101,7 @@ public class HazelcastClusterImpl implements ClusterManager {
String nodeId = membershipEvent.getMember().getUuid();
__log.info("Member Removed " + nodeId);
markAsMaster();
- _scheduler.memberRemoved(nodeId);
+ if(isMaster && _listener != null) _listener.memberRemoved(nodeId);
}
@Override
@@ -150,7 +151,7 @@ public class HazelcastClusterImpl implements ClusterManager {
leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
if (leader.localMember() && isMaster == false) {
isMaster = true;
- _scheduler.memberElectedAsMaster();
+ if(_listener != null) _listener.memberElectedAsMaster(uuid);
}
__log.info(isMaster);
}
@@ -171,10 +172,8 @@ public class HazelcastClusterImpl implements ClusterManager {
clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
- public void registerClusterMemberListener(Object scheduler) {
- _scheduler = (SimpleScheduler) scheduler;
- markAsMaster();
- _scheduler.setClusterManager(this);
+ public void registerClusterMemberListener(ClusterMemberListener listener) {
+ _listener = listener;
}
public void shutdown() {
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
----------------------------------------------------------------------
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
index 0c1b296..c885d13 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
@@ -242,7 +242,7 @@ public class OdeLifeCycle implements ComponentLifeCycle {
_ode._executorService = Executors.newCachedThreadPool();
else
_ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
- _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties(),false);
+ _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties());
_ode._scheduler.setJobProcessor(_ode._server);
_ode._scheduler.setExecutorService(_ode._executorService);
_ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());
http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a0dbf5a..df33ae0 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -103,19 +103,14 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
private boolean _isClusterEnabled;
- private String _masterId;
-
private ClusterManager _clusterManager;
- /** All the nodes which are taken from the database*/
- private CopyOnWriteArraySet<String> _dbNodes = new CopyOnWriteArraySet<String>();
+ /** All the nodes we know about */
+ private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
/** All the stale nodes */
private CopyOnWriteArraySet<String> _staleNodes = new CopyOnWriteArraySet<String>();
- /** All the nodes when members are added to the cluster*/
- private CopyOnWriteArraySet<String> _clusterNodes = new CopyOnWriteArraySet<String>();
-
/** When we last heard from our nodes. */
//private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
@@ -146,6 +141,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
private DateFormat debugDateFormatter = new SimpleDateFormat("HH:mm:ss,SSS");
+ public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf) {
+ this(nodeId,del,conf,false);
+ }
+
public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf, boolean clusterState) {
_nodeId = nodeId;
_db = del;
@@ -469,25 +468,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
_processedSinceLastLoadTask.clear();
_outstandingJobs.clear();
- _dbNodes.clear();
- _clusterNodes.clear();
+ _knownNodes.clear();
_staleNodes.clear();
- try {
- execTransaction(new Callable<Void>() {
-
- public Void call() throws Exception {
- _dbNodes.addAll(_db.getNodeIds());
- return null;
- }
-
- });
- } catch (Exception ex) {
- __log.error("Error retrieving node list.", ex);
- throw new ContextException("Error retrieving node list.", ex);
- }
- _clusterNodes.add(_nodeId);
-
long now = System.currentTimeMillis();
// Pretend we got a heartbeat...
@@ -496,11 +479,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
// schedule immediate job loading for now!
_todo.enqueue(new LoadImmediateTask(now));
- // schedule check for stale nodes, make it random so that the nodes don't overlap.
- _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+ if(!_isClusterEnabled) enqueueTasksReadnodeIds();
- // do the upgrade sometime (random) in the immediate interval.
- _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+ else {
+ if (_clusterManager.getIsMaster()) enqueueTasksReadnodeIds();
+ }
_todo.start();
_running = true;
@@ -529,7 +512,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
}
public void memberAdded(String nodeId) {
- _clusterNodes.add(nodeId);
+ _knownNodes.add(nodeId);
}
public void memberRemoved(String nodeId) {
@@ -537,16 +520,16 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
}
// Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
- public void memberElectedAsMaster() {
- _masterId = _nodeId;
- _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + randomMean(_staleInterval)));
- _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis() + randomMean(_immediateInterval)));
- _dbNodes.clear();
+ public void memberElectedAsMaster(String masterId) {
+ enqueueTasksReadnodeIds();
+ }
+
+ private void enqueueTasksReadnodeIds() {
try {
execTransaction(new Callable<Void>() {
public Void call() throws Exception {
- _dbNodes.addAll(_db.getNodeIds());
+ _knownNodes.addAll(_db.getNodeIds());
return null;
}
@@ -555,6 +538,19 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
__log.error("Error retrieving node list.", ex);
throw new ContextException("Error retrieving node list.", ex);
}
+
+ //make double sure all the active nodes are included into _knownNodes
+ if(_isClusterEnabled) _knownNodes.addAll(_clusterManager.getActiveNodes());
+
+ else _knownNodes.add(_nodeId);
+
+ long now = System.currentTimeMillis();
+
+ // schedule check for stale nodes, make it random so that the nodes don't overlap.
+ _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+
+ // do the upgrade sometime (random) in the immediate interval.
+ _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
}
class RunJob implements Callable<Void> {
@@ -880,9 +876,13 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
if(_isClusterEnabled) _staleNodes.remove(nodeId);
- // If the stale node id is in _clusterNodes or _dbNodes, remove it.
- _clusterNodes.remove(nodeId);
- _dbNodes.remove(nodeId);
+ // If the stale node id is in _knownNodes, remove it.
+ _knownNodes.remove(nodeId);
+
+ // We can now forget about this node, if we see it again, it will be
+ // "new to us"
+ //_knownNodes.remove(nodeId);
+ //_lastHeartBeat.remove(nodeId);
// Force a load-immediate to catch anything new from the recovered node.
doLoadImmediate();
@@ -981,9 +981,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
_todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + _staleInterval));
__log.debug("CHECK STALE NODES started");
- ArrayList<String> knownNodes = new ArrayList<String>();
- knownNodes.addAll(_dbNodes);
- knownNodes.addAll(_clusterNodes);
+ ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
// for cluster mode
if (_isClusterEnabled && _clusterManager.getIsMaster()) {
@@ -1006,6 +1004,14 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
}
}
+ /*for (String nodeId : _knownNodes) {
+ Long lastSeen = _lastHeartBeat.get(nodeId);
+ if ((lastSeen == null || (System.currentTimeMillis() - lastSeen) > _staleInterval)
+ && !_nodeId.equals(nodeId))
+ {
+ recoverStaleNode(nodeId);
+ }
+ }*/
}
}
[07/30] ode git commit: redesigning phase
Posted by sa...@apache.org.
redesigning phase
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/afa36ee6
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/afa36ee6
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/afa36ee6
Branch: refs/heads/ODE-563
Commit: afa36ee682af1ec4cf4441c44007f2ef6b564b04
Parents: b4cd9a4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 15 22:53:53 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 15 22:53:53 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 31 ++++------
.../apache/ode/bpel/clapi/ClusterManager.java | 59 ++++++++++++++++++++
.../apache/ode/bpel/hzapi/HazelcastCluster.java | 56 -------------------
.../ode/il/config/OdeConfigProperties.java | 12 +++-
.../apache/ode/bpel/engine/BpelServerImpl.java | 6 +-
.../org/apache/ode/bpel/engine/Contexts.java | 4 +-
.../ode/store/ClusterProcessStoreImpl.java | 25 +++++++--
.../hazelcast/HazelcastClusterImpl.java | 56 ++++++++-----------
8 files changed, 129 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index d1f6c36..26489d2 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -48,7 +48,6 @@ import javax.transaction.xa.XAResource;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
@@ -83,8 +82,7 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.fs.TempFileManager;
-import org.apache.ode.clustering.hazelcast.*;
-import com.hazelcast.core.*;
+import org.apache.ode.bpel.clapi.ClusterManager;
/**
* Server class called by our Axis hooks to handle all ODE lifecycle management.
@@ -137,9 +135,7 @@ public class ODEServer {
public Runnable txMgrCreatedCallback;
- private HazelcastInstanceConfig hazelcastInstanceConfig;
-
- private HazelcastClusterImpl hazelcastClusterImpl;
+ private ClusterManager _clusterManager;
private String clusteringState = "";
@@ -484,7 +480,7 @@ public class ODEServer {
isClusteringEnabled = state;
}
- public boolean getClusteringState() {
+ public boolean getIsCluteringEnabled() {
return isClusteringEnabled;
}
@@ -492,17 +488,14 @@ public class ODEServer {
* Initialize the clustering if it is enabled
*/
private void initClustering() {
- String hzConfig = System.getProperty("hazelcast.config");
- if (hzConfig != null) hazelcastInstanceConfig = new HazelcastInstanceConfig();
- else {
- File hzXml = new File(_configRoot, "hazelcast.xml");
- if (!hzXml.isFile())
- __log.error("hazelcast.xml does not exist or is not a file");
- else hazelcastInstanceConfig = new HazelcastInstanceConfig(hzXml);
- }
- if (hazelcastInstanceConfig != null) {
- hazelcastClusterImpl = new HazelcastClusterImpl(hazelcastInstanceConfig.getHazelcastInstance());
+ String clusterImplName = _odeConfig.getClusteringImplClass();
+ try {
+ Class<?> clustering_class = this.getClass().getClassLoader().loadClass(clusterImplName);
+ _clusterManager = (ClusterManager) clustering_class.newInstance();
+ } catch (Exception ex) {
+ __log.error(ex);
}
+ _clusterManager.init(_configRoot);
}
/**
@@ -534,7 +527,7 @@ public class ODEServer {
protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
if (isClusteringEnabled)
- return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, hazelcastClusterImpl);
+ return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, _clusterManager);
else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
}
@@ -585,7 +578,7 @@ public class ODEServer {
_bpelServer.setCronScheduler(_cronScheduler);
_bpelServer.setDaoConnectionFactory(_daoCF);
- _bpelServer.setHazelcastCluster(hazelcastClusterImpl);
+ _bpelServer.setClusterManagerImpl(_clusterManager);
_bpelServer.setInMemDaoConnectionFactory(new BpelDAOConnectionFactoryImpl(_scheduler, _odeConfig.getInMemMexTtl()));
_bpelServer.setEndpointReferenceContext(eprContext);
_bpelServer.setMessageExchangeContext(new MessageExchangeContextImpl(this));
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/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
new file mode 100644
index 0000000..4a0aded
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -0,0 +1,59 @@
+/*
+ * 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.clapi;
+
+import java.io.File;
+import java.util.List;
+
+public interface ClusterManager {
+
+ /**
+ * Initialization of the cluster
+ * @param file
+ */
+ void init(File file);
+
+ /**
+ * Check whether current node is the leader or not.
+ */
+ void markAsMaster();
+
+ /**
+ * Return isMaster
+ * @return
+ */
+ boolean getIsMaster();
+
+ /**
+ * Acquire the lock for each file in the file system
+ * @param key
+ * @return
+ */
+ boolean lock(String key);
+
+ /**
+ * Release the lock acquired by each file
+ * @param key
+ * @return
+ */
+ boolean unlock(String key);
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
deleted file mode 100644
index adca32c..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
+++ /dev/null
@@ -1,56 +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.hzapi;
-
-import com.hazelcast.core.Member;
-
-import java.util.List;
-
-public interface HazelcastCluster {
-
- /**
- * Initialization of the cluster
- */
- void init();
-
- /**
- * Get hostName + port nu of Member
- * @param member
- * @return
- */
- String getHazelCastNodeID(Member member);
-
- /**
- * Check whether current node is the leader or not.
- */
- void markAsMaster();
-
- /**
- * returns Current Nodes in the cluster.
- * @return
- */
- List<String> getKnownNodes();
-
- /**
- * Return isMaster
- * @return
- */
- boolean getIsMaster();
-
-}
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index cef3b74..5c0ed13 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -106,7 +106,11 @@ public class OdeConfigProperties {
public static final String DEFAULT_TX_FACTORY_CLASS_NAME = "org.apache.ode.il.EmbeddedGeronimoFactory";
- public static final String PROP_HAZELCAST_CLUSTERING = "hazelcast.clustering.enabled";
+ public static final String PROP_CLUSTERING_ENABLED = "clustering.enabled";
+
+ public static final String PROP_CLUSTERING_IMPL_CLASS = "clustering.impl.class";
+
+ public static final String DEFAULT_CLUSTERING_IMPL_CLASS_NAME = "org.apache.ode.clustering.hazelcast.HazelcastClusterImpl";
private File _cfgFile;
@@ -292,7 +296,11 @@ public class OdeConfigProperties {
}
public String getClusteringState() {
- return getProperty(OdeConfigProperties.PROP_HAZELCAST_CLUSTERING);
+ return getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED);
+ }
+
+ public String getClusteringImplClass() {
+ return getProperty(OdeConfigProperties.PROP_CLUSTERING_IMPL_CLASS, DEFAULT_CLUSTERING_IMPL_CLASS_NAME);
}
public String getTxFactoryClass() {
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index 92e9784..01ef6eb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -35,6 +35,7 @@ import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.dao.BpelDAOConnection;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.dao.DeferredProcessInstanceCleanable;
@@ -59,7 +60,6 @@ import org.apache.ode.bpel.iapi.Scheduler.MapSerializableRunnable;
import org.apache.ode.bpel.iapi.Scheduler.Synchronizer;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.o.OProcess;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import org.apache.ode.utils.msg.MessageBundle;
import org.apache.ode.utils.stl.CollectionsX;
import org.apache.ode.utils.stl.MemberOfFunction;
@@ -535,8 +535,8 @@ public class BpelServerImpl implements BpelServer, Scheduler.JobProcessor {
_contexts.bindingContext = bc;
}
- public void setHazelcastCluster(HazelcastClusterImpl hzCImpl) {
- _contexts.hazelcastClusterImpl = hzCImpl;
+ public void setClusterManagerImpl(ClusterManager cm) {
+ _contexts.clusterManager = cm;
}
public DebuggerContext getDebugger(QName pid) throws BpelEngineException {
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
index 115f4f7..a965d58 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.engine;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.iapi.BindingContext;
import org.apache.ode.bpel.iapi.BpelEventListener;
@@ -28,7 +29,6 @@ import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.evar.ExternalVariableModule;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
import java.util.HashMap;
import java.util.List;
@@ -47,7 +47,7 @@ public class Contexts {
public CronScheduler cronScheduler;
- public HazelcastClusterImpl hazelcastClusterImpl;
+ public ClusterManager clusterManager;
EndpointReferenceContext eprContext;
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 7f79a8b..22ba2cd 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -30,6 +30,8 @@ import javax.sql.DataSource;
import javax.xml.namespace.QName;
import java.io.File;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import com.hazelcast.core.*;
@@ -66,15 +68,16 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
clusterMessageTopic.publish("Deployed " +duName);
}
- //have to write code for retire previous versions
public void publishService(final String duName) {
- final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
- String namePart = duName.split("-")[0];
+ final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();;
ProcessState state = ProcessState.ACTIVE;
+ Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
+
for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
ProcessConfImpl pconf = iterator.next();
- if (pconf.getPackage().contains(namePart) && pconf.getState().equals(state)) {
+ Matcher matcher = duNamePattern.matcher(pconf.getPackage());
+ if (matcher.matches() && pconf.getState().equals(state)) {
pconf.setState(ProcessState.RETIRED);
confs.add(pconf);
}
@@ -122,4 +125,18 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
}
}
}
+
+ private Pattern getPreviousPackageVersionPattern(String duName) {
+ String[] nameParts = duName.split("/");
+ /* Replace the version number (if any) with regexp to match any version number */
+ nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
+ nameParts[0] += "([-\\Q.\\E](\\d)+)?";
+ StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
+ for (int i = 0, n = nameParts.length; i < n; i++) {
+ if (i > 0) duNameRegExp.append("/");
+ duNameRegExp.append(nameParts[i]);
+ }
+ Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+ return duNamePattern;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/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 4e6878e..6ae701b 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
@@ -20,18 +20,19 @@ package org.apache.ode.clustering.hazelcast;
import com.hazelcast.core.*;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.hzapi.HazelcastCluster;
+import org.apache.ode.bpel.clapi.ClusterManager;
/**
* This class implements necessary methods to build the cluster using hazelcast
*/
-public class HazelcastClusterImpl implements HazelcastCluster{
+public class HazelcastClusterImpl implements ClusterManager{
private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
private HazelcastInstance _hazelcastInstance;
@@ -40,28 +41,26 @@ public class HazelcastClusterImpl implements HazelcastCluster{
private IMap<String, String> lock_map;
- public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
- _hazelcastInstance = hazelcastInstance;
- init();
- }
-
- public void init() {
- // Registering this node in the cluster.
- _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
-
- Member localMember = _hazelcastInstance.getCluster().getLocalMember();
- String localMemberID = getHazelCastNodeID(localMember);
- __log.info("Registering HZ localMember ID " + localMemberID);
- _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
- .put(localMemberID, isMaster);
-
- lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
- }
+ public void init(File configRoot) {
+ //First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
+ //Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+ String hzConfig = System.getProperty("hazelcast.config");
+ if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
+ else {
+ File hzXml = new File(configRoot, "hazelcast.xml");
+ if (!hzXml.isFile())
+ __log.error("hazelcast.xml does not exist or is not a file");
+ else _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+ }
- public String getHazelCastNodeID(Member member) {
- String hostName = member.getSocketAddress().getHostName();
- int port = member.getSocketAddress().getPort();
- return hostName + ":" + port;
+ if (_hazelcastInstance != null) {
+ // Registering this node in the cluster.
+ _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+ Member localMember = _hazelcastInstance.getCluster().getLocalMember();
+ __log.info("Registering HZ localMember ID " + localMember);
+ markAsMaster();
+ lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+ }
}
public boolean lock(String key) {
@@ -83,7 +82,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
}
class ClusterMemberShipListener implements MembershipListener {
-
@Override
public void memberAdded(MembershipEvent membershipEvent) {
// Noting to do here.
@@ -95,8 +93,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
// Allow Leader to update distributed map.
if (isMaster) {
String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
- // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
- // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
}
}
@@ -114,14 +110,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
__log.info(isMaster);
}
- public List<String> getKnownNodes() {
- List<String> nodeList = new ArrayList<String>();
- for (Object s : _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).keySet()) {
- nodeList.add((String) _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).get(s));
- }
- return nodeList;
- }
-
public boolean getIsMaster() {
return isMaster;
}
[10/30] ode git commit: minor changes
Posted by sa...@apache.org.
minor changes
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/0afb7c4d
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/0afb7c4d
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/0afb7c4d
Branch: refs/heads/ODE-563
Commit: 0afb7c4d6268ff3bcc99620e4926e0c7ab61d78d
Parents: 9cb7582
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 22 21:29:19 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 22 21:29:19 2015 +0530
----------------------------------------------------------------------
.../ode/axis2/deploy/DeploymentPoller.java | 2 +
.../ode/axis2/service/DeploymentWebService.java | 5 +-
.../apache/ode/bpel/clapi/ClusterManager.java | 9 ++++
.../bpel/clapi/ProcessStoreClusterEvent.java | 57 ++++++++++++++++++++
.../bpel/clapi/ProcessStoreDeployedEvent.java | 18 ++-----
.../bpel/clapi/ProcessStoreUndeployedEvent.java | 16 ++----
.../ode/store/ClusterProcessStoreImpl.java | 31 +++--------
.../org/apache/ode/store/ProcessStoreImpl.java | 51 ++++++------------
.../hazelcast/HazelcastClusterImpl.java | 41 +++++++-------
dependencies.rb | 2 +-
10 files changed, 126 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 9964af0..ed84f35 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -346,6 +346,8 @@ public class DeploymentPoller {
*/
private boolean pollerTryLock(String key) {
if(clusterEnabled) {
+ ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
+ cm.putIfAbsent(key,key);
return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
}
else return true;
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 89c5a63..66221dc 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -45,6 +45,7 @@ import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
+import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisOperation;
@@ -386,7 +387,9 @@ public class DeploymentWebService {
*/
private boolean lock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
+ ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
+ cm.putIfAbsent(key,key);
+ return cm.lock(key);
}
else return true;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/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 df4342e..fab2bac 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
@@ -67,4 +67,13 @@ public interface ClusterManager {
* @param event
*/
void publishProcessStoreEvent(Object event);
+
+ /**
+ * Check whether the map has a value for given key, if absent put the value to map
+ * @param key
+ * @param keyVal
+ */
+ void putIfAbsent(String key, String keyVal);
+
+
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
new file mode 100644
index 0000000..a396f6f
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
@@ -0,0 +1,57 @@
+/*
+ * 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.clapi;
+
+import java.io.Serializable;
+
+public abstract class ProcessStoreClusterEvent implements Serializable {
+ protected static final long serialVersionUID = 1L;
+
+ private String deploymentUnit;
+
+ protected String info ;
+
+ private String uuid;
+
+ public ProcessStoreClusterEvent(String deploymentUnit) {
+ this.deploymentUnit = deploymentUnit;
+ }
+
+ @Override
+ public String toString() {
+ return "{ProcessStoreClusterEvent#" + deploymentUnit +"}";
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public String getDuName() {
+ return deploymentUnit;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
index a623d47..c7cbb23 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
@@ -18,23 +18,15 @@
*/
package org.apache.ode.bpel.clapi;
-import java.io.Serializable;
+public class ProcessStoreDeployedEvent extends ProcessStoreClusterEvent {
-public class ProcessStoreDeployedEvent implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public final String deploymentUnit;
-
- public final String info;
-
- public ProcessStoreDeployedEvent(String deploymentUnit) {
- this.info = "Deployment Event";
- this.deploymentUnit = deploymentUnit;
+ public ProcessStoreDeployedEvent(String deploymentUnit) {
+ super(deploymentUnit);
+ info = "Deploy Event";
}
@Override
public String toString() {
- return "{ProcessStoreDeployedEvent#" + deploymentUnit +"}";
+ return "{ProcessStoreDeployedEvent#" + getDuName() +"}";
}
-
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
index 347312f..d4f5a49 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
@@ -18,23 +18,15 @@
*/
package org.apache.ode.bpel.clapi;
-import java.io.Serializable;
-
-public class ProcessStoreUndeployedEvent implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public final String deploymentUnit;
-
- public final String info;
+public class ProcessStoreUndeployedEvent extends ProcessStoreClusterEvent {
public ProcessStoreUndeployedEvent(String deploymentUnit) {
- this.info = "Undeployment Event";
- this.deploymentUnit = deploymentUnit;
+ super(deploymentUnit);
+ info = "Undeploy Event";
}
@Override
public String toString() {
- return "{ProcessStoreUndeployedEvent#" + deploymentUnit +"}";
+ return "{ProcessStoreUndeployedEvent#" + getDuName() +"}";
}
-
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 551fd72..117eab0 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -37,7 +37,6 @@ import java.util.regex.Pattern;
public class ClusterProcessStoreImpl extends ProcessStoreImpl{
private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
- private final Map<QName, ProcessConfImpl> loaded = new HashMap<QName, ProcessConfImpl>();
private ClusterManager _clusterManager;
private ProcessStoreDeployedEvent deployedEvent;
private ProcessStoreUndeployedEvent undeployedEvent;
@@ -50,10 +49,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
public Collection<QName> deploy(final File deploymentUnitDirectory) {
Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
- Map<QName, ProcessConfImpl> _processes = getProcessesMap();
- for (QName key : deployed) {
- loaded.put(key,_processes.get(key));
- }
publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
return deployed;
}
@@ -64,13 +59,13 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
}
public void publishService(final String duName) {
- final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();;
+ final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
ProcessState state = ProcessState.ACTIVE;
Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
- for (QName key : loaded.keySet()) {
- ProcessConfImpl pconf = loaded.get(key);
+ for (QName key : _processes.keySet()) {
+ ProcessConfImpl pconf = _processes.get(key);
Matcher matcher = duNamePattern.matcher(pconf.getPackage());
if (matcher.matches() && pconf.getState().equals(state)) {
pconf.setState(ProcessState.RETIRED);
@@ -85,7 +80,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
if (dudao != null) {
List<ProcessConfImpl> load = load(dudao);
for(ProcessConfImpl p : load) {
- loaded.put(p.getProcessId(),p);
+ _processes.put(p.getProcessId(),p);
}
confs.addAll(load);
}
@@ -105,23 +100,11 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
}
}
- private Pattern getPreviousPackageVersionPattern(String duName) {
- String[] nameParts = duName.split("/");
- /* Replace the version number (if any) with regexp to match any version number */
- nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
- nameParts[0] += "([-\\Q.\\E](\\d)+)?";
- StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
- for (int i = 0, n = nameParts.length; i < n; i++) {
- if (i > 0) duNameRegExp.append("/");
- duNameRegExp.append(nameParts[i]);
- }
- Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
- return duNamePattern;
- }
+
public Collection<QName> undeploy(final File dir) {
Collection<QName> undeployed = super.undeploy(dir);
- loaded.keySet().removeAll(undeployed);
+ _processes.keySet().removeAll(undeployed);
publishProcessStoreUndeployedEvent(dir.getName());
return undeployed;
}
@@ -138,7 +121,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
*/
public Collection<QName> undeployProcesses(final String duName) {
Collection<QName> undeployed = super.undeployProcesses(duName);
- loaded.keySet().removeAll(undeployed);
+ _processes.keySet().removeAll(undeployed);
return undeployed;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 77afe5a..0658b66 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -71,7 +71,7 @@ public class ProcessStoreImpl implements ProcessStore {
private final CopyOnWriteArrayList<ProcessStoreListener> _listeners = new CopyOnWriteArrayList<ProcessStoreListener>();
- private Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
+ protected Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
private Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
@@ -333,18 +333,9 @@ public class ProcessStoreImpl implements ProcessStore {
* "AbsenceRequest-2/AbsenceRequest.ode" and setRetirePackage() will be called accordingly.
*/
private void retirePreviousPackageVersions(DeploymentUnitDir du) {
- //retire all the other versions of the same DU
- String[] nameParts = du.getName().split("/");
- /* Replace the version number (if any) with regexp to match any version number */
- nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
- nameParts[0] += "([-\\Q.\\E](\\d)+)?";
- StringBuilder duNameRegExp = new StringBuilder(du.getName().length() * 2);
- for (int i = 0, n = nameParts.length; i < n; i++) {
- if (i > 0) duNameRegExp.append("/");
- duNameRegExp.append(nameParts[i]);
- }
- Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+ Pattern duNamePattern = getPreviousPackageVersionPattern(du.getName());
+
for (String deployedDUname : _deploymentUnits.keySet()) {
Matcher matcher = duNamePattern.matcher(deployedDUname);
if (matcher.matches()) {
@@ -371,26 +362,7 @@ public class ProcessStoreImpl implements ProcessStore {
__log.error("Error synchronizing with data store; " + duName + " may be reappear after restart!");
}
- Collection<QName> undeployed = Collections.emptyList();
- DeploymentUnitDir du;
- _rw.writeLock().lock();
- try {
- du = _deploymentUnits.remove(duName);
- if (du != null) {
- undeployed = toPids(du.getProcessNames(), du.getVersion());
- }
-
- for (QName pn : undeployed) {
- fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.UNDEPLOYED, pn, du.getName()));
- __log.info(__msgs.msgProcessUndeployed(pn));
- }
-
- _processes.keySet().removeAll(undeployed);
- } finally {
- _rw.writeLock().unlock();
- }
-
- return undeployed;
+ return undeployProcesses(duName);
}
public Collection<String> getPackages() {
@@ -900,8 +872,19 @@ public class ProcessStoreImpl implements ProcessStore {
}
}
- protected Map<QName, ProcessConfImpl> getProcessesMap() {
- return _processes;
+ protected Pattern getPreviousPackageVersionPattern(String duName) {
+ //retire all the other versions of the same DU
+ String[] nameParts = duName.split("/");
+ /* Replace the version number (if any) with regexp to match any version number */
+ nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
+ nameParts[0] += "([-\\Q.\\E](\\d)+)?";
+ StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
+ for (int i = 0, n = nameParts.length; i < n; i++) {
+ if (i > 0) duNameRegExp.append("/");
+ duNameRegExp.append(nameParts[i]);
+ }
+ Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+ return duNamePattern;
}
protected Collection<QName> undeployProcesses(final String duName) {
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/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 beba779..42a3169 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,6 +30,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreClusterEvent;
import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
import org.apache.ode.store.ClusterProcessStoreImpl;
@@ -43,7 +44,6 @@ public class HazelcastClusterImpl implements ClusterManager {
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
private Member leader;
- private Member eventInitiator;
private IMap<String, String> lock_map;
private ITopic<Object> clusterMessageTopic;
private ClusterProcessStoreImpl _clusterProcessStore;
@@ -81,27 +81,23 @@ public class HazelcastClusterImpl implements ClusterManager {
}
}
+ public void putIfAbsent(String key, String keyVal) {
+ lock_map.putIfAbsent(key, keyVal);
+ }
+
public boolean lock(String key) {
- lock_map.putIfAbsent(key, key);
lock_map.lock(key);
- boolean state = lock_map.isLocked(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
- return state;
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+ return true;
}
public boolean unlock(String key) {
lock_map.unlock(key);
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- }
- boolean state = lock_map.isLocked(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
- return state;
+ __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+ return true;
}
public boolean tryLock(String key) {
- lock_map.putIfAbsent(key, key);
boolean state = lock_map.tryLock(key);
__log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
return state;
@@ -125,8 +121,11 @@ public class HazelcastClusterImpl implements ClusterManager {
}
public void publishProcessStoreEvent(Object event) {
- eventInitiator = _hazelcastInstance.getCluster().getLocalMember();
- clusterMessageTopic.publish(event);
+ if (event instanceof ProcessStoreClusterEvent) {
+ ProcessStoreClusterEvent e = (ProcessStoreClusterEvent) event;
+ e.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
+ clusterMessageTopic.publish(e);
+ }
}
@@ -141,21 +140,21 @@ public class HazelcastClusterImpl implements ClusterManager {
if (message instanceof ProcessStoreDeployedEvent) {
ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
- if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
- String duName = event.deploymentUnit;
+ if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+ String duName = event.getDuName();
__log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
_clusterProcessStore.publishService(duName);
- } else eventInitiator = null;
+ }
}
else if (message instanceof ProcessStoreUndeployedEvent) {
ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
- if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
- String duName = event.deploymentUnit;
+ if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+ String duName = event.getDuName();
__log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
_clusterProcessStore.undeployProcesses(duName);
- } else eventInitiator = null;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index 33da5e4..f85e38a 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,7 +75,7 @@ GERONIMO = struct(
:transaction =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
:connector =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
)
-HAZELCAST ="com.hazelcast:hazelcast:jar:3.4.2"
+HAZELCAST ="com.hazelcast:hazelcast:jar:3.5"
HIBERNATE = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
"asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
HSQLDB = "hsqldb:hsqldb:jar:1.8.0.7"
[14/30] ode git commit: completed improvements-1
Posted by sa...@apache.org.
completed improvements-1
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/82143f47
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/82143f47
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/82143f47
Branch: refs/heads/ODE-563
Commit: 82143f4736a4063eda0a467532ae1188cb00cbbe
Parents: ca74e00
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 30 00:04:23 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 30 00:04:23 2015 +0530
----------------------------------------------------------------------
.../ode/axis2/deploy/DeploymentPoller.java | 39 +++++++++++++++-----
.../ode/store/ClusterProcessStoreImpl.java | 32 ++++++++--------
.../org/apache/ode/store/ProcessStoreImpl.java | 4 +-
.../hazelcast/HazelcastClusterImpl.java | 16 +++++---
.../hazelcast/HazelcastConstants.java | 4 +-
5 files changed, 63 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index ed84f35..7912db6 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -140,7 +140,9 @@ public class DeploymentPoller {
if (isDeploymentFromODEFileSystemAllowed() && files != null) {
for (File file : files) {
String duName = file.getName();
- __log.info("Trying to acquire the lock for " + duName);
+ if (__log.isDebugEnabled()) {
+ __log.debug("Trying to acquire the lock for " + duName);
+ }
duLocked = pollerTryLock(duName);
if (duLocked) {
@@ -187,7 +189,9 @@ public class DeploymentPoller {
__log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
}
} finally {
- __log.info("Trying to release the lock for " + file.getName());
+ if (__log.isDebugEnabled()) {
+ __log.debug("Trying to release the lock for " + file.getName());
+ }
unlock(file.getName());
}
}
@@ -200,16 +204,33 @@ public class DeploymentPoller {
String pkg = file.getName().substring(0, file.getName().length() - ".deployed".length());
File deployDir = new File(_deployDir, pkg);
if (!deployDir.exists()) {
- Collection<QName> undeployed = _odeServer.getProcessStore().undeploy(deployDir);
- boolean isDeleted = file.delete();
- if (!isDeleted) {
- __log.error("Error while deleting file "
+ String duName = deployDir.getName();
+
+ if (__log.isDebugEnabled()) {
+ __log.debug("Trying to acquire the lock for " + duName);
+ }
+
+ duLocked = pollerTryLock(duName);
+
+ if (duLocked) {
+ try {
+ Collection<QName> undeployed = _odeServer.getProcessStore().undeploy(deployDir);
+ boolean isDeleted = file.delete();
+ if (!isDeleted) {
+ __log.error("Error while deleting file "
+ file.getName()
+ ".deployed , please check if file is locked or if it really exist");
+ }
+ disposeDeployXmlWatchDog(deployDir);
+ if (undeployed.size() > 0)
+ __log.info("Successfully undeployed " + pkg);
+ } finally {
+ if (__log.isDebugEnabled()) {
+ __log.debug("Trying to release the lock for " + duName);
+ }
+ unlock(duName);
+ }
}
- disposeDeployXmlWatchDog(deployDir);
- if (undeployed.size() > 0)
- __log.info("Successfully undeployed " + pkg);
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f36ea69..51fea5a 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -24,6 +24,7 @@ import org.apache.ode.bpel.clapi.ClusterManager;
import org.apache.ode.bpel.clapi.ClusterProcessStore;
import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.ProcessState;
import org.apache.ode.bpel.iapi.EndpointReferenceContext;
import org.apache.ode.il.config.OdeConfigProperties;
@@ -67,13 +68,20 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
- for (QName key : _processes.keySet()) {
- ProcessConfImpl pconf = _processes.get(key);
- Matcher matcher = duNamePattern.matcher(pconf.getPackage());
- if (matcher.matches() && pconf.getState().equals(state)) {
- pconf.setState(ProcessState.RETIRED);
- __log.info("Set state of " +pconf.getProcessId() +"to " +pconf.getState());
- confs.add(pconf);
+ for (String packageName : _deploymentUnits.keySet()) {
+ Matcher matcher = duNamePattern.matcher(packageName);
+ if (matcher.matches()) {
+ DeploymentUnitDir duDir = _deploymentUnits.get(packageName);
+ if (duDir == null) throw new ContextException("Could not find package " + packageName);
+ for (QName processName : duDir.getProcessNames()) {
+ QName pid = toPid(processName, duDir.getVersion());
+ ProcessConfImpl pconf = _processes.get(pid);
+ if (pconf.getState().equals(state)) {
+ pconf.setState(ProcessState.RETIRED);
+ __log.info("Set state of " + pconf.getProcessId() + "to " + pconf.getState());
+ confs.add(pconf);
+ }
+ }
}
}
@@ -84,9 +92,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
if (dudao != null) {
List<ProcessConfImpl> load = load(dudao);
__log.info("Loading DU from store: " + duName);
- for(ProcessConfImpl p : load) {
- _processes.put(p.getProcessId(),p);
- }
confs.addAll(load);
}
return null;
@@ -98,19 +103,17 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
for (ProcessConfImpl p : confs) {
try {
- __log.info("Fire event of " + p.getProcessId() +" " +p.getState());
+ __log.info("Fire event of " + p.getProcessId() + " " + p.getState());
fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
} catch (Exception except) {
- __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+ __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package=" + p.getDeploymentUnit().getName(), except);
}
}
}
-
public Collection<QName> undeploy(final File dir) {
Collection<QName> undeployed = super.undeploy(dir);
- _processes.keySet().removeAll(undeployed);
publishProcessStoreUndeployedEvent(dir.getName());
return undeployed;
}
@@ -128,7 +131,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
*/
public Collection<QName> undeployProcesses(final String duName) {
Collection<QName> undeployed = super.undeployProcesses(duName);
- _processes.keySet().removeAll(undeployed);
return undeployed;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 0658b66..91f0bff 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -73,7 +73,7 @@ public class ProcessStoreImpl implements ProcessStore {
protected Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
- private Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
+ protected Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
/** Guards access to the _processes and _deploymentUnits */
private final ReadWriteLock _rw = new ReentrantReadWriteLock();
@@ -849,7 +849,7 @@ public class ProcessStoreImpl implements ProcessStore {
return result;
}
- private QName toPid(QName processType, long version) {
+ protected QName toPid(QName processType, long version) {
return new QName(processType.getNamespaceURI(), processType.getLocalPart() + "-" + version);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/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 89469e3..c721373 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
@@ -70,8 +70,8 @@ public class HazelcastClusterImpl implements ClusterManager {
Member localMember = _hazelcastInstance.getCluster().getLocalMember();
__log.info("Registering HZ localMember ID " + localMember);
markAsMaster();
- lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
- clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+ lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
+ clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
}
}
@@ -81,19 +81,25 @@ public class HazelcastClusterImpl implements ClusterManager {
public boolean lock(String key) {
lock_map.lock(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+ }
return true;
}
public boolean unlock(String key) {
lock_map.unlock(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+ }
return true;
}
public boolean tryLock(String key) {
boolean state = lock_map.tryLock(key);
- __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+ }
return state;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index f9d1004..76e7341 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,7 +21,9 @@ package org.apache.ode.clustering.hazelcast;
* Constants used in Hazelcast based clustering implementation
*/
public final class HazelcastConstants {
- public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
+ public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "DEPLOYMENT_LOCK";
+ public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK = "PROCESS_INSTANCE_LOCK ";
+ public static final String ODE_CLUSTER_MSG = "CLUSTER_MSG";
private HazelcastConstants() {
}
[15/30] ode git commit: Included all the changes to create patch-1
Posted by sa...@apache.org.
Included all the changes to create patch-1
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/224dc217
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/224dc217
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/224dc217
Branch: refs/heads/ODE-563
Commit: 224dc217ba34a27a3df5f0453481f41996b92271
Parents: 82143f4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 30 22:24:41 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 30 22:24:41 2015 +0530
----------------------------------------------------------------------
.../hazelcast/HazelcastClusterImpl.java | 22 ++++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/224dc217/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 c721373..11e1313 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
@@ -40,6 +40,8 @@ public class HazelcastClusterImpl implements ClusterManager {
private HazelcastInstance _hazelcastInstance;
private boolean isMaster = false;
+ private String nodeID;
+ private String uuid;
private Member leader;
private IMap<String, String> lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
@@ -68,7 +70,9 @@ public class HazelcastClusterImpl implements ClusterManager {
// Registering this node in the cluster.
_hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
Member localMember = _hazelcastInstance.getCluster().getLocalMember();
- __log.info("Registering HZ localMember ID " + localMember);
+ nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
+ uuid = localMember.getUuid();
+ __log.info("Registering HZ localMember ID " + nodeID);
markAsMaster();
lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
@@ -122,8 +126,8 @@ public class HazelcastClusterImpl implements ClusterManager {
}
public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
- clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
- __log.info("Send " +clusterEvent.getInfo() +"Cluster Message " +"for " +clusterEvent.getDuName());
+ clusterEvent.setUuid(uuid);
+ __log.info("Send " +clusterEvent.getInfo() +" Cluster Message " +"for " +clusterEvent.getDuName() +" [" +nodeID +"]");
clusterMessageTopic.publish(clusterEvent);
}
@@ -138,20 +142,20 @@ public class HazelcastClusterImpl implements ClusterManager {
private void handleEvent(ProcessStoreClusterEvent message) {
if (message instanceof ProcessStoreDeployedEvent) {
ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
-
- if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
+ String eventUuid = event.getUuid();
+ if (!uuid.equals(eventUuid)) {
String duName = event.getDuName();
- __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+ __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
_clusterProcessStore.deployProcesses(duName);
}
}
else if (message instanceof ProcessStoreUndeployedEvent) {
ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
-
- if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
+ String eventUuid = event.getUuid();
+ if (!uuid.equals(eventUuid)) {
String duName = event.getDuName();
- __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+ __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
_clusterProcessStore.undeployProcesses(duName);
}
}
[16/30] ode git commit: Initialization of cluster enabled instance
lock manager
Posted by sa...@apache.org.
Initialization of cluster enabled instance lock manager
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/94f19ed6
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/94f19ed6
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/94f19ed6
Branch: refs/heads/ODE-563
Commit: 94f19ed6168b81b8db067bd510c3a7e99aaecc28
Parents: 224dc21
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 8 11:30:17 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 8 11:30:17 2015 +0530
----------------------------------------------------------------------
.../java/org/apache/ode/axis2/ODEServer.java | 10 +-
.../ode/axis2/deploy/DeploymentPoller.java | 10 +-
.../ode/axis2/service/DeploymentWebService.java | 10 +-
.../org/apache/ode/bpel/clapi/ClusterLock.java | 43 +++++++-
.../apache/ode/bpel/clapi/ClusterManager.java | 35 ++----
.../engine/AbstractInstanceLockManager.java | 38 +++++++
.../apache/ode/bpel/engine/BpelEngineImpl.java | 8 +-
.../hazelcast/HazelcastClusterImpl.java | 49 ++++-----
.../hazelcast/HazelcastDeploymentLock.java | 60 ++++++++++
.../hazelcast/HazelcastInstanceLock.java | 109 +++++++++++++++++++
10 files changed, 298 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 9b133fc..34e245a 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -384,8 +384,14 @@ public class ODEServer {
}
if (_clusterManager != null) {
- __log.debug("shutting down cluster manager.");
- _clusterManager = null;
+ try {
+ __log.debug("shutting down cluster manager.");
+ _clusterManager.shutdown();
+ _clusterManager = null;
+ } catch (Exception ex) {
+ __log.debug("Cluster manager shutdown failed.", ex);
+
+ }
}
if (_connector != null) {
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 7912db6..98f5f82 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -41,7 +41,7 @@ package org.apache.ode.axis2.deploy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.axis2.ODEServer;
-import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig;
import org.apache.ode.utils.WatchDog;
@@ -367,16 +367,16 @@ public class DeploymentPoller {
*/
private boolean pollerTryLock(String key) {
if(clusterEnabled) {
- ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
- cm.putIfAbsent(key,key);
- return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
+ ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
+ clusterLock.putIfAbsent(key,key);
+ return clusterLock.tryLockMap(key);
}
else return true;
}
private boolean unlock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+ return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
}
else return true;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 66221dc..7e4b347 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -45,7 +45,7 @@ import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
-import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisOperation;
@@ -387,9 +387,9 @@ public class DeploymentWebService {
*/
private boolean lock(String key) {
if(clusterEnabled) {
- ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
- cm.putIfAbsent(key,key);
- return cm.lock(key);
+ ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
+ clusterLock.putIfAbsent(key,key);
+ return clusterLock.lockMap(key);
}
else return true;
}
@@ -399,7 +399,7 @@ public class DeploymentWebService {
*/
private boolean unlock(String key) {
if(clusterEnabled) {
- return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+ return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
}
else return true;
}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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 ff17188..9eaf705 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
@@ -1,5 +1,25 @@
+/*
+ * 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.clapi;
+import java.util.concurrent.TimeUnit;
+
public interface ClusterLock {
/**
* Acquire the lock for each file in the file system
@@ -7,7 +27,7 @@ public interface ClusterLock {
* @param key
* @return
*/
- boolean lock(String key);
+ boolean lockMap(String key);
/**
* Release the lock acquired by each file
@@ -15,13 +35,28 @@ public interface ClusterLock {
* @param key
* @return
*/
- boolean unlock(String key);
+ boolean unlockMap(String key);
+
+ /**
+ * Tries to acquire the lock for the specified key ant time period.
+ * @param key
+ * @return
+ */
+ boolean tryLockMap(String key);
/**
- * Tries to acquire the lock for the specified key.
*
* @param key
+ * @param time
+ * @param tu
* @return
*/
- boolean tryLock(String key);
+ boolean tryLockMap(String key, int time, TimeUnit tu);
+
+ /**
+ * Check whether the map has a value for given key, if absent put the value to map
+ * @param key
+ * @param keyVal
+ */
+ void putIfAbsent(String key, String keyVal);
}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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 c57358c..6f610a4 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
@@ -19,7 +19,6 @@
package org.apache.ode.bpel.clapi;
import java.io.File;
-import java.util.List;
public interface ClusterManager {
@@ -30,31 +29,15 @@ public interface ClusterManager {
void init(File file);
/**
- * Return whether the local member is Master or not
- * @return
+ * shutdown the cluster instance
*/
- boolean getIsMaster();
+ void shutdwon();
/**
- * Acquire the lock for each file in the file system
- * @param key
- * @return
- */
- boolean lock(String key);
-
- /**
- * Release the lock acquired by each file
- * @param key
- * @return
- */
- boolean unlock(String key);
-
- /**
- * Tries to acquire the lock for the specified key.
- * @param key
+ * Return whether the local member is Master or not
* @return
*/
- boolean tryLock(String key);
+ boolean getIsMaster();
/**
* Set the Process Store object which uses for clustering
@@ -69,14 +52,10 @@ public interface ClusterManager {
void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent);
/**
- * Check whether the map has a value for given key, if absent put the value to map
- * @param key
- * @param keyVal
- */
- void putIfAbsent(String key, String keyVal);
-
- /**
* Register the cluster for message listener
*/
void registerClusterProcessStoreMessageListener();
+
+ ClusterLock getDeploymentLock();
+ ClusterLock getInstanceLock();
}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
new file mode 100644
index 0000000..a534e11
--- /dev/null
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
@@ -0,0 +1,38 @@
+/*
+ * 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.engine;
+
+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 void unlock(Long iid);
+
+ 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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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 19bf53e..81d8a4c 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
@@ -115,7 +115,7 @@ public class BpelEngineImpl implements BpelEngine {
private SharedEndpoints _sharedEps;
/** Manage instance-level locks. */
- private final InstanceLockManager _instanceLockManager = new InstanceLockManager();
+ private final AbstractInstanceLockManager _instanceLockManager;
final Contexts _contexts;
@@ -124,8 +124,14 @@ public class BpelEngineImpl implements BpelEngine {
public BpelEngineImpl(Contexts contexts) {
_contexts = contexts;
+ if(_contexts.clusterManager != null) {
+ _instanceLockManager = _contexts.clusterManager.getInstanceLock();
+ }
+
+ else _instanceLockManager = new InstanceLockManager();
_sharedEps = new SharedEndpoints();
_sharedEps.init();
+
}
public SharedEndpoints getSharedEndpoints() {
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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 11e1313..aa24947 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
@@ -43,9 +43,12 @@ public class HazelcastClusterImpl implements ClusterManager {
private String nodeID;
private String uuid;
private Member leader;
- private IMap<String, String> lock_map;
+ private IMap<String, String> deployment_lock_map;
+ private IMap<String, String> instance_lock_map;
private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
private ClusterProcessStore _clusterProcessStore;
+ private ClusterLock _hazelcastDeploymentLock;
+ private ClusterLock _hazelcastInstanceLock;
public void init(File configRoot) {
@@ -74,37 +77,13 @@ public class HazelcastClusterImpl implements ClusterManager {
uuid = localMember.getUuid();
__log.info("Registering HZ localMember ID " + nodeID);
markAsMaster();
- lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
+ 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);
- }
- }
-
- public void putIfAbsent(String key, String keyVal) {
- lock_map.putIfAbsent(key, keyVal);
- }
-
- public boolean lock(String key) {
- lock_map.lock(key);
- if (__log.isDebugEnabled()) {
- __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
- }
- return true;
- }
-
- public boolean unlock(String key) {
- lock_map.unlock(key);
- if (__log.isDebugEnabled()) {
- __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
- }
- return true;
- }
- public boolean tryLock(String key) {
- boolean state = lock_map.tryLock(key);
- if (__log.isDebugEnabled()) {
- __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+ _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
+ _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
}
- return state;
}
class ClusterMemberShipListener implements MembershipListener {
@@ -181,5 +160,17 @@ public class HazelcastClusterImpl implements ClusterManager {
public void registerClusterProcessStoreMessageListener() {
clusterMessageTopic.addMessageListener(new ClusterMessageListener());
}
+
+ public void shutdown() {
+ if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
+ }
+
+ public ClusterLock getDeplymentLock(){
+ return _hazelcastDeploymentLock;
+ }
+
+ public ClusterLock getInstanceLock(){
+ return _hazelcastInstanceLock;
+ }
}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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
new file mode 100644
index 0000000..4d0aac1
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -0,0 +1,60 @@
+/*
+ * 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.clustering.hazelcast;
+
+import com.hazelcast.core.IMap;
+import org.apache.ode.bpel.clapi.ClusterLock;
+
+public class HazelcastDeploymentLock implements ClusterLock{
+ private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
+
+ private IMap<String, String> _lock_map;
+
+ HazelcastDeploymentLock(IMap<String, String> lock_map) {
+ _lock_map = lock_map;
+ }
+
+ public void putIfAbsent(String key, String keyVal) {
+ _lock_map.putIfAbsent(key, keyVal);
+ }
+
+ public boolean lockMap(String key) {
+ _lock_map.lock(key);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+ }
+ return true;
+ }
+
+ public boolean unlockMap(String key) {
+ _lock_map.unlock(key);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+ }
+ return true;
+ }
+
+ public boolean tryLockMap(String key) {
+ boolean state = _lock_map.tryLock(key);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+ }
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/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
new file mode 100644
index 0000000..3b8ab41
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -0,0 +1,109 @@
+/*
+ * 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.clustering.hazelcast;
+
+import com.hazelcast.core.IMap;
+import org.apache.ode.bpel.clapi.ClusterLock;
+import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
+
+import java.util.concurrent.TimeUnit;
+
+public class HazelcastInstanceLock extends AbstractInstnaceLockManager implements ClusterLock {
+ private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
+
+ private IMap<String, String> _lock_map;
+
+
+ HazelcastInstanceLock(IMap<String, String> lock_map) {
+ _lock_map = lock_map;
+ }
+
+ private void putIfAbsent(String key, String keyVal) {
+ _lock_map.putIfAbsent(key, keyVal);
+ }
+
+ public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
+ AbstractInstanceLockManager.TimeoutException {
+ if (iid == null) {
+ if(__log.isDebugEnabled()) {
+ __log.debug(" Instance Id null at lock[]");
+ }
+ return;
+ }
+
+ String thrd = Thread.currentThread().toString();
+
+ if(__log.isDebugEnabled()) {
+ __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
+ }
+
+ putIfAbsent(iid.toString(),iid.toString());
+
+ if (!tryLockMap(iid.toString(),time, tu)) {
+
+ if(__log.isDebugEnabled()) {
+ __log.debug(thrd + ": lock(iid=" + iid + ", " +
+ "time=" + time + tu + ")-->TIMEOUT");
+ }
+ throw new AbstractInstanceLockManager.TimeoutException();
+ }
+
+ }
+
+ public void unlock(Long iid) {
+ if (iid == null) {
+ if(__log.isDebugEnabled()) {
+ __log.debug(" unlock, instance id is null");
+ }
+ return;
+ }
+
+ String thrd = Thread.currentThread().toString();
+
+ unlockMap(iid.toString());
+
+ if(__log.isDebugEnabled()) {
+ __log.debug(thrd + " unlock(iid=" + iid + ")");
+ }
+ }
+
+ private boolean lockMap(String key) {
+ _lock_map.lock(key);
+ return true;
+ }
+
+ private boolean unlockMap(String key) {
+ if (_lock_map.get(key) == "true") {
+ _lock_map.unlock(key);
+ _lock_map.replace(key,"false");
+ }
+ return true;
+ }
+
+ private boolean tryLockMap(String key) {
+ boolean state = _lock_map.tryLock(key);
+ return state;
+ }
+
+ private boolean tryLockMap(String key,int time, TimeUnit tu) {
+ boolean state = _lock_map.tryLock(key,time,tu);
+ _lock_map.replace(key,"" +state);
+ return state;
+ }
+}
[03/30] ode git commit: Third commit
Posted by sa...@apache.org.
Third commit
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/764bf642
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/764bf642
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/764bf642
Branch: refs/heads/ODE-563
Commit: 764bf642f5b37f134ca6a4c505a80f7b0d81d1f2
Parents: 79c0b16
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 9 23:29:43 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 9 23:29:43 2015 +0530
----------------------------------------------------------------------
.../org/apache/ode/axis2/deploy/DeploymentPoller.java | 8 ++++----
.../clustering/hazelcast/HazelcastClusterImpl.java | 14 ++++++++++++--
2 files changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/764bf642/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 057c0fb..25d7f20 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -341,15 +341,15 @@ public class DeploymentPoller {
//Implementation of IMap key Lock
public boolean lock(String key) {
if(clusterEnabled) {
- _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+ return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
}
- return true;
+ else return true;
}
public boolean unlock(String key) {
if(clusterEnabled) {
- _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+ return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
}
- return true;
+ else return true;
}
}
http://git-wip-us.apache.org/repos/asf/ode/blob/764bf642/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 2cff4c8..c387b74 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
@@ -69,12 +69,22 @@ public class HazelcastClusterImpl implements HazelcastCluster{
return hostName + ":" + port;
}
- public void lock(String key) {
+ public boolean lock(String key) {
lock_map.lock(key);
+ boolean state = lock_map.isLocked(key);
+ if (__log.isDebugEnabled()) {
+ __log.debug ("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+ }
+ return state;
}
- public void unlock(String key) {
+ public boolean unlock(String key) {
lock_map.unlock(key);
+ boolean state = lock_map.isLocked(key);
+ if (__log.isDebugEnabled()) {
+ __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
+ }
+ return state;
}
class ClusterMemberShipListener implements MembershipListener {