From 79576f33d74ce2ce449a1cef902970b417d0cb86 Mon Sep 17 00:00:00 2001 From: Michael Barry Date: Sat, 19 Mar 2022 05:46:03 -0400 Subject: [PATCH] =?UTF-8?q?Node=20location=20cache:=20off-heap=20storage?= =?UTF-8?q?=20and=20=E2=80=9Carray=E2=80=9D=20implementation=20that=20supp?= =?UTF-8?q?orts=20parallel=20inserts=20(#131)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add --nodemap-type=array option for 2-3x faster osm pass 1 imports * Add --nodemap-storage=direct option to experiment with direct (off-heap) memory usage * Extract ResourceUsage and OsmPhaser utilities --- .../basemap/layers/TransportationName.java | 20 +++++++++++-------- .../planetiler/basemap/layers/Waterway.java | 4 +++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/onthegomap/planetiler/basemap/layers/TransportationName.java b/src/main/java/com/onthegomap/planetiler/basemap/layers/TransportationName.java index efe4493..c616cdd 100644 --- a/src/main/java/com/onthegomap/planetiler/basemap/layers/TransportationName.java +++ b/src/main/java/com/onthegomap/planetiler/basemap/layers/TransportationName.java @@ -151,7 +151,9 @@ public class TransportationName implements @Override public void preprocessOsmNode(OsmElement.Node node) { if (node.hasTag("highway", "motorway_junction")) { - motorwayJunctionHighwayClasses.put(node.id(), HighwayClass.UNKNOWN.value); + synchronized (motorwayJunctionHighwayClasses) { + motorwayJunctionHighwayClasses.put(node.id(), HighwayClass.UNKNOWN.value); + } } } @@ -162,13 +164,15 @@ public class TransportationName implements HighwayClass cls = HighwayClass.from(highway); if (cls != HighwayClass.UNKNOWN) { LongArrayList nodes = way.nodes(); - for (int i = 0; i < nodes.size(); i++) { - long node = nodes.get(i); - if (motorwayJunctionHighwayClasses.containsKey(node)) { - byte oldValue = motorwayJunctionHighwayClasses.get(node); - byte newValue = cls.value; - if (newValue > oldValue) { - motorwayJunctionHighwayClasses.put(node, newValue); + synchronized (motorwayJunctionHighwayClasses) { + for (int i = 0; i < nodes.size(); i++) { + long node = nodes.get(i); + if (motorwayJunctionHighwayClasses.containsKey(node)) { + byte oldValue = motorwayJunctionHighwayClasses.get(node); + byte newValue = cls.value; + if (newValue > oldValue) { + motorwayJunctionHighwayClasses.put(node, newValue); + } } } } diff --git a/src/main/java/com/onthegomap/planetiler/basemap/layers/Waterway.java b/src/main/java/com/onthegomap/planetiler/basemap/layers/Waterway.java index a768696..c91fcb6 100644 --- a/src/main/java/com/onthegomap/planetiler/basemap/layers/Waterway.java +++ b/src/main/java/com/onthegomap/planetiler/basemap/layers/Waterway.java @@ -145,7 +145,9 @@ public class Waterway implements @Override public List preprocessOsmRelation(OsmElement.Relation relation) { if (relation.hasTag("waterway", "river") && !Utils.nullOrEmpty(relation.getString("name"))) { - riverRelationLengths.put(relation.id(), new AtomicDouble()); + synchronized (riverRelationLengths) { + riverRelationLengths.put(relation.id(), new AtomicDouble()); + } return List.of(new WaterwayRelation(relation.id(), LanguageUtils.getNames(relation.tags(), translations))); } return null;