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]