Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-09-01 09:47:05 +0000
committerEike Stepper2016-09-01 09:47:05 +0000
commitdc6bbcc7a8774afec9aaa96e4344a56eb9340ae5 (patch)
treee989993ee29d7c5e703f8a1f149890ea040b150a /plugins/org.eclipse.emf.cdo.common
parentad3166270ed2400edfb3973b82ab94f121bccab4 (diff)
downloadcdo-dc6bbcc7a8774afec9aaa96e4344a56eb9340ae5.tar.gz
cdo-dc6bbcc7a8774afec9aaa96e4344a56eb9340ae5.tar.xz
cdo-dc6bbcc7a8774afec9aaa96e4344a56eb9340ae5.zip
[387564] Ensure lock notification sending after invalidation for "lock/unlock objects on commit"
https://bugs.eclipse.org/bugs/show_bug.cgi?id=387564
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lob/CDOLobInfo.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lock/CDOLockChangeInfo.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocol.java37
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java48
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockStateImpl.java8
5 files changed, 98 insertions, 29 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lob/CDOLobInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lob/CDOLobInfo.java
index 7ca3d06d66..e143751438 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lob/CDOLobInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lob/CDOLobInfo.java
@@ -19,7 +19,7 @@ import java.text.MessageFormat;
*
* @author Eike Stepper
* @since 4.0
- * @noextend This interface is not intended to be extended by clients.
+ * @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class CDOLobInfo
@@ -46,6 +46,16 @@ public class CDOLobInfo
return id;
}
+ /**
+ * A string representation of the {@link #getID() identifier} of this large object.
+ *
+ * @since 4.6
+ */
+ public final String getIDString()
+ {
+ return HexUtil.bytesToHex(id);
+ }
+
public final long getSize()
{
return size;
@@ -54,6 +64,6 @@ public class CDOLobInfo
@Override
public String toString()
{
- return MessageFormat.format("{0}[id={1}, size={2}]", getClass().getSimpleName(), HexUtil.bytesToHex(id), size);
+ return MessageFormat.format("{0}[id={1}, size={2}]", getClass().getSimpleName(), getIDString(), size);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lock/CDOLockChangeInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lock/CDOLockChangeInfo.java
index 4f683adbf7..327626a62d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lock/CDOLockChangeInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/lock/CDOLockChangeInfo.java
@@ -31,7 +31,7 @@ import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
public interface CDOLockChangeInfo extends CDOBranchPoint
{
/**
- * @return <code>true</code> if this instance signals that all {@link CDOLockState lockstates} must be invalidated,
+ * @return <code>true</code> if this instance signals that all {@link CDOLockState lock states} must be invalidated,
* <code>false</code> otherwise
*/
public boolean isInvalidateAll();
@@ -43,29 +43,29 @@ public interface CDOLockChangeInfo extends CDOBranchPoint
/**
* @return The repository time at which the lock changes took place. This is only an informal indication; no formal
- * relation (e.g. an ordering) with commit timestamps is guaranteed.
+ * relation (e.g. an ordering) with commit time stamps is guaranteed.
*/
public long getTimeStamp();
/**
- * @return The view, represented as a {@link CDOLockOwner}, that authored the lock changes.
+ * @return the type of lock operation that caused the lock changes
*/
- public CDOLockOwner getLockOwner();
+ public Operation getOperation();
/**
- * @return The new lock states of the objects that were affected by the change
+ * @return the type of locks that were affected by the lock operation
*/
- public CDOLockState[] getLockStates();
+ public LockType getLockType();
/**
- * @return the type of lock operation that caused the lock changes
+ * @return The view, represented as a {@link CDOLockOwner}, that authored the lock changes.
*/
- public Operation getOperation();
+ public CDOLockOwner getLockOwner();
/**
- * @return the type of locks that were affected by the lock operation
+ * @return The new lock states of the objects that were affected by the change
*/
- public LockType getLockType();
+ public CDOLockState[] getLockStates();
/**
* Enumerates the possible locking operations.
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocol.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocol.java
index 66b5a51bf1..19184c2bb1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocol.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.common.CDOCommonSession;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.CDOLockChangeInfo;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.common.security.CDOPermission;
@@ -41,6 +42,9 @@ public interface CDOProtocol extends CDOProtocolConstants
* @author Eike Stepper
* @since 4.3
*/
+ /**
+ * @author Eike Stepper
+ */
public static final class CommitNotificationInfo
{
public static final byte IMPACT_NONE = 0;
@@ -65,6 +69,8 @@ public interface CDOProtocol extends CDOProtocolConstants
private boolean clearResourcePathCache;
+ private CDOLockChangeInfo lockChangeInfo;
+
public CommitNotificationInfo()
{
}
@@ -89,6 +95,11 @@ public interface CDOProtocol extends CDOProtocolConstants
newPermissions.put(id, permission);
}
}
+
+ if (in.readBoolean())
+ {
+ lockChangeInfo = in.readCDOLockChangeInfo();
+ }
}
public void write(CDODataOutput out) throws IOException
@@ -117,6 +128,16 @@ public interface CDOProtocol extends CDOProtocolConstants
out.writeByte(bits);
}
}
+
+ if (lockChangeInfo != null)
+ {
+ out.writeBoolean(true);
+ out.writeCDOLockChangeInfo(lockChangeInfo);
+ }
+ else
+ {
+ out.writeBoolean(false);
+ }
}
public int getSenderID()
@@ -194,5 +215,21 @@ public interface CDOProtocol extends CDOProtocolConstants
{
this.clearResourcePathCache = clearResourcePathCache;
}
+
+ /**
+ * @since 4.6
+ */
+ public CDOLockChangeInfo getLockChangeInfo()
+ {
+ return lockChangeInfo;
+ }
+
+ /**
+ * @since 4.6
+ */
+ public void setLockChangeInfo(CDOLockChangeInfo lockChangeInfo)
+ {
+ this.lockChangeInfo = lockChangeInfo;
+ }
}
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
index d936507305..5957eeadb0 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
@@ -20,21 +20,23 @@ import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
+import java.util.Arrays;
+
/**
* @author Caspar De Groot
*/
-public class CDOLockChangeInfoImpl implements CDOLockChangeInfo, CDOBranchAdjustable
+public final class CDOLockChangeInfoImpl implements CDOLockChangeInfo, CDOBranchAdjustable
{
private CDOBranchPoint branchPoint;
- private final CDOLockOwner lockOwner;
-
- private final CDOLockState[] lockStates;
-
private final Operation operation;
private final LockType lockType;
+ private final CDOLockOwner lockOwner;
+
+ private final CDOLockState[] lockStates;
+
private final boolean isInvalidateAll;
public CDOLockChangeInfoImpl(CDOBranchPoint branchPoint, CDOLockOwner lockOwner, CDOLockState[] lockStates,
@@ -80,28 +82,48 @@ public class CDOLockChangeInfoImpl implements CDOLockChangeInfo, CDOBranchAdjust
return branchPoint == null ? CDOBranchPoint.UNSPECIFIED_DATE : branchPoint.getTimeStamp();
}
- public CDOLockOwner getLockOwner()
+ public Operation getOperation()
{
- return lockOwner;
+ return operation;
}
- public CDOLockState[] getLockStates()
+ public LockType getLockType()
{
- return lockStates;
+ return lockType;
}
- public Operation getOperation()
+ public CDOLockOwner getLockOwner()
{
- return operation;
+ return lockOwner;
}
- public LockType getLockType()
+ public CDOLockState[] getLockStates()
{
- return lockType;
+ return lockStates;
}
public boolean isInvalidateAll()
{
return isInvalidateAll;
}
+
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("CDOLockChangeInfo[branchPoint=");
+ builder.append(branchPoint);
+ builder.append(", operation=");
+ builder.append(operation);
+ builder.append(", lockType=");
+ builder.append(lockType);
+ builder.append(", lockOwner=");
+ builder.append(lockOwner);
+ builder.append(", lockStates=");
+ builder.append(Arrays.toString(lockStates));
+ builder.append(", invalidateAll=");
+ builder.append(isInvalidateAll);
+ builder.append("]");
+ return builder.toString();
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockStateImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockStateImpl.java
index 4199f4245a..5cd0e2580b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockStateImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockStateImpl.java
@@ -300,10 +300,10 @@ public class CDOLockStateImpl implements InternalCDOLockState
@Override
public String toString()
{
- StringBuilder builder = new StringBuilder("CDOLockState\n lockedObject=");
+ StringBuilder builder = new StringBuilder("CDOLockState[lockedObject=");
builder.append(lockedObject);
- builder.append("\n readLockOwners=");
+ builder.append(", readLockOwners=");
if (readLockOwners != null && readLockOwners.size() > 0)
{
boolean first = true;
@@ -328,10 +328,10 @@ public class CDOLockStateImpl implements InternalCDOLockState
builder.append("NONE");
}
- builder.append("\n writeLockOwner=");
+ builder.append(", writeLockOwner=");
builder.append(writeLockOwner != null ? writeLockOwner : "NONE");
- builder.append("\n writeOptionOwner=");
+ builder.append(", writeOptionOwner=");
builder.append(writeOptionOwner != null ? writeOptionOwner : "NONE");
return builder.toString();

Back to the top