diff --git a/server/src/com/cloud/domain/dao/DomainDaoImpl.java b/server/src/com/cloud/domain/dao/DomainDaoImpl.java index f8cdc981c4b..69cc7b56634 100644 --- a/server/src/com/cloud/domain/dao/DomainDaoImpl.java +++ b/server/src/com/cloud/domain/dao/DomainDaoImpl.java @@ -99,36 +99,31 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom return null; } - GlobalLock lock = GlobalLock.getInternLock("lock.domain." + parent); - if(!lock.lock(3600)) { - // wait up to 1 hour, if it comes up to here, something is wrong - s_logger.error("Unable to lock parent domain: " + parent); + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + + parentDomain = this.lockRow(parent, true); + if(parentDomain == null) { + s_logger.error("Unable to lock parent domain: " + parent); + return null; + } + + domain.setPath(allocPath(parentDomain, domain.getName())); + domain.setLevel(parentDomain.getLevel() + 1); + + parentDomain.setNextChildSeq(parentDomain.getNextChildSeq() + 1); // FIXME: remove sequence number? + parentDomain.setChildCount(parentDomain.getChildCount() + 1); + persist(domain); + update(parentDomain.getId(), parentDomain); + + txn.commit(); + return domain; + } catch(Exception e) { + s_logger.error("Unable to create domain due to " + e.getMessage(), e); + txn.rollback(); return null; - } - - try { - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - - domain.setPath(allocPath(parentDomain, domain.getName())); - domain.setLevel(parentDomain.getLevel() + 1); - - parentDomain.setNextChildSeq(parentDomain.getNextChildSeq() + 1); // FIXME: remove sequence number? - parentDomain.setChildCount(parentDomain.getChildCount() + 1); - persist(domain); - update(parentDomain.getId(), parentDomain); - - txn.commit(); - return domain; - } catch(Exception e) { - s_logger.error("Unable to create domain due to " + e.getMessage(), e); - txn.rollback(); - return null; - } - } finally { - lock.unlock(); - } + } } @Override