Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaspar De Groot2011-09-05 11:07:38 +0000
committerCaspar De Groot2011-09-05 11:07:38 +0000
commit6f2beae5f3a603c684e37bcfe9eb1df99cdb9e94 (patch)
tree409af9eedae87ea111c08a7b5b787eaf479d6c4e /plugins/org.eclipse.emf.cdo.server.db
parent760274f256e688aa3afda4546bb91f737c6f307d (diff)
downloadcdo-6f2beae5f3a603c684e37bcfe9eb1df99cdb9e94.tar.gz
cdo-6f2beae5f3a603c684e37bcfe9eb1df99cdb9e94.tar.xz
cdo-6f2beae5f3a603c684e37bcfe9eb1df99cdb9e94.zip
[351912] Lock coordination with SynchronizableRepositories
https://bugs.eclipse.org/bugs/show_bug.cgi?id=351912
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DurableLockingManager.java72
2 files changed, 51 insertions, 26 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
index bc1481a8bd..42aca92d88 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
@@ -1301,9 +1301,10 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor,
return manager.createLockArea(this, durableLockingID, userID, branchPoint, readOnly, locks);
}
- public void updateLockArea(LockArea lockArea)
+ public void updateLockArea(LockArea area)
{
- throw new RuntimeException("TODO (CD)"); // TODO (CD)
+ DurableLockingManager manager = getStore().getDurableLockingManager();
+ manager.updateLockArea(this, area);
}
public LockArea getLockArea(String durableLockingID) throws LockAreaNotFoundException
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DurableLockingManager.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DurableLockingManager.java
index 1e2183698d..7fbd726665 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DurableLockingManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DurableLockingManager.java
@@ -151,30 +151,7 @@ public class DurableLockingManager extends Lifecycle
if (!locks.isEmpty())
{
- try
- {
- stmt = statementCache.getPreparedStatement(sqlInsertLock, ReuseProbability.MEDIUM);
- stmt.setString(1, durableLockingID);
-
- for (Entry<CDOID, LockGrade> entry : locks.entrySet())
- {
- CDOID id = entry.getKey();
- int grade = entry.getValue().getValue();
-
- idHandler.setCDOID(stmt, 2, id);
- stmt.setInt(3, grade);
-
- DBUtil.update(stmt, true);
- }
- }
- catch (SQLException e)
- {
- throw new DBException(e);
- }
- finally
- {
- statementCache.releasePreparedStatement(stmt);
- }
+ insertLocks(accessor, durableLockingID, locks);
}
accessor.getConnection().commit();
@@ -187,6 +164,37 @@ public class DurableLockingManager extends Lifecycle
}
}
+ private void insertLocks(DBStoreAccessor accessor, String durableLockingID, Map<CDOID, LockGrade> locks)
+ {
+ IPreparedStatementCache statementCache = accessor.getStatementCache();
+ PreparedStatement stmt = null;
+
+ try
+ {
+ stmt = statementCache.getPreparedStatement(sqlInsertLock, ReuseProbability.MEDIUM);
+ stmt.setString(1, durableLockingID);
+
+ for (Entry<CDOID, LockGrade> entry : locks.entrySet())
+ {
+ CDOID id = entry.getKey();
+ int grade = entry.getValue().getValue();
+
+ idHandler.setCDOID(stmt, 2, id);
+ stmt.setInt(3, grade);
+
+ DBUtil.update(stmt, true);
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ finally
+ {
+ statementCache.releasePreparedStatement(stmt);
+ }
+ }
+
public LockArea getLockArea(DBStoreAccessor accessor, String durableLockingID) throws LockAreaNotFoundException
{
IPreparedStatementCache statementCache = accessor.getStatementCache();
@@ -300,6 +308,22 @@ public class DurableLockingManager extends Lifecycle
}
}
+ public void updateLockArea(DBStoreAccessor accessor, LockArea area)
+ {
+ try
+ {
+ String areaID = area.getDurableLockingID();
+ unlockWithoutCommit(accessor, areaID);
+ insertLocks(accessor, areaID, area.getLocks());
+
+ accessor.getConnection().commit();
+ }
+ catch (SQLException e)
+ {
+ throw new DBException(e);
+ }
+ }
+
public void lock(DBStoreAccessor accessor, String durableLockingID, LockType type,
Collection<? extends Object> objectsToLock)
{

Back to the top