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");



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to