From 6cae2831a7584f8b5353d85527e3f2d80b238522 Mon Sep 17 00:00:00 2001 From: Rafael Troilo Date: Wed, 4 Aug 2021 10:26:19 +0200 Subject: [PATCH 01/10] revert lambda to named private class CellIdIterable --- .../heigit/ohsome/oshdb/index/XYGridTree.java | 109 ++++++++++++------ 1 file changed, 72 insertions(+), 37 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index bed0bcc22..375f5c5fb 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -110,45 +110,80 @@ public Iterable bbox2CellIds(final OSHDBBoundingBox bbox) { * @param enlarge {@code true} if the query should include enlarged bboxes */ public Iterable bbox2CellIds(final OSHDBBoundingBox bbox, final boolean enlarge) { - return () -> new Iterator<>() { - private int level = 0; - private Iterator rows = - gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); - private IdRange row = rows.next(); - private long maxId = row.getEnd(); - private long currId = row.getStart() - 1; + return new CellIdIterable(gridMap, bbox, enlarge, maxLevel); + } - @Override - public boolean hasNext() { - if (level < maxLevel) { - return true; - } - if (rows.hasNext()) { - return true; - } - return currId < maxId; - } + private static class CellIdIterable implements Iterable, Serializable { + private final Map gridMap; + private final OSHDBBoundingBox bbox; + private final boolean enlarge; + private final int maxLevel; - @Override - public CellId next() { - if (currId < maxId) { - currId++; - return new CellId(level, currId); - } - if (rows.hasNext()) { - row = rows.next(); - currId = row.getStart(); - maxId = row.getEnd(); - return new CellId(level, currId); - } - level++; - rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); - row = rows.next(); - currId = row.getStart(); - maxId = row.getEnd(); - return new CellId(level, currId); - } - }; + private CellIdIterable(Map gridMap, OSHDBBoundingBox bbox, boolean enlarge, + int maxLevel) { + this.gridMap = gridMap; + this.bbox = bbox; + this.enlarge = enlarge; + this.maxLevel = maxLevel; + } + + @Override + public Iterator iterator() { + return new CellIdIterator(); + } + + private class CellIdIterator implements Iterator, Serializable { + private Iterator rows; + private int level; + private IdRange row; + private long maxId; + private long currId; + + + private CellIdIterator() { + this.level = 0; + this.rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); + this.row = rows.next(); + this.maxId = row.getEnd(); + this.currId = row.getStart() - 1; + } + + @Override + public boolean hasNext() { + if (level < maxLevel) { + return true; + } + if (rows.hasNext()) { + return true; + } + return currId < maxId; + } + + @Override + public CellId next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + if (currId < maxId) { + currId++; + return new CellId(level, currId); + } + + if (rows.hasNext()) { + row = rows.next(); + currId = row.getStart(); + maxId = row.getEnd(); + return new CellId(level, currId); + } + level++; + rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); + row = rows.next(); + currId = row.getStart(); + maxId = row.getEnd(); + return new CellId(level, currId); + } + } } public static class CellIdRange implements Serializable { From 8872ad84dc983cddd09fb6d940135d60a89c171d Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Wed, 4 Aug 2021 12:01:19 +0200 Subject: [PATCH 02/10] make more iterables serializable --- .../main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index 375f5c5fb..a00377e5a 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -45,7 +45,7 @@ public XYGridTree() { * @return An iterator over the cellIds in all zoomlevel */ public Iterable getIds(long longitude, long latitude) { - return () -> new Iterator<>() { + return (Iterable & Serializable) () -> new Iterator<>() { private int level = -1; @Override @@ -240,7 +240,7 @@ public boolean equals(Object obj) { */ public Iterable bbox2CellIdRanges(final OSHDBBoundingBox bbox, final boolean enlarge) { - return () -> new Iterator<>() { + return (Iterable & Serializable) () -> new Iterator<>() { private int level = 0; private Iterator rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); From 5a751ceb527603c0e71974009a4dc832e7fe832f Mon Sep 17 00:00:00 2001 From: Rafael Troilo Date: Wed, 4 Aug 2021 12:25:00 +0200 Subject: [PATCH 03/10] fix wrong type CellId to CellIdRange --- .../src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index a00377e5a..bc0aefb49 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -240,7 +240,7 @@ public boolean equals(Object obj) { */ public Iterable bbox2CellIdRanges(final OSHDBBoundingBox bbox, final boolean enlarge) { - return (Iterable & Serializable) () -> new Iterator<>() { + return (Iterable & Serializable) () -> new Iterator<>() { private int level = 0; private Iterator rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); From 5df703e3a99254f0dd597805b6a8be378d9f5bbe Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Wed, 4 Aug 2021 14:55:14 +0200 Subject: [PATCH 04/10] Update XYGridTree.java --- .../heigit/ohsome/oshdb/index/XYGridTree.java | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index bc0aefb49..ae4deebe1 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -45,23 +45,29 @@ public XYGridTree() { * @return An iterator over the cellIds in all zoomlevel */ public Iterable getIds(long longitude, long latitude) { - return (Iterable & Serializable) () -> new Iterator<>() { - private int level = -1; - - @Override - public boolean hasNext() { - return level < maxLevel; - } + return new Iterable<>() { + @Override + public Iterator iterator() { + Iterator result = new Iterator<>() { + private int level = -1; + + @Override + public boolean hasNext() { + return level < maxLevel; + } - @Override - public CellId next() { - if (!hasNext()) { - throw new NoSuchElementException(); + @Override + public CellId next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + level++; + return new CellId(gridMap.get(level).getLevel(), + gridMap.get(level).getId(longitude, latitude)); } - level++; - return new CellId(gridMap.get(level).getLevel(), - gridMap.get(level).getId(longitude, latitude)); - } + }; + return result; + } }; } @@ -240,7 +246,10 @@ public boolean equals(Object obj) { */ public Iterable bbox2CellIdRanges(final OSHDBBoundingBox bbox, final boolean enlarge) { - return (Iterable & Serializable) () -> new Iterator<>() { + return new Iterable<>() { + @Override + public Iterator iterator() { + return new Iterator<>() { private int level = 0; private Iterator rows = gridMap.get(level).bbox2CellIdRanges(bbox, enlarge).iterator(); @@ -260,6 +269,8 @@ public CellIdRange next() { return CellIdRange.of(new CellId(level, row.getStart()), new CellId(level, row.getEnd())); } + }; + } }; } From 95061c82af7da4085dba1c5f956831b1e19363c2 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Wed, 4 Aug 2021 15:56:22 +0200 Subject: [PATCH 05/10] add @SuppressWarnings("Convert2Lambda") --- .../src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index ae4deebe1..535e7041b 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -44,6 +44,7 @@ public XYGridTree() { * @param latitude Latitude for the given point * @return An iterator over the cellIds in all zoomlevel */ + @SuppressWarnings("Convert2Lambda") public Iterable getIds(long longitude, long latitude) { return new Iterable<>() { @Override @@ -244,6 +245,7 @@ public boolean equals(Object obj) { * @param enlarge {@code true} to include enlarged bboxes * @return List of {@code CellIdRanges} which are covered by the given bbox */ + @SuppressWarnings("Convert2Lambda") public Iterable bbox2CellIdRanges(final OSHDBBoundingBox bbox, final boolean enlarge) { return new Iterable<>() { From 9c05d1ebd74258c146c4d22158745b26ad33e280 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 12 Aug 2021 11:15:00 +0200 Subject: [PATCH 06/10] code style fixes --- .../heigit/ohsome/oshdb/OSHDBBoundingBox.java | 2 +- .../heigit/ohsome/oshdb/index/XYGridTree.java | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/OSHDBBoundingBox.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/OSHDBBoundingBox.java index 1c2cee7f7..2811f8803 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/OSHDBBoundingBox.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/OSHDBBoundingBox.java @@ -25,7 +25,7 @@ public class OSHDBBoundingBox implements OSHDBBoundable, Serializable { /** * Creates an {@code OSHDBBoundingBox} instance from scaled coordinates. - * + * *

This method is mainly for internal usage.
* OSM stores coordinates with a fixed precision of * 7 decimal diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index 535e7041b..f08e09e73 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -47,25 +47,25 @@ public XYGridTree() { @SuppressWarnings("Convert2Lambda") public Iterable getIds(long longitude, long latitude) { return new Iterable<>() { - @Override - public Iterator iterator() { - Iterator result = new Iterator<>() { - private int level = -1; - - @Override - public boolean hasNext() { - return level < maxLevel; - } + @Override + public Iterator iterator() { + Iterator result = new Iterator<>() { + private int level = -1; - @Override - public CellId next() { - if (!hasNext()) { - throw new NoSuchElementException(); - } - level++; - return new CellId(gridMap.get(level).getLevel(), - gridMap.get(level).getId(longitude, latitude)); + @Override + public boolean hasNext() { + return level < maxLevel; + } + + @Override + public CellId next() { + if (!hasNext()) { + throw new NoSuchElementException(); } + level++; + return new CellId(gridMap.get(level).getLevel(), + gridMap.get(level).getId(longitude, latitude)); + } }; return result; } From cf0511281e55c7433f69c0556faf66da2a3fe412 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 12 Aug 2021 11:41:45 +0200 Subject: [PATCH 07/10] this non-static inner class serialization is fine --- .../main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index f08e09e73..66ebb0b82 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -139,6 +139,7 @@ public Iterator iterator() { return new CellIdIterator(); } + @SuppressWarnings("SE_INNER_CLASS") private class CellIdIterator implements Iterator, Serializable { private Iterator rows; private int level; @@ -194,9 +195,6 @@ public CellId next() { } public static class CellIdRange implements Serializable { - - private static final long serialVersionUID = -8704075537597232890L; - private final CellId start; private final CellId end; From 35158bde1c8c613ceea39e4aa80c6438ebc47c13 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 12 Aug 2021 12:21:29 +0200 Subject: [PATCH 08/10] fix some issues found by sonarcloud --- .../java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index 66ebb0b82..5c998c8b0 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -44,12 +44,12 @@ public XYGridTree() { * @param latitude Latitude for the given point * @return An iterator over the cellIds in all zoomlevel */ - @SuppressWarnings("Convert2Lambda") + @SuppressWarnings({"Convert2Lambda", "java:S1604"}) public Iterable getIds(long longitude, long latitude) { return new Iterable<>() { @Override public Iterator iterator() { - Iterator result = new Iterator<>() { + return new Iterator<>() { private int level = -1; @Override @@ -67,7 +67,6 @@ public CellId next() { gridMap.get(level).getId(longitude, latitude)); } }; - return result; } }; } @@ -243,7 +242,7 @@ public boolean equals(Object obj) { * @param enlarge {@code true} to include enlarged bboxes * @return List of {@code CellIdRanges} which are covered by the given bbox */ - @SuppressWarnings("Convert2Lambda") + @SuppressWarnings({"Convert2Lambda", "java:S1604"}) public Iterable bbox2CellIdRanges(final OSHDBBoundingBox bbox, final boolean enlarge) { return new Iterable<>() { From 3952a65f2eea892ee83b3be2a4b1b7f5b1c35373 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 12 Aug 2021 12:34:22 +0200 Subject: [PATCH 09/10] add to changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88e5211e1..6b0532f05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,10 @@ Changelog ## 0.8.0-SNAPSHOT (current master) * fix a bug where contribution-based filters are not applied when used in an and/or operation. ([#409]) +* fix a regression in `0.7.0` which prevents queries from being executed on an ignite cluster backend ([#417]) [#409]: https://github.com/GIScience/oshdb/issues/409 +[#417]: https://github.com/GIScience/oshdb/pull/417 ## 0.7.0 From ae1929c88d065de112443e0ac229d53f40f4d330 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 12 Aug 2021 13:40:05 +0200 Subject: [PATCH 10/10] drop serilizable from inner class --- .../src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java index 5c998c8b0..394d6454a 100644 --- a/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java +++ b/oshdb/src/main/java/org/heigit/ohsome/oshdb/index/XYGridTree.java @@ -139,7 +139,7 @@ public Iterator iterator() { } @SuppressWarnings("SE_INNER_CLASS") - private class CellIdIterator implements Iterator, Serializable { + private class CellIdIterator implements Iterator { private Iterator rows; private int level; private IdRange row;