diff options
author | Eike Stepper | 2016-09-01 09:47:05 +0000 |
---|---|---|
committer | Eike Stepper | 2016-09-01 09:47:05 +0000 |
commit | dc6bbcc7a8774afec9aaa96e4344a56eb9340ae5 (patch) | |
tree | e989993ee29d7c5e703f8a1f149890ea040b150a /plugins/org.eclipse.emf.cdo.common | |
parent | ad3166270ed2400edfb3973b82ab94f121bccab4 (diff) | |
download | cdo-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')
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(); |