NL:Potlatch/Development overview/Server overview
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.