aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfo40225 <fo40225@hotmail.com>2024-11-15 09:26:50 +0800
committerGitHub <noreply@github.com>2024-11-14 17:26:50 -0800
commit008ac38ebcc4b3e370b299cf14fe894d5361bb04 (patch)
tree99fc981704601f0ad13435567350b77e6b731d5e
parenta5fe6e21bce464017fde036160e986d4c3bb81db (diff)
downloadseaweedfs-008ac38ebcc4b3e370b299cf14fe894d5361bb04.tar.xz
seaweedfs-008ac38ebcc4b3e370b299cf14fe894d5361bb04.zip
fix java.lang.IllegalArgumentException: Comparison method violates its general contract! (#6239)
-rw-r--r--other/java/client/src/main/java/seaweedfs/client/ReadChunks.java21
1 files changed, 12 insertions, 9 deletions
diff --git a/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java b/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java
index e563c0ccc..18826dd48 100644
--- a/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java
+++ b/other/java/client/src/main/java/seaweedfs/client/ReadChunks.java
@@ -14,20 +14,23 @@ public class ReadChunks {
points.add(new Point(chunk.getOffset(), chunk, true));
points.add(new Point(chunk.getOffset() + chunk.getSize(), chunk, false));
}
+
Collections.sort(points, new Comparator<Point>() {
@Override
public int compare(Point a, Point b) {
- int x = (int) (a.x - b.x);
- if (a.x != b.x) {
- return (int) (a.x - b.x);
- }
- if (a.ts != b.ts) {
- return (int) (a.ts - b.ts);
+ int xComparison = Long.compare(a.x, b.x);
+ if (xComparison != 0) {
+ return xComparison;
}
- if (!a.isStart) {
- return -1;
+
+ // If x values are equal, compare ts
+ int tsComparison = Long.compare(a.ts, b.ts);
+ if (tsComparison != 0) {
+ return tsComparison;
}
- return 1;
+
+ // If both x and ts are equal, prioritize start points
+ return Boolean.compare(b.isStart, a.isStart); // b.isStart first to prioritize starts
}
});