Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 327165

Summary: No way to install subclipse when using jdk 1.7.0 beta
Product: [Eclipse Project] Equinox Reporter: Rémi Forax <forax>
Component: p2Assignee: P2 Inbox <equinox.p2-inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: major    
Priority: P3 CC: aniefer
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Rémi Forax CLA 2010-10-06 18:11:56 EDT
Build Identifier: I20100921-1024

The jdk 1.7.0 comes with a new sort implementation of arrays named TimSort.
This implementation know checks if the Comparator provided respect
the constract between compare and equals.

It seems the comparator used by p2 to select mirrors breaks that contract
so an IllegalArgumentException is thrown.

Thus there is no way to install a new software if jdk1.7.0 is used.
 
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:466)
at org.eclipse.equinox.internal.p2.artifact.repository.MirrorSelector.hasValidMirror(MirrorSelector.java:317)
at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:517)
at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:576)
at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:248)
at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:223)
at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:179)
at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:115)
at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:565)
at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:63)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Reproducible: Always

Steps to Reproduce:
1. Donwnload latest jdk 1.7.0 binary
2. Download Eclipse 3.7M2a
3. try to install subclipse from:
   http://subclipse.tigris.org/update_1.4.x
Comment 1 Andrew Niefer CLA 2010-10-07 10:39:12 EDT
This is a threading problem rather than a problem with equals/compare

*** This bug has been marked as a duplicate of bug 317785 ***