2^31 Node ID Problem bei POI+ / OSMPOIEditor

Hallo,

ich bin zufällig auf das changeset 14990834 gestoßen, dort wird

node 2147483647 (2^31 - 1 !, Teil des Weges way 204773635) geändert,
anstatt
node 2150004875.

Als created by steht im Changeset OSMPOIEditor, was nach dieser Datei von POI+ (https://github.com/davidchiles/osm-poi-editor-iOS) gesetzt wird.

Ein Issue dazu habe ich schon erstellt.

Hat jemand von Euch eine DB oder sonst ne Idee, um einfach zu prüfen, ob es sonst noch Changesets mit “created_by = OSMPOIEditor” gibt? Betrifft vermutlich nur Updates, die neuen POIs des Users von obigem Changeset scheinen Ok zu sein.

Gruß,
Norbert

Ich hab mal die Changesets von http://planet.openstreetmap.org/replication/changesets/000/151/ heruntergeladen und nach '<tag k=“comment” v="Updated existing POI: ’ durchsucht und nur noch ein Update gefunden, das gar keine Änderungen enthält:

http://www.openstreetmap.org/browse/changeset/14991421

Das entsprechende Create: http://www.openstreetmap.org/browse/changeset/14991384

Ich habe mir gerade einmal erlaubt, folgende Notoperation durchzuführen: einen neuen Knoten am ursprünglichen Ort von # 2^31-1 erstellt und an dessen Stelle in die beiden Wege eingefügt (http://www.openstreetmap.org/browse/changeset/14999210). Damit verschwindet zumindest das hübsche weltumspannende Streifengebäude und OSMPOIEditor (und jede weitere kaputte Anwendung) kann mit #2^31-1 erst einmal machen, was es will, ohne Gebäude in Villingen-Schwenningen zu verbiegen. Das löst natürlich nicht das eigentliche Problem, aber zumindest schmerzen die Symptome nicht mehr.

Augenscheinlich ersetzt der OSMPOIEditor die ID des zu bearbeitenden Knoten durch die höchste Zahl, die er speichern kann; d.h. OSMPOIEditor wird auch weiterhin versuchen, #2147483647 zu bearbeiten. Dies wird häufig nicht klappen, weil der Server einen Konflikt meldet. Ein Editor muß beim Hochladen eines Objekts die ihm bekannte Versionsnummer angeben (“optimistic locking”). Stimmt diese nicht mit der aktuellen Version in der Datenbank überein, verweigert der Server die Annahme und meldet einen Konflikt. D.h. OSMPOIEditor wird #2147483647 nur noch “erfolgreich” verändern, wenn der Knoten, der eigentlich bearbeitet werden sollte, ebenfalls in Version 2 vorliegt; danach dann in Version 3 und so weiter. Das wird mit steigender Versionsnummer zwar immer unwahrscheinlicher, aber mit weiteren Bearbeitungen ist dennoch zu rechnen. Deswegen habe ich oben auch nicht einfach den Knoten zurück verschoben, sondern einen neuen angelegt.
Die Konfliktbehandlung dürfte auch das von Dir gefundene leere Changeset erklären, denn der Knoten, den der User tatsächlich bearbeiten wollte, ist in der nicht passenden Version 1.

Zur Verbreitung des Programms: Im 2. Halbjahr 2012 wurde OSMPOIEditor von 290 Nutzern für 5544 Bearbeitungen in 5634 Änderungssätzen genutzt. Selbst wenn der Softwarefehler schnell behoben werden sollte, müssen diese erst einmal alle ihr Programm aktualisieren. Bis dahin darf man gespannt den Knoten #2147483647 beobachten. Ansonsten ist es halt an den Admins, OSMPOIEditor von der API auszusperren.

Zumindest ist für dieses eine Programm jetzt bekannt, wie sich der 2^31-Bug auswirkt; und solange nur der eine Knoten #2147483647 betroffen ist, geht nicht viel kaputt. Bei den ganzen anderen neumodischen Telefonprogrammen heißt es abwarten, was für einen Murks sie machen. (Ich war ja ziemlich überrascht, daß bei osmosis in letzter Minute noch ein Problem entdeckt wurde und sogar die Geofabrik nicht ausreichend vorbereitet war. Bei den Eifon- und Android-Programmen hätte es mich im Gegenteil gewundert, wenn keine Probleme aufgetreten wären.)

Edit: Und ich habe mir soeben erlaubt, den Eintrag auf der Wikiseite anzupassen.

Danke für die Bearbeitung und Anpassung, macht Sinn. Werde morgen mal nachhaken, wenn keine Antwort kommt.

Naja, nix überstürzen. Ein paar Tage zum Lesen, Nachdenken, Ändern des Codes und Antworten sollte man ihm schon geben. Und glücklicherweise ist es ja so, daß das Programm augenscheinlich nur genau einen Knoten kaputtmachen kann :wink: Mehr Sorgen machen mir die anderen Programme, bei denen man noch nicht weiß, was schief geht. Jedenfalls gut, daß Du diesen Fehler schon entdeckt und beim Entwickler gemeldet hast.

Moin,

da musste ich doch auch erst mal probieren: http://yapis.eu/index.php?id=2151533604

Alles schick :slight_smile:

Ist aber Zufall dass das klappt, dran gedacht hab ich damals auch nicht.

LG,

-moenk

Das Problem wurde behoben, wartet jetzt auf Appstore-Freigabe. Die 64-bit Identifiers Seite hab ich aktualisiert. Außer einem Test des Autors hab ich keine neuen Update-Changesets gefunden.

Gruß,
Norbert

Ui, das ging fix. Hoffentlich bekommen alle Nutzer ein Zwangsupdate, dann ist das Problem bald aus der Welt.

@moenk: Neue Knoten anlegen ist nur die halbe Wahrheit. Genauso wichtig ist, ob bestehende Knoten mit id >=2^31 korrekt bearbeitet werden.

Ist sowas vom App-Store vorgesehen? Klar, automatischer Update geht, wenn der User das vorher aktiviert hat, aber kann man ihn zwingen?
Ich kann mich noch an die Story mit dem Mobile Acces Creator Mobac (?) erinnern; als da das Download-Limit eingeführt wurde, haben viele User einfach nicht upgedated und sind bei der offenen Version geblieben.

Gruss
walter

Es würde mich nicht wundern, wenn Apfel seinen Nutzern einfach Updates unterschöbe, ohne sie nach ihrer Meinung zu fragen. Aber das gilt vermutlich nur für die eigenen Produkte, nicht für Drittanwendungen.
Ich bin mal gespannt, ob auch bei Pushpin (iOS) ein Problem auftritt. Das Programm ist noch um einiges weiter verbreitet als OSMPOIEditor.

Gibt es denn nicht beim Haupt-OSM-Server die Möglichkeit, bestimmte Editoren mit bestimmten Versionsnummern zu blocken, wenn diese eine Gefahr für den Datenbestand darstellen?

Quasi eine Blacklist?

Somit wären alle POI-Editor-Nutzer auch zu einem Update “gezwungen”.

Auch FreieTonne / freietonne-db scheint mit 2^31 nicht zurecht zu kommen. Hier wurde der bereits bekannte Knoten 2147483647 (2^31-1) zunächst verschoben und dann gelöscht, was wohl eigentlich dem Knoten “Sperrwerg” (2170733135) galt. Das Problem dürfte völlig analog zu dem in POI+ sein und auf einen zu kleinen Ganzzahl-Datentyp zurückgehen. freietonne-db ist angeschrieben. Immerhin wird das Programm nur von einem einzigen User verwendet, sodaß keine Altversionen mehr herumstreunen werden, wenn der Fehler erst einmal behoben ist.

Nachtrag: freietonne-db hat geantwortet, das Problem bestätigt und sich an die Arbeit gemacht.

Ich weiß nicht ob es etwas mit der Problematik zu tun hat, aber beim OSM-Inspektor kann man z.B. bei diesem Punkt keine History und keinen OSM Data Browser aufrufen (bzw. es kommt eine Fehlermeldung). Außerdem hat der Node eine negative ID.

Thomas

Jo, eine passende: “-213094574” ist das Ergebnis, wenn sich die ID 2164021549 am 32. Bit überschlägt und man davon nur die ersten 10 Ziffern ausgibt.

Ich hab Herrn woodpeck mal ne Message geschickt und auf den Beitrag hier hingewiesen.

Grüße, Max