promise with rollback
promise handles done correctly