Osmosis replication

Hallo!

Nachdem der Osmosis-Bug mit dem PBF-lesen unter Windows behoben ist, wollte ich mich mal wieder mit dem Thema beschäftigen und mein Planet-File regelmäßig aktualisieren. Dazu wollte ich Osmosis mit der Funktion ‘–read-replication-interval’ nutzen, welches mir ja die Differenzen zum vorherigen Zeitraum runterlädt.

Leider klappt das nicht so ganz:


c:\OSM\Planet>call osmosis --read-replication-interval workingDirectory="C:\OSM\Planet\minute_xml" --simplify-change --write-xml-change "c:\osm\planet\minute_xml\changes.osc.gz"
31.01.2011 08:55:10 org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version SNAPSHOT-r25162
31.01.2011 08:55:10 org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
31.01.2011 08:55:10 org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
31.01.2011 08:55:10 org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
31.01.2011 09:03:02 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskManager waitForCompleti
on
SCHWERWIEGEND: Thread for task 1-read-replication-interval failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: Unable to read the changeset file 000/655/11
6.osc.gz from the server.
        at org.openstreetmap.osmosis.replication.v0_6.BaseReplicationDownloader.downloadReplicationF
ile(BaseReplicationDownloader.java:128)
        at org.openstreetmap.osmosis.replication.v0_6.BaseReplicationDownloader.download(BaseReplica
tionDownloader.java:236)
        at org.openstreetmap.osmosis.replication.v0_6.BaseReplicationDownloader.runImpl(BaseReplicat
ionDownloader.java:275)
        at org.openstreetmap.osmosis.replication.v0_6.BaseReplicationDownloader.run(BaseReplicationD
ownloader.java:345)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Network is unreachable: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at java.net.URL.openStream(Unknown Source)
        at org.openstreetmap.osmosis.replication.v0_6.BaseReplicationDownloader.downloadReplicationF
ile(BaseReplicationDownloader.java:102)
        ... 4 more
31.01.2011 09:03:02 org.openstreetmap.osmosis.core.Osmosis main
SCHWERWIEGEND: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed.
        at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForCompletion(Pipeline.java:1
46)
        at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
        at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:31)

Christian

Es sieht danach aus, als hätte zu dem Zeitpunkt der Server “gehakelt”.

  • Bis zu welchem Zeitraum kann ich überhaupt mit dieser Funktion zurückgehen?

So weit, wie die Daten bereitgehalten werden, also seit die erste xxx.state.txt im ältesten Unterverzeichnis existiert. Bei minute-replicate ist es derzeit der 18.09.2009, bei hour-replicate der 19.11.2009.

Würde ich nicht machen, da die “sequenceNumber” und andere Werte in der state.txt nicht kompatibel sind. Diese sind wichtig, um die Änderungen auch bei unterschiedlich großen Zeiträumen lückenlos aneinandergereiht zu erhalten. Es sei denn, du entscheidest dich zukünftig für hour-replicate und initialisierst die ganze Sache nochmal von Anfang an.

  • Kann ich ‘maxInterval’ auf einen beliebig hohen Wert setzen?

Je höher der Wert, desto größer aufgrund der Anzahl zu holender Dateien das Risiko, dass irgend ein Einzeldownload mittendrin fehlschlägt, wenn die letzte Replication schon länger zurückliegt. Welche Auswirkung das dann auf die Vollständigkeit des resultierenden Changefiles und die Anpassung der lokal gespeicherten state.txt hat? Keine Ahnung…

Ich spiele mit den “Daylies” ohne Verwendung des Replication-Task, aber über die Dateinamen, weil mir dieser Intervall genügt und ich mir eine bessere Kontrolle im Fehlerfall davon verspreche. Außerdem bin ich nicht gezwungen, jede “Replication” (bei mir einfach ein Download und Merge mit Anpassung des Dateinamens) mit einem Import zu Ende zu führen.

Viele Grüße
Mario

Das kann sein. Oder auch Osmosis hat sich an zu vielen Dateien aufgehängt. Ich habe mal einen kürzeren Zeitraum genommen und jetzt klappt es. Zu viele Dateien auf einmal zu laden ist wohl nicht gut.

Ich habe gesehen, daß in den jeweiligen Unterverzeichnissen die entsprechenden state.txt-Dateien vorhanden sind. Ich kann also zunächst über hour-replicate ein paar Tage aufholen und dann auf minute-replicate springen um wirklich auf dem laufenden zu sein. Beim Wechsel muß ich also nur in der configuration.txt den URL ändern und die entsprechende in der state.txt runterladen. Ich hatte diese Datei bisher immer mit http://toolserver.org/~mazder/replicate-sequences/ erstellt.

Christian

hi chris,
hier meine werte:


baseUrl=http://planet.openstreetmap.org/minute-replicate
changeFileBeginFormat=yyyyMMddHH
changeFileEndFormat=yyyyMMddHH
maxDownloadCount = 20
maxInterval=3600

Das Ganze starte ich dann mit cron alle 2 Minuten.
Damit holt er sich im Stundenblock genug Daten, die er dann in ca 15 Minuten verarbeitet. Dann den nächsten Schwung.
Und wenn er dann ganz nah dran ist, bekommt er halt vom Server nur die Daten der letzten Minuten.

Da ich meinen Rechner Nachts ausschalte, hat er erst mal einiges zu tun, aber das gibt sich dann.
Und wenn ich die Kiste tagsüber mal booten muß, würg ich den aktuellen Update einfach ab und verliere dadurch maximal einige Minuten.

gruss
walter