You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2018/09/20 09:40:45 UTC
activemq git commit: AMQ-7055 - Optimization on SequenceSet to
prevent iterating through the whole set when a value bigger than the last
value is added
Repository: activemq
Updated Branches:
refs/heads/master 2f5e5efec -> 8f88dcda0
AMQ-7055 - Optimization on SequenceSet to prevent iterating through the whole set when a value bigger than the last value is added
Signed-off-by: gtully <ga...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/8f88dcda
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/8f88dcda
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/8f88dcda
Branch: refs/heads/master
Commit: 8f88dcda09760df3aba3306f49a3311fb22a654f
Parents: 2f5e5ef
Author: Alan Protasio <al...@gmail.com>
Authored: Wed Sep 19 12:20:59 2018 -0700
Committer: gtully <ga...@gmail.com>
Committed: Thu Sep 20 10:38:44 2018 +0100
----------------------------------------------------------------------
.../store/kahadb/disk/util/Sequence.java | 4 +++
.../store/kahadb/disk/util/SequenceSet.java | 7 +++++
.../store/kahadb/disk/util/SequenceSetTest.java | 31 ++++++++++++++++++++
3 files changed, 42 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/8f88dcda/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/Sequence.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/Sequence.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/Sequence.java
index f52931b..25e594b 100644
--- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/Sequence.java
+++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/Sequence.java
@@ -38,6 +38,10 @@ public class Sequence extends LinkedNode<Sequence> {
return last + 1 == value;
}
+ public boolean isBiggerButNotAdjacentToLast(long value) {
+ return last + 1 < value;
+ }
+
public boolean isAdjacentToFirst(long value) {
return first - 1 == value;
}
http://git-wip-us.apache.org/repos/asf/activemq/blob/8f88dcda/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/SequenceSet.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/SequenceSet.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/SequenceSet.java
index 2946a22..fac831b 100644
--- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/SequenceSet.java
+++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/util/SequenceSet.java
@@ -114,6 +114,13 @@ public class SequenceSet extends LinkedNodeList<Sequence> implements Iterable<Lo
return true;
}
+ // check if the value is greater than the bigger sequence value and if it's not adjacent to it
+ // in this case, we are sure that the value should be add to the tail of the sequence.
+ if (sequence.isBiggerButNotAdjacentToLast(value)) {
+ addLast(new Sequence(value));
+ return true;
+ }
+
sequence = getHead();
while (sequence != null) {
http://git-wip-us.apache.org/repos/asf/activemq/blob/8f88dcda/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java
index 272077a..a25b4e7 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java
@@ -86,6 +86,37 @@ public class SequenceSetTest {
}
@Test
+ public void testAddValuesToTail() {
+ SequenceSet set = new SequenceSet();
+ set.add(new Sequence(0, 10));
+ set.add(new Sequence(21, 42));
+ set.add(new Sequence(142, 512));
+
+ set.add(513);
+
+ for (int i = 600; i < 650; i++) {
+ set.add(i);
+ }
+
+ for (int i = 0; i < 10; i++) {
+ set.add(i * 100);
+ }
+
+ assertTrue(set.contains(0));
+ assertTrue(set.contains(25));
+
+ assertTrue(set.contains(513));
+ assertTrue(!set.contains(514));
+ assertFalse(set.contains(599));
+ assertTrue(set.contains(625));
+ assertFalse(set.contains(651));
+
+ for (int i = 0; i < 10; i++) {
+ assertTrue(set.contains(i * 100));
+ }
+ }
+
+ @Test
public void testRemove() {
SequenceSet set = new SequenceSet();
set.add(new Sequence(0, 100));