You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ga...@apache.org on 2007/05/09 14:29:31 UTC

svn commit: r536504 - in /webservices/sandesha/trunk/java: config/ modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ modules/core/src/main/java/org/apache/sandesha2/workers/

Author: gatfora
Date: Wed May  9 05:29:30 2007
New Revision: 536504

URL: http://svn.apache.org/viewvc?view=rev&rev=536504
Log:
Fix a couple of deadlocks.  One between Sender and SenderWorker with ordering of RMS and RMDBeans, the other fixes a problem with InvokerWorker and SenderWorker and ordering of RMS and RMDBeans.

Modified:
    webservices/sandesha/trunk/java/config/log4j.properties
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java

Modified: webservices/sandesha/trunk/java/config/log4j.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/config/log4j.properties?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/config/log4j.properties (original)
+++ webservices/sandesha/trunk/java/config/log4j.properties Wed May  9 05:29:30 2007
@@ -16,6 +16,7 @@
 log4j.appender.LOGFILE=org.apache.log4j.FileAppender
 log4j.appender.LOGFILE.File=sandesha2.log
 log4j.appender.LOGFILE.Append=true
-log4j.appender.LOGFILE.Threshold=DEBUG
+# log4j.appender.LOGFILE.Threshold=DEBUG
+log4j.appender.LOGFILE.Threshold=INFO
 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
 log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Wed May  9 05:29:30 2007
@@ -128,18 +128,6 @@
 			}
 
 			internalSequenceId = SandeshaUtil.getOutgoingSideInternalSequenceID(inboundSequence);
-
-			// Deciding whether this is the last message. We assume it is if it relates to
-			// a message which arrived with the LastMessage flag on it.
-			RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);			
-			// Get the last in message
-			String lastRequestId = rmdBean.getLastInMessageId();
-			RelatesTo relatesTo = msgContext.getRelatesTo();
-			if(relatesTo != null && lastRequestId != null &&
-					lastRequestId.equals(relatesTo.getValue())) {
-				lastMessage = true;
-			}
-
 		} else {
 			// set the internal sequence id for the client side.
 			EndpointReference toEPR = msgContext.getTo();
@@ -259,7 +247,19 @@
 		} else { // This is the first message (systemMessageNumber = -1)
 			messageNumber = 1;
 		}
-		
+
+		if (serverSide) {
+			// Deciding whether this is the last message. We assume it is if it relates to
+			// a message which arrived with the LastMessage flag on it.
+			RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);			
+			// Get the last in message
+			String lastRequestId = rmdBean.getLastInMessageId();
+			RelatesTo relatesTo = msgContext.getRelatesTo();
+			if(relatesTo != null && lastRequestId != null &&
+					lastRequestId.equals(relatesTo.getValue())) {
+				lastMessage = true;
+			}
+		}
 		if (lastMessage) {
 			rmsBean.setLastOutMessage(messageNumber);
 			// Update the rmsBean

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Wed May  9 05:29:30 2007
@@ -163,7 +163,7 @@
 		//This will allow Sandesha2 to consider both of following senarios equally.
 		//  1. A message being sent by the Sender thread.
 		//  2. A message being sent as a reply to an MakeConnection.
-		SenderWorker worker = new SenderWorker (pollMessage.getConfigurationContext(), matchingMessage);
+		SenderWorker worker = new SenderWorker (pollMessage.getConfigurationContext(), matchingMessage, returnRMMsg.getRMSpecVersion());
 		worker.setMessage(returnRMMsg);
 		worker.run();
 		

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java Wed May  9 05:29:30 2007
@@ -93,6 +93,7 @@
 
 			transaction = storageManager.getTransaction();
 
+			String rmVersion = null;
 			// Check that the sequence is still valid
 			boolean found = false;
 			if(entry.isRmSource()) {
@@ -106,13 +107,18 @@
 						SequenceManager.finalizeTimedOutSequence(rms.getInternalSequenceID(), null, storageManager);
 					else
 						found = true;
+					rmVersion = rms.getRMVersion();
 				}
+				
 			} else {
 				RMDBean matcher = new RMDBean();
 				matcher.setSequenceID(sequenceId);
 				matcher.setTerminated(false);
 				RMDBean rmd = storageManager.getRMDBeanMgr().findUnique(matcher);
-				if(rmd != null) found = true;
+				if(rmd != null) {
+					found = true;
+					rmVersion = rmd.getRMVersion();
+				}
 			}
 			if (!found) {
 				stopThreadForSequence(sequenceId, entry.isRmSource());
@@ -155,7 +161,7 @@
 			}
 
 			// start a worker which will work on this messages.
-			SenderWorker worker = new SenderWorker(context, senderBean);
+			SenderWorker worker = new SenderWorker(context, senderBean, rmVersion);
 			worker.setLock(getWorkerLock());
 			worker.setWorkId(workId);
 			threadPool.execute(worker);

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java Wed May  9 05:29:30 2007
@@ -58,10 +58,12 @@
 	private ConfigurationContext configurationContext = null;
 	private SenderBean senderBean = null;
 	private RMMsgContext messageToSend = null;
+	private String rmVersion = null;
 	
-	public SenderWorker (ConfigurationContext configurationContext, SenderBean senderBean) {
+	public SenderWorker (ConfigurationContext configurationContext, SenderBean senderBean, String rmVersion) {
 		this.configurationContext = configurationContext;
 		this.senderBean = senderBean;
+		this.rmVersion = rmVersion; 
 	}
 	
 	public void setMessage(RMMsgContext msg) {
@@ -385,8 +387,7 @@
 		Identifier id = null;
 
 		if(senderBean.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
-			RMSequenceBean bean = SandeshaUtil.getRMSBeanFromSequenceId(storageManager, senderBean.getSequenceID());
-			String namespace = SpecSpecificConstants.getRMNamespaceValue(bean.getRMVersion());
+			String namespace = SpecSpecificConstants.getRMNamespaceValue(rmVersion);
 			Sequence sequence = (Sequence) rmMsgContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
 			if(sequence == null) {
 				sequence = new Sequence(namespace);
@@ -396,7 +397,7 @@
 				sequence.setMessageNumber(msgNumber);
 
 				if(senderBean.isLastMessage() &&
-				   SpecSpecificConstants.isLastMessageIndicatorRequired(bean.getRMVersion())) {
+				   SpecSpecificConstants.isLastMessageIndicatorRequired(rmVersion)) {
 					sequence.setLastMessage(new LastMessage(namespace));
 				}
 				



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org