mdk
22
Ich weiss nicht ob meine Beobachtung relevant ist, aber ich habe auch öfters Probleme beim Hochladen, aber nur wenn ich JOSM unter Windows benutze.
Windows:
- Nach dem Start des Uploads erscheint nach einiger Zeit im Dialog eine Medung, dass neue Versuche gestartet werden (1 von 5 usw.)
- Bei einigen hundert geänderten Objekten klappt es dann irgendwann.
- Bei grösseren Changesets kommt es dann zum Abbruch. Mit einigen Wiederholungen (“Aktualisiere ChangeSet xy”) funktioniert es dann auch.
- Danach kommt häufig eine Meldung, dass noch ein Objekt synchronisiert werden muss, was aber in der Regel zu keinem Konflikt führt.
- Am Ende muss man noch das offen gebliebene Changeset schliessen (oder warten, bis es automatisch geschlossen wird)
- Die Probleme treten weitgehend unabhänig von der Serverlast auf.
Ubunu:
- Trotz hoher Serverlast funktioniert der Upload meist ohne Probleme
- Die Meldung, dass ein neue Versuch gestartet wird, erscheint eigentlich nie (zumindest kann ich mich nicht daran erinnern)
- Eine Synchronisation am Ende ist eigentlich nie nötig (ausser es ist wirklich ein Konflikt da)
Vermutung:
Der Netzwerkmonitor zeigt an, das JOSM alle Änderungen auf einmal hochläd und danch kein Netzwerktraffik mehr ist. Der Server verarbeitet nun das Changeset. Wenn er mit der Überprüfung fertig ist, sendet er eine Antwort an JOSM zurück. Meines Wissens hat Windows defaulmässig ein Timeout von 30 Sekeunden für seine Sockets. Kommt innerhalb dieser Zeit keine Antwort auf eine HTTP Anfrage, wird der Socket geschlosen und JOSM erhält einen Fehler. JOSM probiert in solch einem Fall eine neue Verbindung aufzubauen. Der Server erkennt aber, dass es sich um ein bekanntes Changeset handelt und behandelt es als “update” des Changesets.
Ubuntu hat dort (soweit ich weiss) ein längeres Timeout, so dass trotz hoher Serverlast der Update durchkommt.
Die Beobachtung, dass bei der Zerlegung des Changesetz in kleine Teile (z.B. je 10 Objekte) sich die Situation bessert, wäre damit auch erklärt: Der Server antwortet nach erfolgreicher Verarbeitung des Päckchens und fordert das nächste an. Dadurch würde der Timeout vermiden werden.
Generell könnte man das Problem vermutlich lösen, indem der Server mit der Antwort nicht wartet, bis er mit der Verarbeitung fertig ist, sondern bereits vorher (z.B. nach 10 Sekunden) eine Antwort (“bin noch nicht fertig”) an JOSM zurücksendet. JOSM müsste dann so lange weitere Request (“ok, ich warte noch”) senden, bis der Server seine Aufgabe erledigt hat. Dies würde aber eine Erweiterung der API bedeuten, da alte JOSM-Versionen damit vermutlich nicht damit klar kämen.
mdk