NL:Potlatch/Development overview/Server overview

From OpenStreetMap Wiki
Jump to: navigation, search

De server code die alle zware database bewerkingen doet is sites/rails_port/app/controllers/amf_controller.rb.

Gemaakt in Ruby, gebruikt AMF om met de client te praten. Je kunt het beste de AMF code negeren (begin en eind van het bestand), want dit is voorspelbaar en stabiel. Het echte werk wordt gedaan in de methoden. Veel daarvan zijn eenvoudig, maar de putway, deleteway, en verscheidene history funkties verdienden zorgvuldige bestudering.

Enkele algemene aantekeningen

  • Zoals altijd, de node co-ordinaten worden geprojecteerd op diens weg van en naar de client (maar bounding boxes weer niet).
  • Voor veel methodes kun je zo een fout boodschap naar de client sturen:
 return -1,"U bent niet ingelogd"
  • Om te debuggen kun je naar de Rails log op deze manier schrijven:
 RAILS_DEFAULT_LOGGER.info("  Message: putway, id=#{originalway}")
  • Diverse methoden kunnen samengepakt worden binnen een HTTP request/response. Daartoe is het belangrijk dat sommige variabelen blijven bestaan tussen methodes. In het bijzonder, als Potlatch node id -5 het server id 97671 toegekend heeft gekregen in een 'putway', moeten een anderea way die dezelfde node gebruikt dit ook weten.

Simpele methoden

getpresets

Leest tag config files en geeft terug in arrays/hashes.

whichways

van een bounding box, geeft een lijst van alle way ids binnen die box terug, en alle details van alle POIs in die box.

whichways_deleted

van een bounding box, geeft een lijst van alle verwijderde ways terug, met verwijderde nodes binnen die box.

getway

Van een way id, geeft volledige details voor die way, inclusief alle nodes en tags daarbinnen.

getway_history

Van een way id, geeft een lijst van vorige versies voor deze way, inclusief timestamp and user.

getpoi

Haal een POI van de server. (Alleen gebruikt bij revert (terugdraaien); normaal gesproken worden POIs met whichways gehaald.)

putpoi

Bewaar een POI (nieuw of oud) in de database, of (als visible=0) verwijderd deze. In dat geval, verwijder de POI uit elke relatie.

getway_old

Als getway, maar haalt vorige versie van de way.

Als de versie -1 is, haal de laatst verwijderde versie ("undelete"): als de versie 1+ is, haalt die versie ("revert"). Gedrag is verschillend voor revert en undelete:

  • undelete zal altijd de meeste recente versie van elke bevattende node gebruiken (zelfs indien verplaatst)
  • revert zal de historische versie van elke bevattende node gebruiken, maar wanneer die node nog steeds zichtbaar is en naar elders is verplaatst zal het een nieuw node ID aanmaken

putway

putway is misschien het meest complexe stuk code binnen Potlatch.

Gegeven een way (met id, point array, key/value totaal), schrijft het, en de bevattende nodes naar de database. Het geeft de nieuwe IDs voor deze way terug, en zijn bevattende nodes (wanneer er nieuwe zijn).

Dit klinkt allemaal heel redelijk, maar er zijn deze voorwaarden:

  • Nodes worden niet herschreven tenzij ze veranderd zijn
  • Elke node die voorheen deel uitmaakte van deze way, en er nu niet meer inzitten, worden verwijderd

This might sound sensible in itself, but these are the provisos:

  • Verwijderde nodes worden ook verwijderd uit relaties waar ze in zitten
  • Bijzondere behandeling als de gebruiker undeleted/reverted ways wegschrijft
  • Gebruikt minimaal aantal queries

Meer details op Potlatch/Remote_calls/putway_SQL.

deleteway

Dit is vergelijkbaar met putway in veel opzichtenm en heeft dezelfde voorwaarden.

Als toevoeging, als de way onderdeel was van een relatie, wordt deze hier verwijderd.