cyclades: Wrap diagnostic creation in transaction
Fix bug in snf-dispatcher causing wrong updates of VMs from ganeti. Creation if instance diagnostics must run inside a transaction, because otherwise, the lock of the vm (select_for_update) is released too early. Specifally, 'if_update_required' takes a lock on the VM and checks if the timestamp of the message is newer than the one in the VM. If diagnostic creation ('create_instance_diagnostic' function) does not run inside a transaction, the lock is released when the diagnostic row is inserted in the DB. However, after storing the diagnostic, the VM is saved in order to update the 'updated' timestamp (otherwise, MODIFIED_SINCE does not work correctly). In the meantime, another message may update the VM, and this update will be lost. This commit wrap 'create_instance_diagnostic' inside transaction to fix this issue.