From 9544d4290863c00c52da5dc0c1a7383a87f158db 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 6ddf387cc1b..4f987d3f518 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -872,10 +872,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()); } @@ -972,8 +970,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } routers.add(router); } - - txn.commit(); } finally { if (network != null) { _networkDao.releaseFromLockTable(network.getId()); @@ -1086,11 +1082,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()); } @@ -1164,8 +1157,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 ca6ac687a60..5d12909e494 100644 --- a/utils/src/com/cloud/utils/db/Merovingian2.java +++ b/utils/src/com/cloud/utils/db/Merovingian2.java @@ -283,6 +283,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"); } @@ -296,7 +298,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);