svn commit: r881349 - in /webservices/sandesha/trunk/java/modules: core/src/main/java/org/apache/sandesha2/msgprocessors/ core/src/main/java/org/apache/sandesha2/storage/inmemory/ tests/src/test/java/org/apache/sandesha2/storage/

[email protected] Tue, 17 Nov 2009 16:09:05 -0000
Newsgroups gmane.comp.apache.webservices.fx.devel
Message-ID <[email protected]>
Author: parsonsd
Date: Tue Nov 17 16:09:05 2009
New Revision: 881349

URL: http://svn.apache.org/viewvc?rev=881349&view=rev
Log:
Fix added so that duplicate Seq ID's won't get added to either inmemory or permanent stores.

Modified:
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
    webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/storage/RMSBeanMgrTest.java

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?rev=881349&r1=881348&r2=881349&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java Tue Nov 17 16:09:05 2009
@@ -109,6 +109,17 @@
 			log.debug(message);
 			throw new SandeshaException(message);
 		}
+		
+		//Need to see if the seqID is a dupe of one that already exists
+		//If it is we can't accept the CSR, so will do nothing so that a new CreateSeq msg is sent
+		RMSBean finderBean = new RMSBean ();
+		finderBean.setSequenceID(newOutSequenceId);
+		RMSBean rmsBeanWithDuplicateSeqID = storageManager.getRMSBeanMgr().findUnique(finderBean);
+		if(rmsBeanWithDuplicateSeqID != null){
+			if (log.isDebugEnabled())
+				log.debug("Duplicate SeqID: " + newOutSequenceId + " so we can't accept the CSR, will terminate this seq and reallocate to a new seq");
+			return false;
+		}
 
 		// Check that the create sequence response message proves possession of the correct token
 		MessageContext msgCtx = createSeqResponseRMMsgCtx.getMessageContext();

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java?rev=881349&r1=881348&r2=881349&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java Tue Nov 17 16:09:05 2009
@@ -36,44 +36,26 @@
 	
 	private ConcurrentHashMap<String, String> seqID2csm = new ConcurrentHashMap<String, String>();
 	private ConcurrentHashMap<String, String> intSeqID2csm = new ConcurrentHashMap<String, String>();
-	private ConcurrentHashMap<String, String> inUseSeqIDs = new ConcurrentHashMap<String, String>();
 
 	public InMemoryRMSBeanMgr(InMemoryStorageManager mgr, AbstractContext context) {
 		super(mgr, context, Sandesha2Constants.BeanMAPs.CREATE_SEQUECE);
 	}
 	
-	private boolean isSeqIDUsable(String seqID, String createSeqMsgID, boolean isInsert){
-		boolean isUsable = true;
-		if(seqID != null) {
-			Object o = inUseSeqIDs.putIfAbsent(seqID, createSeqMsgID);
-			
-			if(isInsert && o!= null){
-				isUsable = false;
-			}
-			
-			if(o != null && !o.equals(createSeqMsgID)){
-				isUsable = false;
-			}
-		}
-		return isUsable;
-	}
 
 	public boolean insert(RMSBean bean) throws SandeshaStorageException {
 		boolean res = false;
 		lock.lock();
-		if(isSeqIDUsable(bean.getSequenceID(), bean.getCreateSeqMsgID(), true)){
-			if(intSeqID2csm.get(bean.getInternalSequenceID())==null){
-				res = super.insert(bean.getCreateSeqMsgID(), bean);
-				if(res){
-					if(bean.getInternalSequenceID()!=null){
-						intSeqID2csm.put(bean.getInternalSequenceID(), bean.getCreateSeqMsgID());
-					}
-					if(bean.getSequenceID()!=null){
-						seqID2csm.put(bean.getSequenceID(), bean.getCreateSeqMsgID());
-					}
+		if(intSeqID2csm.get(bean.getInternalSequenceID())==null){
+			res = super.insert(bean.getCreateSeqMsgID(), bean);
+			if(res){
+				if(bean.getInternalSequenceID()!=null){
+					intSeqID2csm.put(bean.getInternalSequenceID(), bean.getCreateSeqMsgID());
+				}
+				if(bean.getSequenceID()!=null){
+					seqID2csm.put(bean.getSequenceID(), bean.getCreateSeqMsgID());
 				}
-			}			
-		} 
+			}
+		}			
 
 		lock.unlock();
 
@@ -85,7 +67,6 @@
 		if(removed!=null){
 			seqID2csm.remove(removed.getSequenceID());
 			intSeqID2csm.remove(removed.getInternalSequenceID());			
-			inUseSeqIDs.remove(removed.getSequenceID());
 		}
 		return removed!=null;
 
@@ -98,15 +79,13 @@
 	public boolean update(RMSBean bean) throws SandeshaStorageException {
 		boolean result = false;
 		
-		if(isSeqIDUsable(bean.getSequenceID(), bean.getCreateSeqMsgID(), false)){
-			result = super.update(bean.getCreateSeqMsgID(), bean);
-			if(bean.getInternalSequenceID()!=null){
-				intSeqID2csm.put(bean.getInternalSequenceID(), bean.getCreateSeqMsgID());
-			}
-			if(bean.getSequenceID()!=null){
-				seqID2csm.put(bean.getSequenceID(), bean.getCreateSeqMsgID());
-			}
-		} 
+		result = super.update(bean.getCreateSeqMsgID(), bean);
+		if(bean.getInternalSequenceID()!=null){
+			intSeqID2csm.put(bean.getInternalSequenceID(), bean.getCreateSeqMsgID());
+		}
+		if(bean.getSequenceID()!=null){
+			seqID2csm.put(bean.getSequenceID(), bean.getCreateSeqMsgID());
+		}
 
 		return result;		
 	}

Modified: webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/storage/RMSBeanMgrTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/storage/RMSBeanMgrTest.java?rev=881349&r1=881348&r2=881349&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/storage/RMSBeanMgrTest.java (original)
+++ webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/storage/RMSBeanMgrTest.java Tue Nov 17 16:09:05 2009
@@ -77,16 +77,7 @@
     	createSeqBean1.setCreateSeqMsgID("CreateSeqMsgId1");
     	createSeqBean1.setSequenceID("SeqId1");
     	
-    	RMSBean createSeqBean2 = new RMSBean ();
-    	createSeqBean2.setInternalSequenceID("TmpSeqId2");
-    	createSeqBean2.setCreateSeqMsgID("CreateSeqMsgId2");
-    	createSeqBean2.setSequenceID("SeqId1");
-    	
     	assertTrue(mgr.insert(createSeqBean1));
-        
-        //This RMSBean won't get added 
-        //as we protect against adding two RMSBeans with identical Seq ID's
-        assertFalse(mgr.insert(createSeqBean2));
 
         RMSBean target = new RMSBean();
         target.setSequenceID("SeqId1");