This is an automated email from the ASF dual-hosted git repository.
benedict pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git
The following commit(s) were added to refs/heads/trunk by this push:
new 52d50a18 Fix test failures
52d50a18 is described below
commit 52d50a1883b739300b97177a8cc579519d029d39
Author: Benedict Elliott Smith <[email protected]>
AuthorDate: Tue Aug 13 21:13:00 2024 +0100
Fix test failures
---
.../src/main/java/accord/topology/Topology.java | 11 +++++---
.../java/accord/utils/CheckpointIntervalArray.java | 30 ----------------------
.../java/accord/utils/SearchableRangeList.java | 2 +-
.../test/java/accord/primitives/RangeDepsTest.java | 3 ++-
.../test/java/accord/utils/ExtendedAssertions.java | 6 ++++-
5 files changed, 16 insertions(+), 36 deletions(-)
diff --git a/accord-core/src/main/java/accord/topology/Topology.java
b/accord-core/src/main/java/accord/topology/Topology.java
index 56fb0a10..d442d2d3 100644
--- a/accord-core/src/main/java/accord/topology/Topology.java
+++ b/accord-core/src/main/java/accord/topology/Topology.java
@@ -45,6 +45,7 @@ import accord.utils.IndexedConsumer;
import accord.utils.IndexedIntFunction;
import accord.utils.IndexedTriFunction;
import accord.utils.SimpleBitSet;
+import accord.utils.SortedArrays;
import accord.utils.SortedArrays.SortedArrayList;
import accord.utils.Utils;
import org.agrona.collections.Int2ObjectHashMap;
@@ -267,6 +268,7 @@ public class Topology
{
Ranges rangeSubset = ranges.select(newSubset);
SimpleBitSet nodes = new SimpleBitSet(nodeIds.size());
+ Int2ObjectHashMap<NodeInfo> nodeLookup = new
Int2ObjectHashMap<>(nodes.size(), 0.8f);
for (int shardIndex : newSubset)
{
Shard shard = shards[shardIndex];
@@ -288,15 +290,18 @@ public class Topology
Topology forSubset(int[] newSubset, Collection<Id> nodes)
{
Ranges rangeSubset = ranges.select(newSubset);
- Id[] nodeIds = nodes.toArray(new Id[nodes.size()]);
- Arrays.sort(nodeIds);
+ Id[] nodeIds = new Id[nodes.size()];
Int2ObjectHashMap<NodeInfo> nodeLookup = new
Int2ObjectHashMap<>(nodes.size(), 0.8f);
for (Id id : nodes)
{
NodeInfo info = this.nodeLookup.get(id.id).forSubset(newSubset);
if (info.ranges.isEmpty()) continue;
+ nodeIds[nodeLookup.size()] = id;
nodeLookup.put(id.id, info);
}
+ if (nodeLookup.size() != nodeIds.length)
+ nodeIds = Arrays.copyOf(nodeIds, nodeLookup.size());
+ Arrays.sort(nodeIds);
return new Topology(global(), epoch, shards, ranges, new
SortedArrayList<>(nodeIds), nodeLookup, rangeSubset, newSubset);
}
@@ -515,7 +520,7 @@ public class Topology
public List<Shard> shards()
{
- return new AbstractList<Shard>()
+ return new AbstractList<>()
{
@Override
public Shard get(int i)
diff --git
a/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
b/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
index df9ffe1a..8979ec2e 100644
--- a/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
+++ b/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
@@ -128,36 +128,6 @@ public class CheckpointIntervalArray<Ranges, Range, Key>
return forEach(start, end, floor, startKey, 0,
forEachScanOrCheckpoint, forEachRange, p1, p2, p3, p4, minIndex);
}
- public <P1, P2, P3, P4> int forEachKey(Key key, IndexedQuadConsumer<P1,
P2, P3, P4> forEachScanOrCheckpoint, IndexedRangeQuadConsumer<P1, P2, P3, P4>
forEachRange, P1 p1, P2 p2, P3 p3, P4 p4, int minIndex)
- {
- if (accessor.size(ranges) == 0 || minIndex == accessor.size(ranges))
- return minIndex;
-
- var c = accessor.keyComparator();
- int end = accessor.binarySearch(ranges, minIndex,
accessor.size(ranges), key, (a, b) -> c.compare(a, accessor.start(b)), FLOOR);
- if (end < 0) end = -1 - end;
- else ++end;
- if (end <= minIndex) return minIndex;
-
- int floor = accessor.binarySearch(ranges, minIndex,
accessor.size(ranges), key, (a, b) -> c.compare(a, accessor.start(b)), CEIL);
- int start = floor;
- if (floor < 0)
- {
- // if there's no precise match on start, step backwards;
- // if this range does not overlap us, step forwards again for start
- // but retain the floor index for performing scan and checkpoint
searches from
- // as this contains all ranges that might overlap us (whereas
those that end
- // after us but before the next range's start would be missed by
the next range index)
- start = floor = -2 - floor;
- if (start < 0)
- start = floor = 0;
- else if (c.compare(accessor.end(ranges, start), key) <= 0)
- ++start;
- }
-
- return forEach(start, end, floor, key, 0, forEachScanOrCheckpoint,
forEachRange, p1, p2, p3, p4, minIndex);
- }
-
@Inline
protected <P1, P2, P3, P4> int forEach(int start, int end, int floor, Key
startBound, int cmpStartBoundWithEnd,
IndexedQuadConsumer<P1, P2, P3, P4>
forEachScanOrCheckpoint, IndexedRangeQuadConsumer<P1, P2, P3, P4> forEachRange,
diff --git a/accord-core/src/main/java/accord/utils/SearchableRangeList.java
b/accord-core/src/main/java/accord/utils/SearchableRangeList.java
index 65e4465f..5e677e82 100644
--- a/accord-core/src/main/java/accord/utils/SearchableRangeList.java
+++ b/accord-core/src/main/java/accord/utils/SearchableRangeList.java
@@ -86,7 +86,7 @@ public class SearchableRangeList extends
CheckpointIntervalArray<Range[], Range,
}
@Inline
- public <P1, P2, P3, P4> int forEach(RoutableKey key,
IndexedQuadConsumer<P1, P2, P3, P4> forEachScanOrCheckpoint,
IndexedRangeQuadConsumer<P1, P2, P3, P4> forEachRange, P1 p1, P2 p2, P3 p3, P4
p4, int minIndex)
+ public <P1, P2, P3, P4> int forEachKey(RoutableKey key,
IndexedQuadConsumer<P1, P2, P3, P4> forEachScanOrCheckpoint,
IndexedRangeQuadConsumer<P1, P2, P3, P4> forEachRange, P1 p1, P2 p2, P3 p3, P4
p4, int minIndex)
{
if (ranges.length == 0 || minIndex == ranges.length)
return minIndex;
diff --git a/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
b/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
index 5d6f0fdb..65b19afa 100644
--- a/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
+++ b/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
@@ -33,6 +33,7 @@ import org.junit.jupiter.api.Test;
import accord.impl.IntKey;
import accord.local.Node;
import accord.primitives.Routable.Domain;
+import accord.utils.RandomTestRunner;
import static accord.primitives.Txn.Kind.Write;
import static org.assertj.core.api.Assertions.assertThat;
@@ -247,7 +248,7 @@ public class RangeDepsTest
for (int i = 0 ; i < 1000 ; ++i)
{
long seed = random.nextLong();
-// long seed = -5637243003494330136L;
+// long seed = 1953755836248097851L;
System.out.println("Seed: " + seed);
random.setSeed(seed);
generate(random, new GenerateRanges(1000, 0.01f, 0.3f, 0.1f, 1f),
100, 1000)
diff --git a/accord-core/src/test/java/accord/utils/ExtendedAssertions.java
b/accord-core/src/test/java/accord/utils/ExtendedAssertions.java
index 0e4f8543..6651e758 100644
--- a/accord-core/src/test/java/accord/utils/ExtendedAssertions.java
+++ b/accord-core/src/test/java/accord/utils/ExtendedAssertions.java
@@ -30,6 +30,7 @@ import accord.primitives.Unseekables;
import accord.topology.Shard;
import accord.topology.Topologies;
import accord.topology.Topology;
+import accord.utils.SortedArrays.SortedArrayList;
import org.agrona.collections.LongArrayList;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.Assertions;
@@ -42,6 +43,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
@@ -122,9 +124,11 @@ public class ExtendedAssertions
return myself;
}
- public TopologyAssert isHostsEqualTo(List<Node.Id> nodes)
+ public TopologyAssert isHostsEqualTo(SortedArrayList<Node.Id> nodes)
{
isNotNull();
+// Collection<Node.Id> actualNodes = actual.nodes();
+// if (!(actualNodes instanceof SortedArrayList)) actualNodes =
SortedArrayList.copyUnsorted(nodes, Node.Id[]::new);
objects.assertEqual(info, actual.nodes(), nodes);
return myself;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]