summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2015-02-27 14:39:29 +0000
committerRobert Godfrey <rgodfrey@apache.org>2015-02-27 14:39:29 +0000
commitc23642b424abf4d523f26a5f3a7425510f8f18f5 (patch)
treed40840496bf888f5621f75344a76196eface0ad7
parent935492a896a91c6166825e37287942ea8572cb91 (diff)
downloadqpid-python-c23642b424abf4d523f26a5f3a7425510f8f18f5.tar.gz
QPID-6419 : Merged 1662683 onto 0.32 branch
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.32@1662688 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java22
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/LastValueQueueListTest.java5
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java1
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java2
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java1
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java1
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java3
7 files changed, 28 insertions, 7 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
index 452c5ff14f..917c951b6d 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
@@ -371,11 +371,16 @@ public abstract class QueueEntryImpl implements QueueEntry
}
}
- private void dequeue()
+ private boolean dequeue()
{
EntryState state = _state;
- if((state.getState() == State.ACQUIRED) &&_stateUpdater.compareAndSet(this, state, DEQUEUED_STATE))
+ while(state.getState() == State.ACQUIRED && !_stateUpdater.compareAndSet(this, state, DEQUEUED_STATE))
+ {
+ state = _state;
+ }
+
+ if(state.getState() == State.ACQUIRED)
{
if (state instanceof ConsumerAcquiredState || state instanceof LockedAcquiredState)
{
@@ -387,7 +392,11 @@ public abstract class QueueEntryImpl implements QueueEntry
{
notifyStateChange(state.getState() , QueueEntry.State.DEQUEUED);
}
-
+ return true;
+ }
+ else
+ {
+ return false;
}
}
@@ -420,9 +429,10 @@ public abstract class QueueEntryImpl implements QueueEntry
public void delete()
{
- dequeue();
-
- dispose();
+ if(dequeue())
+ {
+ dispose();
+ }
}
public int routeToAlternate(final Action<? super MessageInstance> action, ServerTransaction txn)
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/LastValueQueueListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/LastValueQueueListTest.java
index 799fc71d74..2427470707 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/LastValueQueueListTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/LastValueQueueListTest.java
@@ -93,6 +93,7 @@ public class LastValueQueueListTest extends TestCase
ServerMessage message = createTestServerMessage(null);
QueueEntry addedEntry = _list.add(message);
+ addedEntry.acquire();
addedEntry.delete();
int numberOfEntries = countEntries(_list);
@@ -113,6 +114,7 @@ public class LastValueQueueListTest extends TestCase
ServerMessage message = createTestServerMessage(TEST_KEY_VALUE);
QueueEntry addedEntry = _list.add(message);
+ addedEntry.acquire();
addedEntry.delete();
int numberOfEntries = countEntries(_list);
@@ -173,6 +175,7 @@ public class LastValueQueueListTest extends TestCase
assertEquals(1, countEntries(_list));
assertEquals(1, _list.getLatestValuesMap().size());
+ addedEntry.acquire();
addedEntry.delete();
assertEquals(0, countEntries(_list));
@@ -193,7 +196,9 @@ public class LastValueQueueListTest extends TestCase
assertEquals(2, countEntries(_list));
assertEquals(2, _list.getLatestValuesMap().size());
+ addedEntry1.acquire();
addedEntry1.delete();
+ addedEntry2.acquire();
addedEntry2.delete();
assertEquals(0, countEntries(_list));
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
index 40b6c1bebd..2101a2297f 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
@@ -113,6 +113,7 @@ public abstract class QueueEntryImplTestBase extends TestCase
*/
private void delete()
{
+ _queueEntry.acquire();
_queueEntry.delete();
assertTrue("Queue entry should be in DELETED state after invoking of delete method",
_queueEntry.isDeleted());
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java
index a0ab7cd454..7f5ea06dcf 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryListTestBase.java
@@ -196,6 +196,7 @@ public abstract class QueueEntryListTestBase extends TestCase
final QueueEntry head = getTestList().getHead();
final QueueEntry first = getTestList().next(head);
+ first.acquire();
first.delete();
final QueueEntry second = getTestList().next(head);
@@ -226,6 +227,7 @@ public abstract class QueueEntryListTestBase extends TestCase
assertNull(list.next(queueEntry2));
//'delete' the 2nd QueueEntry
+ queueEntry2.acquire();
queueEntry2.delete();
assertTrue("Deleting node should have succeeded", queueEntry2.isDeleted());
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java
index a2d314d629..a27db98400 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryImplTest.java
@@ -109,6 +109,7 @@ public class SimpleQueueEntryImplTest extends QueueEntryImplTestBase
public void testTraverseWithDeletedEntries()
{
// Delete 2nd queue entry
+ _queueEntry2.acquire();
_queueEntry2.delete();
assertTrue(_queueEntry2.isDeleted());
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java
index d9a176c688..f88ce5f5f9 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SortedQueueEntryTest.java
@@ -137,6 +137,7 @@ public class SortedQueueEntryTest extends QueueEntryImplTestBase
public void testTraverseWithDeletedEntries()
{
// Delete 2nd queue entry
+ _queueEntry3.acquire();
_queueEntry3.delete();
assertTrue(_queueEntry3.isDeleted());
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java
index 28d22a5a44..73d14a843f 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueEntryListTest.java
@@ -155,7 +155,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase
public void testScavenge() throws Exception
{
- OrderedQueueEntryList sqel = new StandardQueueEntryList(null);
+ OrderedQueueEntryList sqel = new StandardQueueEntryList(mock(StandardQueueImpl.class));
ConcurrentMap<Integer,QueueEntry> entriesMap = new ConcurrentHashMap<Integer,QueueEntry>();
@@ -215,6 +215,7 @@ public class StandardQueueEntryListTest extends QueueEntryListTestBase
{
QueueEntry entry = entriesMap.remove(pos);
boolean wasDeleted = entry.isDeleted();
+ entry.acquire();
entry.delete();
return entry.isDeleted() && !wasDeleted;
}