Wednesday, May 30, 2012

Mystery Machine update.

I have finally got a MysteryMachine source tree here with the new store API. I should start feeding commits into bitbucket / GitHub over the next few days. This has been a little delayed due to Maelstrom a LARP which I help crew, but I hope to get back in the saddle start push commit later this week and over the long weekend we have here in the UK.

I'm taking it slowly because I want to see if now I have it working I can split the commits into smaller chunks, which still pass all the tests, but the work since the last commit is the smallest improvement it made sense to work on. I've also got a little bit of code clean up to do , but I schedule that as I commit .

This marks the end of this important set of changes which cleans up the write-to-store path of MysteryMachine, as well as it being a clean up it provide consistency guarantees around exceptions thrown from Value handlers. It has also allowed a much cleaner framework for handling some of the unique features of MysteryMachine's internal backend (Eg., the data object inheritance) . This gives the MysteryMachine schema model  sane almost ACID semantics . I say almost there are  problems with multiprocess access to the store
, but the  new API should allow a store module to support this cleanly - but I haven't done that work for any of the existing store engines.

Additionally for simplicity I only guarantee Integrity after Abort/Commit and before a Begin transaction, in most use this is fine as I expect most users will rely on the AutoCommit. AutoCommit detects if you haven't started a transaction a read/write method, then one is started for you. When the outermost read/write method exits the transaction is committed. Exceptions are handled , in a similar manner but cause the transaction to abort.

From here I've got a number of changes , I need to make to start moving forward, I need to add the 'Policies' framework - which will provide handlers for a number of internal MysteryMachine choices , and provide a mechanism to assign a specific 'Fixup' function to certain exceptions.

The next big and really important thing though is the 'Query' extensions to the internal macro language, these will allow you to refer to groups of attributes and Objects, without this you can't easily generate simple thing such as character pack inventories, and would have to explicitly mention every item in list objects.