Translations of this page?:

Locking in Pootle

Basic Concept

  • Need simple locking to be able to handle multiprocess Apache servers
  • This should be done with a view to handling distributed servers (although that also needs a synchronise-and-resolve-conflicts approach)
  • Helpful to bear in mind that the whole process is distributed already if you include the web client
    1. client requests page with translation units, user edits and makes changes
    2. client sends changes back to server
  • between the above two steps, someone else could have made changes on the server
  • we therefore should be able to work out whether such a conflict has occurred anyway
  • may be useful to have a 'queue of changes' that contains both the original version and the changed version
  • the locking can then make sure each change is processed atomically, and that only one process tries to write to the file
  • revision control etc should all go through this mechanism
  • need to document all the basic change operations we expect

Investigation

looking at pootlefile for locking needs

The changes are being done on the Pootle-locking-branch branch in CVS

notes:

  • complexity of having multiple files is unhelpful
  • currently have timestamp id for the main file
  • obscurer features (should they be dropped?)
    • tracking
  • this file is far too complex, it needs to be broken down

recommended plan:

  • temporarily remove suggestions feature
  • separate out stats / assigns into separate interface (may do more here)
  • find simpler more standard way to store stats (simple database)
  • find simpler more standard way to store assigns (as above)
  • add tests for concurrent access (maybe benchmarks too…)
  • introduce generic pessimistic locking
  • add back in suggestions etc

files currently used

  • x.po
  • x.po.stats
  • x.po.pending
  • x.po.assigns

functions, classes and locking needs

  • common pattern - ability to check if file modified and reload
  • getmodtime - file timestamp
pootleelement
  • read properties / methosd
    • getunquotedmsgid
    • getunquotedmsgstr
  • write properties / methods
    • setunquotedmsgstr
pootlestatistics
  • file system interaction
    • getstats - checks modtimes, calls readstats, readpendingfile, calcstats, savestats
    • readstats
    • savestats
  • update methods (no new data, just refresh)
    • reclassifyelement
    • reclassifysuggestions
pootleassigns
  • file system interaction
    • getassigns / readassigns
    • saveassigns
  • write properties / methods
    • assignto
    • unassign
pootlefile
  • init triggers getstats, getassigns
  • file system interaction
    • readpofile
    • savepofile
    • pofreshen
    • readpendingfile
    • savependingfile
  • read properties / methods
    • getoutput
    • getsuggestions
    • iteritems (updates stats)
  • write properties / methods
    • setmsgstr
    • addsuggestion
    • deletesuggestion
    • mergeitem
    • mergefile
pootle/locking.txt · Last modified: 2006/05/30 13:50 by davidfraser
Recent changes RSS feed GNU General Public License Driven by DokuWiki Get Pootle, Virtaal & the Translate Toolkit at SourceForge.net. Fast, secure and Free Open Source software downloads