diff options
author | Caspar De Groot | 2011-09-05 11:07:38 +0000 |
---|---|---|
committer | Caspar De Groot | 2011-09-05 11:07:38 +0000 |
commit | 6f2beae5f3a603c684e37bcfe9eb1df99cdb9e94 (patch) | |
tree | 409af9eedae87ea111c08a7b5b787eaf479d6c4e /plugins/org.eclipse.emf.cdo.server.db | |
parent | 760274f256e688aa3afda4546bb91f737c6f307d (diff) | |
download | cdo-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')
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)
{
|