Odd error! "Comparison method violates its general contract!"

Hello everyone,
I got this very strange error on products of Sentinel 3 ‘Comparison method violates its general contract!’. The error appears on a processing graph developed last year. Until now I didn’t encountered this before and really I don’t know what can be responsible for this.
I don’t think that is something wrong with my graph or workflow because it was used before without any problems, but in any case I attach them here. graph_NDSI_abstract.xml (3.9 KB) gpt_S3.bat (1.6 KB)

java.lang.IllegalArgumentException: Comparison method violates its general contract!
        at java.util.TimSort.mergeHi(TimSort.java:899)
        at java.util.TimSort.mergeAt(TimSort.java:516)
        at java.util.TimSort.mergeCollapse(TimSort.java:441)
        at java.util.TimSort.sort(TimSort.java:245)
        at java.util.Arrays.sort(Arrays.java:1512)
        at java.util.ArrayList.sort(ArrayList.java:1462)
        at java.util.Collections.sort(Collections.java:177)
        at org.locationtech.jts.index.strtree.STRtree.createParentBoundables(STRtree.java:123)
        at org.locationtech.jts.index.strtree.AbstractSTRtree.createHigherLevels(AbstractSTRtree.java:157)
        at org.locationtech.jts.index.strtree.AbstractSTRtree.build(AbstractSTRtree.java:107)
        at org.locationtech.jts.index.strtree.AbstractSTRtree.query(AbstractSTRtree.java:243)
        at org.locationtech.jts.index.strtree.STRtree.query(STRtree.java:205)
        at org.locationtech.jts.noding.MCIndexNoder.intersectChains(MCIndexNoder.java:78)
        at org.locationtech.jts.noding.MCIndexNoder.computeNodes(MCIndexNoder.java:68)
        at org.locationtech.jts.noding.FastNodingValidator.checkInteriorIntersections(FastNodingValidator.java:162)
        at org.locationtech.jts.noding.FastNodingValidator.execute(FastNodingValidator.java:147)
        at org.locationtech.jts.noding.FastNodingValidator.checkValid(FastNodingValidator.java:138)
        at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:81)
        at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:46)
        at org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:231)
        at org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:183)
        at org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:86)
        at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75)
        at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37)
        at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1354)
        at org.esa.snap.core.util.FeatureUtils.getClippedGeometry(FeatureUtils.java:260)
        at org.esa.snap.core.util.FeatureUtils.clipCollection(FeatureUtils.java:216)
        at org.esa.snap.core.util.ProductUtils.copyVectorData(ProductUtils.java:1134)
        at org.esa.snap.core.gpf.common.reproject.ReprojectionOp.initialize(ReprojectionOp.java:299)
        at org.esa.snap.core.gpf.internal.OperatorContext.initializeOperator(OperatorContext.java:528)
        at org.esa.snap.core.gpf.internal.OperatorContext.getTargetProduct(OperatorContext.java:298)
        at org.esa.snap.core.gpf.Operator.getTargetProduct(Operator.java:385)
        at org.esa.snap.core.gpf.graph.NodeContext.initTargetProduct(NodeContext.java:77)
        at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:199)
        at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:182)
        at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:182)
        at org.esa.snap.core.gpf.graph.GraphContext.initOutput(GraphContext.java:166)
        at org.esa.snap.core.gpf.graph.GraphContext.<init>(GraphContext.java:85)
        at org.esa.snap.core.gpf.graph.GraphContext.<init>(GraphContext.java:58)
        at org.esa.snap.core.gpf.graph.GraphProcessor.executeGraph(GraphProcessor.java:118)
        at org.esa.snap.core.gpf.main.DefaultCommandLineContext.executeGraph(DefaultCommandLineContext.java:86)
        at org.esa.snap.core.gpf.main.CommandLineTool.executeGraph(CommandLineTool.java:547)
        at org.esa.snap.core.gpf.main.CommandLineTool.runGraph(CommandLineTool.java:391)
        at org.esa.snap.core.gpf.main.CommandLineTool.runGraphOrOperator(CommandLineTool.java:287)
        at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:188)
        at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:121)
        at org.esa.snap.core.gpf.main.GPT.run(GPT.java:60)
        at org.esa.snap.core.gpf.main.GPT.main(GPT.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.esa.snap.runtime.Launcher.lambda$run$0(Launcher.java:55)
        at org.esa.snap.runtime.Engine.runClientCode(Engine.java:189)
        at org.esa.snap.runtime.Launcher.run(Launcher.java:51)
        at org.esa.snap.runtime.Launcher.main(Launcher.java:31)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
        at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)
        at com.install4j.runtime.launcher.WinLauncher.main(WinLauncher.java:25)

Error: Comparison method violates its general contract! ```

Strange.

The interesting part of the log is this:

        at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1354)
        at org.esa.snap.core.util.FeatureUtils.getClippedGeometry(FeatureUtils.java:260)
        at org.esa.snap.core.util.FeatureUtils.clipCollection(FeatureUtils.java:216)
        at org.esa.snap.core.util.ProductUtils.copyVectorData(ProductUtils.java:1134)
        at org.esa.snap.core.gpf.common.reproject.ReprojectionOp.initialize(ReprojectionOp.java:299)

This indicates that while copying the vector data from the source to the target something goes wrong.
Have you recently changed the vector file which you import in your graph? Maybe this is not healthy.
Also, the product could be corrupted. Is this happening only with one product or with all?
Maybe you can try with another vector file and see if it still happens?

2 Likes

@Marpet yes, indeed, the geometry was the cause of all this. I tested with a dummy geometry and everything is running as it should be, also I reacreated my original geometry from 0 and it’s all running. Thanks a lot!

1 Like