You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Andrew Medvedev (JIRA)" <ji...@apache.org> on 2018/08/08 21:47:00 UTC
[jira] [Assigned] (IGNITE-9235) Transitivity violation in
GridMergeIndex Comparator
[ https://issues.apache.org/jira/browse/IGNITE-9235?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Medvedev reassigned IGNITE-9235:
---------------------------------------
Assignee: Andrew Medvedev
> Transitivity violation in GridMergeIndex Comparator
> ---------------------------------------------------
>
> Key: IGNITE-9235
> URL: https://issues.apache.org/jira/browse/IGNITE-9235
> Project: Ignite
> Issue Type: Bug
> Affects Versions: 2.5
> Reporter: Andrew Medvedev
> Assignee: Andrew Medvedev
> Priority: Major
>
> Currently comparator in org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex is:
>
> Private final Comparator<RowStream> streamCmp = new Comparator<RowStream>() {
> @Override public int compare(RowStream o1, RowStream o2) {
> // Nulls at the beginning.
> if (o1 == null)
> return -1;
> if (o2 == null)
> return 1;
> return compareRows(o1.get(), o2.get());
> }
> };
> --
>
> This comparator violates transitivity when o1 and o2 are null. Thus we get exception in JDK1.8:
>
>
> {color:#d04437}Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!{color}
> {color:#d04437} at java.util.TimSort.mergeHi(TimSort.java:899){color}
> {color:#d04437} at java.util.TimSort.mergeAt(TimSort.java:516){color}
> {color:#d04437} at java.util.TimSort.mergeCollapse(TimSort.java:441){color}
> {color:#d04437} at java.util.TimSort.sort(TimSort.java:245){color}
> {color:#d04437} at java.util.Arrays.sort(Arrays.java:1438){color}
> {color:#d04437} at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndexSorted$MergeStreamIterator.goFirst(GridMergeIndexSorted.java:248){color}
> {color:#d04437} at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndexSorted$MergeStreamIterator.hasNext(GridMergeIndexSorted.java:270){color}
> {color:#d04437} at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex$FetchingCursor.fetchRows(GridMergeIndex.java:614){color}
> {color:#d04437} at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex$FetchingCursor.next(GridMergeIndex.java:658){color}
> {color:#d04437} at org.h2.index.IndexCursor.next(IndexCursor.java:305){color}
> {color:#d04437} at org.h2.table.TableFilter.next(TableFilter.java:499){color}
> {color:#d04437} at org.h2.command.dml.Select$LazyResultQueryFlat.fetchNextRow(Select.java:1452){color}
> {color:#d04437} at org.h2.result.LazyResult.hasNext(LazyResult.java:79){color}
> {color:#d04437} at org.h2.result.LazyResult.next(LazyResult.java:59){color}
> {color:#d04437} at org.h2.command.dml.Select.queryFlat(Select.java:519){color}
> {color:#d04437} at org.h2.command.dml.Select.queryWithoutCache(Select.java:625){color}
> {color:#d04437} at org.h2.command.dml.Query.queryWithoutCacheLazyCheck(Query.java:114){color}
> {color:#d04437} at org.h2.command.dml.Query.query(Query.java:352){color}
> {color:#d04437} at org.h2.command.dml.Query.query(Query.java:333){color}
> {color:#d04437} at org.h2.command.CommandContainer.query(CommandContainer.java:113){color}
> {color:#d04437} at org.h2.command.Command.executeQuery(Command.java:201){color}
> {color:#d04437} ... 44 more{color}
>
> WA: use -Djava.util.Arrays.useLegacyMergeSort=true
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)