lxd/db/db.go
func (c *Cluster) Transaction(f func(*ClusterTx) error) error {
	c.mu.RLock()
	defer c.mu.RUnlock()
	return c.transaction(f)
}
func (c *Cluster) Transaction(f func(*ClusterTx) error) error {
	c.mu.RLock()
	defer c.mu.RUnlock()
	return c.transaction(f)
}
func ( c * Cluster ) Transaction ( f func ( * ClusterTx ) error ) error { c . mu . RLock ( ) defer c . mu . RUnlock ( ) return c . transaction ( f ) }
// Transaction creates a new ClusterTx object and transactionally executes the
// cluster database interactions invoked by the given function. If the function
// returns no error, all database changes are committed to the cluster database
// database, otherwise they are rolled back.
//
// If EnterExclusive has been called before, calling Transaction will block
// until ExitExclusive has been called as well to release the lock.
Transaction creates a new ClusterTx object and transactionally executes the cluster database interactions invoked by the given function . If the function returns no error all database changes are committed to the cluster database database otherwise they are rolled back . If EnterExclusive has been called before calling Transaction will block until ExitExclusive has been called as well to release the lock .