From 97b148b03d588207f01ed81af1d77617f80cb783 Mon Sep 17 00:00:00 2001 From: alena Date: Wed, 24 Aug 2011 10:56:24 -0700 Subject: [PATCH] bug 11060: use lockTable instead of rowLock when createDomR/createDhcp status 11060: resolved fixed --- .../router/VirtualNetworkApplianceManagerImpl.java | 13 ++----------- utils/src/com/cloud/utils/db/Merovingian2.java | 5 +++++ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index cc0ae955ccf..bcbed777993 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -865,10 +865,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @DB protected List findOrCreateVirtualRouters(Network guestNetwork, DeployDestination dest, Account owner, boolean isRedundant) throws ConcurrentOperationException, InsufficientCapacityException { - Transaction txn = Transaction.currentTxn(); - txn.start(); - Network network = _networkDao.lockRow(guestNetwork.getId(), true); + Network network = _networkDao.acquireInLockTable(guestNetwork.getId()); if (network == null) { throw new ConcurrentOperationException("Unable to lock network " + guestNetwork.getId()); } @@ -965,8 +963,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } routers.add(router); } - - txn.commit(); } finally { if (network != null) { _networkDao.releaseFromLockTable(network.getId()); @@ -1079,11 +1075,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return runningRouters; } - @DB List findOrCreateDhcpServers(Network guestNetwork, DeployDestination dest, Account owner) throws ConcurrentOperationException, InsufficientCapacityException { - Transaction txn = Transaction.currentTxn(); - txn.start(); - Network network = _networkDao.lockRow(guestNetwork.getId(), true); + Network network = _networkDao.acquireInLockTable(guestNetwork.getId()); if (network == null) { throw new ConcurrentOperationException("Unable to lock network " + guestNetwork.getId()); } @@ -1157,8 +1150,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian _userStatsDao.persist(stats); } - txn.commit(); - } finally { if (network != null) { _networkDao.releaseFromLockTable(network.getId()); diff --git a/utils/src/com/cloud/utils/db/Merovingian2.java b/utils/src/com/cloud/utils/db/Merovingian2.java index 41effb5ef36..f8832a735e5 100644 --- a/utils/src/com/cloud/utils/db/Merovingian2.java +++ b/utils/src/com/cloud/utils/db/Merovingian2.java @@ -280,6 +280,8 @@ public class Merovingian2 extends StandardMBean implements MerovingianMBean { pstmt.setLong(4, threadId); int rows = pstmt.executeUpdate(); assert (rows <= 1) : "hmmm....keys not unique? " + pstmt; + + if (s_logger.isTraceEnabled()) { s_logger.trace("lck-" + key + " released"); } @@ -293,7 +295,10 @@ public class Merovingian2 extends StandardMBean implements MerovingianMBean { s_logger.trace("lck-" + key + " removed"); } decrCount(); + } else if (rows < 1) { + s_logger.warn("Was unable to find lock for the key " + key + " and thread id " + threadId); } + return rows == 1; } catch (SQLException e) { throw new CloudRuntimeException("Unable to release " + key, e);