JBoss Cache SVN: r6461 - core/branches/2.2.X.
by jbosscache-commits@lists.jboss.org
Author: bstansberry(a)jboss.com
Date: 2008-07-31 10:12:50 -0400 (Thu, 31 Jul 2008)
New Revision: 6461
Modified:
core/branches/2.2.X/pom.xml
Log:
[JBCACHE-1387] Update the JBossTS release
Modified: core/branches/2.2.X/pom.xml
===================================================================
--- core/branches/2.2.X/pom.xml 2008-07-31 11:07:45 UTC (rev 6460)
+++ core/branches/2.2.X/pom.xml 2008-07-31 14:12:50 UTC (rev 6461)
@@ -440,7 +440,7 @@
<dependency>
<groupId>jboss.jbossts</groupId>
<artifactId>jbossjta</artifactId>
- <version>4.3.0.GA</version>
+ <version>4.4.0.CR1</version>
<scope>test</scope>
</dependency>
</dependencies>
16 years, 5 months
JBoss Cache SVN: r6460 - in core/trunk/src: main/java/org/jboss/cache/commands/legacy and 12 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-31 07:07:45 -0400 (Thu, 31 Jul 2008)
New Revision: 6460
Removed:
core/trunk/src/main/java/org/jboss/cache/registry/
Modified:
core/trunk/src/main/java/org/jboss/cache/DataContainerImpl.java
core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java
core/trunk/src/main/java/org/jboss/cache/NodeSPI.java
core/trunk/src/main/java/org/jboss/cache/PessimisticNodeFactory.java
core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java
core/trunk/src/main/java/org/jboss/cache/VersionedNode.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/ReversibleCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/LegacyGravitateDataCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/PessGetChildrenNamesCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/LegacyEvictCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessClearDataCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessCreateNodeCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessMoveCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutDataMapCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutForExternalReadCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutKeyValueCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveKeyCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveNodeCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/VersionedInvalidateCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/read/GetChildrenNamesCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/write/MoveCommand.java
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyCacheLoaderInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticCreateIfNotExistsInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticValidatorInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
core/trunk/src/main/java/org/jboss/cache/invocation/LegacyInvocationContext.java
core/trunk/src/main/java/org/jboss/cache/invocation/NodeInvocationDelegate.java
core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java
core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeFactory.java
core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
core/trunk/src/main/java/org/jboss/cache/mvcc/NullMarkerNode.java
core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java
core/trunk/src/main/java/org/jboss/cache/optimistic/OptimisticNodeFactory.java
core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspace.java
core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspaceImpl.java
core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNode.java
core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java
core/trunk/src/main/java/org/jboss/cache/transaction/PessimisticTransactionContext.java
core/trunk/src/main/java/org/jboss/cache/util/concurrent/SelfInitializingConcurrentHashMap.java
core/trunk/src/test/java/org/jboss/cache/mock/NodeSpiMock.java
Log:
- Refactored and optimised MVCC codebase
- added deprecation to deprecated classes and components
Modified: core/trunk/src/main/java/org/jboss/cache/DataContainerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/DataContainerImpl.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/DataContainerImpl.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -643,7 +643,7 @@
NodeSPI childNode;
Map children = n.getChildrenMapDirect();
- childNode = children == null ? null : (NodeSPI) children.get(childName);
+ childNode = (NodeSPI) children.get(childName);
if (childNode == null)
{
Modified: core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -12,8 +12,10 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani</a>
* @since 2.0.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
@ThreadSafe
+@Deprecated
public class LegacyRegionManagerImpl extends RegionManagerImpl
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/NodeSPI.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/NodeSPI.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/NodeSPI.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -509,23 +509,20 @@
* <p/>
* Only used with MVCC.
*
- * @param ctx invocation context
* @param container data container
- * @param nodeFactory node factory for creating new nodes/copies.
* @param writeSkewCheck if true, and the node supports write skew checking, nodes are tested for write skews.
*/
- void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck);
+ void markForUpdate(DataContainer container, boolean writeSkewCheck);
/**
* Commits any updates made on this node to the underlying data structure, making it visible to all other transactions.
* <p/>
* Only used with MVCC.
*
- * @param ctx invocation context
- * @param container data container
- * @param nodeFactory node factory
+ * @param ctx invocation context
+ * @param container data container
*/
- void commitUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory);
+ void commitUpdate(InvocationContext ctx, DataContainer container);
/**
* Only used with MVCC.
Modified: core/trunk/src/main/java/org/jboss/cache/PessimisticNodeFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/PessimisticNodeFactory.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/PessimisticNodeFactory.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -10,7 +10,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessimisticNodeFactory<K, V> extends AbstractNodeFactory<K, V>
{
private LockStrategyFactory lockStrategyFactory;
Modified: core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -21,8 +21,10 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
@SuppressWarnings("deprecation")
+@Deprecated
public class PessimisticUnversionedNode<K, V> extends UnversionedNode<K, V>
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/VersionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/VersionedNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/VersionedNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -23,7 +23,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @since 2.0.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class VersionedNode<K, V> extends PessimisticUnversionedNode<K, V>
{
private static final String DATA_VERSION_INTERNAL_KEY = "_JBOSS_INTERNAL_OPTIMISTIC_DATA_VERSION";
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/ReversibleCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/ReversibleCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/ReversibleCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -7,7 +7,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public interface ReversibleCommand extends WriteCommand
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/LegacyGravitateDataCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/LegacyGravitateDataCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/LegacyGravitateDataCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -13,7 +13,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyGravitateDataCommand extends GravitateDataCommand
{
public LegacyGravitateDataCommand(Fqn fqn, boolean searchSubtrees, Address localAddress)
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/PessGetChildrenNamesCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/PessGetChildrenNamesCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/read/PessGetChildrenNamesCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -12,6 +12,10 @@
import java.util.Map;
import java.util.Set;
+/**
+ * @deprecated will be removed along with optimistic and pessimistic locking.
+ */
+@Deprecated
public class PessGetChildrenNamesCommand extends GetChildrenNamesCommand
{
public PessGetChildrenNamesCommand()
@@ -36,7 +40,7 @@
NodeSPI<?, ?> n = fqn == null ? null : ctx.lookUpNode(fqn);
if (n == null || n.isDeleted()) return null;
Map<Object, ? extends Node<?, ?>> childrenMap = n.getChildrenMapDirect();
- Collection<NodeSPI<?, ?>> children = (Collection<NodeSPI<?, ?>>) ((childrenMap == null || childrenMap.isEmpty()) ? Collections.emptySet() : childrenMap.values());
+ Collection<NodeSPI<?, ?>> children = (Collection<NodeSPI<?, ?>>) (childrenMap.isEmpty() ? Collections.emptySet() : childrenMap.values());
return getCorrectedChildNames(children, ctx);
}
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/LegacyEvictCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/LegacyEvictCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/LegacyEvictCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -12,7 +12,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyEvictCommand extends EvictCommand
{
public LegacyEvictCommand(Fqn fqn)
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessClearDataCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessClearDataCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessClearDataCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -15,7 +15,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessClearDataCommand extends ClearDataCommand implements ReversibleCommand
{
private HashMap originalData;
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessCreateNodeCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessCreateNodeCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessCreateNodeCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -12,7 +12,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessCreateNodeCommand extends CreateNodeCommand implements ReversibleCommand
{
public PessCreateNodeCommand(Fqn fqn)
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessMoveCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessMoveCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessMoveCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -13,7 +13,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessMoveCommand extends MoveCommand implements ReversibleCommand
{
public PessMoveCommand()
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutDataMapCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutDataMapCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutDataMapCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -16,7 +16,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessPutDataMapCommand extends PutDataMapCommand implements ReversibleCommand
{
Map oldData;
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutForExternalReadCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutForExternalReadCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutForExternalReadCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -14,7 +14,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessPutForExternalReadCommand extends PutForExternalReadCommand implements ReversibleCommand
{
protected Object oldValue;
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutKeyValueCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutKeyValueCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessPutKeyValueCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -14,7 +14,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessPutKeyValueCommand extends PutKeyValueCommand implements ReversibleCommand
{
protected Object oldValue;
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveKeyCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveKeyCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveKeyCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -13,7 +13,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessRemoveKeyCommand extends RemoveKeyCommand implements ReversibleCommand
{
/* internally used for rollback */
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveNodeCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveNodeCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/PessRemoveNodeCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -16,7 +16,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessRemoveNodeCommand extends RemoveNodeCommand implements ReversibleCommand
{
protected Map originalData;
Modified: core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/VersionedInvalidateCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/VersionedInvalidateCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/legacy/write/VersionedInvalidateCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -27,7 +27,9 @@
*
* @author Mircea.Markus(a)jboss.com
* @since 2.2
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class VersionedInvalidateCommand extends InvalidateCommand implements VersionedDataCommand
{
private static final Log log = LogFactory.getLog(VersionedInvalidateCommand.class);
Modified: core/trunk/src/main/java/org/jboss/cache/commands/read/GetChildrenNamesCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/read/GetChildrenNamesCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/read/GetChildrenNamesCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -51,7 +51,7 @@
ReadCommittedNode n = (ReadCommittedNode) (fqn == null ? null : ctx.lookUpNode(fqn));
if (n == null || n.isDeleted()) return null;
Map<Object, InternalNode<?, ?>> childrenMap = n.getDelegationTarget().getChildrenMap();
- Collection<InternalNode> children = (Collection<InternalNode>) ((childrenMap == null || childrenMap.isEmpty()) ? Collections.emptySet() : childrenMap.values());
+ Collection<InternalNode> children = (Collection<InternalNode>) (childrenMap.isEmpty() ? Collections.emptySet() : childrenMap.values());
return getCorrectedChildNames(children, ctx);
}
Modified: core/trunk/src/main/java/org/jboss/cache/commands/write/MoveCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/write/MoveCommand.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/commands/write/MoveCommand.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -96,12 +96,13 @@
return null;
}
+ @SuppressWarnings("unchecked")
private void moveRecursively(NodeSPI oldNode, NodeSPI newNode, InvocationContext ctx)
{
if (trace) log.trace("Moving " + oldNode.getFqn() + " to " + newNode.getFqn());
// start deep.
Map<Object, InternalNode> children = oldNode.getDelegationTarget().getChildrenMap();
- if (children != null && !children.isEmpty())
+ if (!children.isEmpty())
{
for (InternalNode child : children.values())
{
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -39,7 +39,9 @@
*
* @author <a href="mailto:{hmesha@novell.com}">{Hany Mesha}</a>
* @version $Id$
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyActivationInterceptor extends LegacyCacheLoaderInterceptor implements ActivationInterceptorMBean
{
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyCacheLoaderInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyCacheLoaderInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyCacheLoaderInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -46,7 +46,9 @@
*
* @author Bela Ban
* @version $Id$
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyCacheLoaderInterceptor extends CommandInterceptor implements CacheLoaderInterceptorMBean
{
private long cacheLoads = 0;
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -13,7 +13,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyPassivationInterceptor extends PassivationInterceptor
{
private DataContainer dataContainer;
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -3,7 +3,6 @@
import org.jboss.cache.DataContainer;
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
-import org.jboss.cache.NodeFactory;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.commands.VisitableCommand;
import org.jboss.cache.commands.read.ExistsCommand;
@@ -49,15 +48,13 @@
{
LockManager lockManager;
DataContainer dataContainer;
- NodeFactory nodeFactory;
MVCCNodeHelper helper;
@Inject
- public void setDependencies(LockManager lockManager, DataContainer dataContainer, NodeFactory nodeFactory, MVCCNodeHelper helper)
+ public void setDependencies(LockManager lockManager, DataContainer dataContainer, MVCCNodeHelper helper)
{
this.lockManager = lockManager;
this.dataContainer = dataContainer;
- this.nodeFactory = nodeFactory;
this.helper = helper;
}
@@ -95,7 +92,7 @@
@Override
public Object handleRemoveNodeCommand(InvocationContext ctx, RemoveNodeCommand command) throws Throwable
{
- helper.wrapNodesForWriting(ctx, command.getFqn());
+ helper.wrapNodesRecursivelyForRemoval(ctx, command.getFqn());
return invokeNextInterceptor(ctx, command);
}
@@ -129,13 +126,14 @@
List<Fqn> fqnsToEvict;
if (command.getFqn().isRoot())
{
- // special treatment - deal with all of root's kids instead.
+ // if this is the root node, do not attempt to lock this for writing but instead just get all direct children of root.
Map<Object, InternalNode> children = dataContainer.peekInternalNode(Fqn.ROOT, false).getChildrenMap();
- if (children != null && !children.isEmpty())
+ if (!children.isEmpty())
{
fqnsToEvict = new LinkedList<Fqn>();
+ // lock recursively.
for (InternalNode child : children.values())
- fqnsToEvict.addAll(helper.wrapNodesForWriting(ctx, child.getFqn()));
+ fqnsToEvict.addAll(helper.wrapNodesRecursivelyForRemoval(ctx, child.getFqn()));
}
else
{
@@ -144,9 +142,11 @@
}
else
{
- fqnsToEvict = helper.wrapNodesForWriting(ctx, command.getFqn());
+ // lock current node recursively.
+ fqnsToEvict = helper.wrapNodesRecursivelyForRemoval(ctx, command.getFqn());
}
+ // set these in the evict command so that the command is aware of what needs to be evicted.
command.setNodesToEvict(fqnsToEvict);
}
@@ -155,8 +155,9 @@
{
if (command.getFqn().isRoot())
{
+ // if this is the root node, do not attempt to lock this for writing but instead just get all direct children of root.
Map<Object, NodeSPI> children = dataContainer.peekInternalNode(Fqn.ROOT, false).getChildrenMap();
- if (children != null && !children.isEmpty())
+ if (!children.isEmpty())
{
for (NodeSPI child : children.values())
helper.wrapNodeForWriting(ctx, child.getFqn(), true, false, false, true, true);
@@ -164,6 +165,7 @@
}
else
{
+ // just wrap the node for writing. Do not create if absent.
helper.wrapNodeForWriting(ctx, command.getFqn(), true, false, false, true, true);
}
}
@@ -173,7 +175,7 @@
{
// this should be handled the same as a recursive evict command.
ctx.getOptionOverrides().setLockAcquisitionTimeout(0);
- if (!command.getFqn().isRoot()) helper.wrapNodesForWriting(ctx, command.getFqn());
+ if (!command.getFqn().isRoot()) helper.wrapNodesRecursivelyForRemoval(ctx, command.getFqn());
return invokeNextInterceptor(ctx, command);
}
@@ -229,20 +231,21 @@
@Override
public Object handleMoveCommand(InvocationContext ctx, MoveCommand command) throws Throwable
{
- // nodes we need to get WLs for:
- // node we are moving FROM (and it's parent and children.) Same as removeNode.
- List<Fqn> nodeAndChildren = helper.wrapNodesForWriting(ctx, command.getFqn());
+ // Nodes we need to get WLs for:
+ // 1) node we are moving FROM, and it's parent and ALL children. Same as removeNode.
+ List<Fqn> nodeAndChildren = helper.wrapNodesRecursivelyForRemoval(ctx, command.getFqn());
+
Fqn newParent = command.getTo();
Fqn oldParent = command.getFqn().getParent();
- // now lock the new parent.
+ // 2) The new parent.
helper.wrapNodeForWriting(ctx, newParent, true, true, false, false, false);
- if (!oldParent.equals(newParent) && nodeAndChildren != null)
+ if (!oldParent.equals(newParent))
{
// the nodeAndChildren list contains all child nodes, including the node itself.
- // now obtain locks on the new places these new nodes will occupy.
+ // 3) now obtain locks on the new places these new nodes will occupy.
for (Fqn f : nodeAndChildren)
{
Fqn newChildFqn = f.replaceAncestor(oldParent, newParent);
@@ -313,6 +316,7 @@
return retval;
}
+ @SuppressWarnings("unchecked")
protected void doAfterCall(InvocationContext ctx, VisitableCommand command)
{
// for non-transactional stuff.
@@ -321,21 +325,7 @@
List<Fqn> locks;
if (!(locks = ctx.getLocks()).isEmpty())
{
- // clean up.
- // unlocking needs to be done in reverse order.
- ListIterator<Fqn> it = locks.listIterator(locks.size());
- Object owner = Thread.currentThread();
- while (it.hasPrevious())
- {
- Fqn f = it.previous();
- // for each of these, swap refs
- NodeSPI rcn = ctx.lookUpNode(f);
- if (rcn != null) rcn.commitUpdate(ctx, dataContainer, nodeFactory); // could be null with read-committed
- // and then unlock
- if (trace) log.trace("Releasing lock on [" + f + "] for thread " + owner);
- lockManager.unlock(f, owner);
- }
- ctx.clearLocks();
+ cleanupLocks(locks, ctx, Thread.currentThread(), true);
}
else
{
@@ -344,47 +334,55 @@
}
else
{
- if (trace)
- log.trace("Nothing to do since there is a transaction in scope.");
+ if (trace) log.trace("Nothing to do since there is a transaction in scope.");
}
}
- protected void transactionalCleanup(boolean commit, InvocationContext ctx)
+ private void cleanupLocks(List<Fqn> locks, InvocationContext ctx, Object owner, boolean commit)
{
- if (ctx.getTransactionContext() != null)
+ // clean up.
+ // unlocking needs to be done in reverse order.
+ ListIterator<Fqn> it = locks.listIterator(locks.size());
+
+ if (commit)
{
- List<Fqn> locks;
- if (!(locks = ctx.getTransactionContext().getLocks()).isEmpty())
+ while (it.hasPrevious())
{
- // clean up.
- // unlocking needs to be done in reverse order.
- ListIterator<Fqn> it = locks.listIterator(locks.size());
- Object owner = ctx.getGlobalTransaction();
- while (it.hasPrevious())
- {
- Fqn f = it.previous();
- NodeSPI rcn = ctx.lookUpNode(f);
- if (rcn != null) // could be null with read-committed
- {
- if (commit)
- {
- // for each of these, swap refs
- rcn.commitUpdate(ctx, dataContainer, nodeFactory);
- }
- else
- {
- rcn.rollbackUpdate();
- }
- }
- // and then unlock
- if (trace) log.trace("Releasing lock on [" + f + "] for transaction " + owner);
- lockManager.unlock(f, owner);
- }
- ctx.clearLocks();
+ Fqn f = it.previous();
+ NodeSPI rcn = ctx.lookUpNode(f);
+ // could be null with read-committed
+ if (rcn != null) rcn.commitUpdate(ctx, dataContainer);
+ // and then unlock
+ if (trace) log.trace("Releasing lock on [" + f + "] for owner " + owner);
+ lockManager.unlock(f, owner);
}
}
else
{
+ while (it.hasPrevious())
+ {
+ Fqn f = it.previous();
+ NodeSPI rcn = ctx.lookUpNode(f);
+ // could be null with read-committed
+ if (rcn != null) rcn.rollbackUpdate();
+ // and then unlock
+ if (trace) log.trace("Releasing lock on [" + f + "] for owner " + owner);
+ lockManager.unlock(f, owner);
+ }
+ }
+ ctx.clearLocks();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void transactionalCleanup(boolean commit, InvocationContext ctx)
+ {
+ if (ctx.getTransactionContext() != null)
+ {
+ List<Fqn> locks = ctx.getTransactionContext().getLocks();
+ if (!locks.isEmpty()) cleanupLocks(locks, ctx, ctx.getGlobalTransaction(), commit);
+ }
+ else
+ {
throw new IllegalStateException("Attempting to do a commit or rollback but there is no transactional context in scope. " + ctx);
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticCreateIfNotExistsInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticCreateIfNotExistsInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticCreateIfNotExistsInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -37,7 +37,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @author <a href="mailto:stevew@jofti.com">Steve Woodcock (stevew(a)jofti.com)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticCreateIfNotExistsInterceptor extends OptimisticInterceptor
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -30,7 +30,9 @@
* Abstract interceptor for optimistic locking
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public abstract class OptimisticInterceptor extends CommandInterceptor
{
protected TransactionManager txManager;
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -27,7 +27,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @author <a href="mailto:stevew@jofti.com">Steve Woodcock (stevew(a)jofti.com)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticLockingInterceptor extends OptimisticInterceptor
{
@Start
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -49,7 +49,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @author <a href="mailto:stevew@jofti.com">Steve Woodcock (stevew(a)jofti.com)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticNodeInterceptor extends OptimisticInterceptor
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -50,7 +50,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @author <a href="mailto:stevew@jofti.com">Steve Woodcock (stevew(a)jofti.com)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticReplicationInterceptor extends BaseRpcInterceptor
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -24,7 +24,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 2.2.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticTxInterceptor extends TxInterceptor
{
protected final ModificationsReplayVisitor replayVisitor = new ModificationsReplayVisitor();
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticValidatorInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticValidatorInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticValidatorInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -45,7 +45,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @author Steve Woodcock (<a href="mailto:stevew@jofti.com">stevew(a)jofti.com</a>)
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticValidatorInterceptor extends OptimisticInterceptor
{
private boolean useTombstones;
@@ -139,6 +141,7 @@
return invokeNextInterceptor(ctx, command);
}
+ @SuppressWarnings("unchecked")
private void commitTransaction(InvocationContext ctx)
{
GlobalTransaction gtx = getGlobalTransaction(ctx);
@@ -194,14 +197,11 @@
{
// mark it as invalid so any direct references are marked as such
Map childNode = underlyingNode.getChildrenMapDirect();
- if (childNode != null)
+ for (Object o : childNode.values())
{
- for (Object o : childNode.values())
- {
- NodeSPI cn = (NodeSPI) o;
- cn.setValid(false, true);
- if (!useTombstones) underlyingNode.removeChildDirect(cn.getFqn().getLastElement());
- }
+ NodeSPI cn = (NodeSPI) o;
+ cn.setValid(false, true);
+ if (!useTombstones) underlyingNode.removeChildDirect(cn.getFqn().getLastElement());
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -55,7 +55,9 @@
*
* @author Bela Ban
* @version $Id$
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessimisticLockInterceptor extends PrePostProcessingCommandInterceptor
{
private DataContainer dataContainer;
@@ -289,6 +291,7 @@
* @param transactionContext transaction entry
* @throws InterruptedException in the event of interruption
*/
+ @SuppressWarnings("unchecked")
public void lockAllForRemoval(NodeSPI node, InvocationContext ctx, TransactionContext transactionContext) throws InterruptedException
{
if (node == null) return;
@@ -300,13 +303,10 @@
// now children.
Map<Object, NodeSPI> children = node.getChildrenMapDirect();
- if (children != null)
+ for (NodeSPI child : children.values())
{
- for (NodeSPI child : children.values())
- {
- // lock child.
- lockAllForRemoval(child, ctx, transactionContext);
- }
+ // lock child.
+ lockAllForRemoval(child, ctx, transactionContext);
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/LegacyInvocationContext.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/LegacyInvocationContext.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/LegacyInvocationContext.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -11,7 +11,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class LegacyInvocationContext extends AbstractInvocationContext
{
DataContainer container;
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/NodeInvocationDelegate.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/NodeInvocationDelegate.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/NodeInvocationDelegate.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -8,7 +8,6 @@
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
import org.jboss.cache.Node;
-import org.jboss.cache.NodeFactory;
import org.jboss.cache.NodeNotValidException;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.config.Option;
@@ -525,12 +524,12 @@
throw new UnsupportedOperationException();
}
- public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
+ public void markForUpdate(DataContainer container, boolean writeSkewCheck)
{
throw new UnsupportedOperationException();
}
- public void commitUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory)
+ public void commitUpdate(InvocationContext ctx, DataContainer container)
{
throw new UnsupportedOperationException();
}
Modified: core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -136,6 +136,7 @@
}
}
+ @SuppressWarnings("unchecked")
private boolean lockRecursively(InternalNode node, long timeoutMillis, boolean excludeInternalFqns, InvocationContext ctx) throws InterruptedException
{
if (excludeInternalFqns && internalFqns.contains(node.getFqn()))
@@ -150,7 +151,6 @@
// need to recursively walk through the node's children and acquire locks. This needs to happen using API methods
// since any cache loading will need to happen.
- //Set<InternalNode> children = node.getChildren();
Map<Object, InternalNode> children = node.getChildrenMap();
try
{
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeFactory.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeFactory.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -49,6 +49,7 @@
* @return a ReadCommittedNode
*/
@Override
+ @SuppressWarnings("unchecked")
public ReadCommittedNode createWrappedNode(InternalNode<K, V> node)
{
if (node == null) return useRepeatableRead ? NULL_MARKER : null;
@@ -58,36 +59,20 @@
return rcn;
}
-// private NodeSPI<K, V> initializeNodeInvocationDelegate(UnversionedNode<K, V> internal)
-// {
-// internal.injectDependencies(cache, commandsFactory, this);
-//
-// // always assume that new nodes do not have data loaded
-// internal.setDataLoaded(false);
-// NodeSPI<K, V> nid = createNodeInvocationDelegate(internal, !useRepeatableRead);
-//
-// // back reference
-// internal.setDelegate(nid);
-// return nid;
-// }
-
@Override
public NodeSPI<K, V> createNode(Fqn fqn, NodeSPI<K, V> parent, Map<K, V> data)
{
-// UnversionedNode<K, V> internal = new UnversionedNode<K, V>(fqn, cache, lockChildForInsertRemove, data);
-// return initializeNodeInvocationDelegate(internal);
throw new UnsupportedOperationException();
}
@Override
public NodeSPI<K, V> createNode(Fqn fqn, NodeSPI<K, V> parent)
{
-// UnversionedNode<K, V> internal = new UnversionedNode<K, V>(fqn, cache, lockChildForInsertRemove);
-// return initializeNodeInvocationDelegate(internal);
throw new UnsupportedOperationException();
}
@Override
+ @SuppressWarnings("unchecked")
public NodeSPI<K, V> createRootNode()
{
return createWrappedNode(createInternalNode(Fqn.ROOT));
@@ -112,18 +97,8 @@
return createNode(Fqn.fromRelativeElements(parent.getFqn(), childName), parent);
}
-// @Override
-// protected NodeSPI<K, V> createNodeInvocationDelegate(InternalNode<K, V> internalNode, boolean wrapWithNodeReference)
-// {
-// if (wrapWithNodeReference && internalNode instanceof NodeReference)
-// throw new IllegalArgumentException("Cannot wrap a NodeReference with a NodeReference!");
-// if (wrapWithNodeReference && useRepeatableRead)
-// throw new IllegalArgumentException("Cannot use NodeReferences with RepeatableRead!");
-// if (wrapWithNodeReference) internalNode = new NodeReference<K, V>(internalNode);
-// return super.createNodeInvocationDelegate(internalNode, false);
-// }
-
@Override
+ @SuppressWarnings("unchecked")
public InternalNode<K, V> createAndRegister(Fqn fqn, InternalNode<K, V> parent, InvocationContext ctx, boolean attachToParent)
{
InternalNode<K, V> child;
@@ -141,7 +116,7 @@
if (trace) log.trace("Created new child with fqn [" + fqn + "]");
- TransactionContext tctx = null;
+ TransactionContext tctx;
if ((tctx = ctx.getTransactionContext()) != null)
{
CreateNodeCommand createNodeCommand = commandsFactory.buildCreateNodeCommand(fqn);
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -7,6 +7,7 @@
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
import org.jboss.cache.NodeFactory;
+import org.jboss.cache.NodeNotExistsException;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.config.Configuration;
import org.jboss.cache.factories.annotations.Inject;
@@ -18,6 +19,7 @@
import org.jboss.cache.lock.TimeoutException;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -98,6 +100,7 @@
return wrapNodeForReading(ctx, fqn, ctx.getOptionOverrides().isForceWriteLock());
}
+ @SuppressWarnings("unchecked")
private NodeSPI wrapNodeForReading(InvocationContext ctx, Fqn f, boolean writeLockForced) throws InterruptedException
{
NodeSPI n;
@@ -156,6 +159,7 @@
* data structure. It will lock the node, and potentially the parent as well, if necessary. If the parent is locked,
* it too will be added to the context if it wasn't there already.
*
+ * @param context invocation context
* @param fqn to retrieve
* @param lockForWriting if true, a lock will be acquired.
* @param createIfAbsent if true, will be created if absent.
@@ -163,7 +167,9 @@
* @param forRemoval if true, the parent may also be locked if locking parents for removal is necessary.
* @param force if true, will force the write lock even if the node is null.
* @return a wrapped node, or null.
+ * @throws InterruptedException if interrupted
*/
+ @SuppressWarnings("unchecked")
public NodeSPI wrapNodeForWriting(InvocationContext context, Fqn fqn, boolean lockForWriting, boolean createIfAbsent, boolean includeInvalidNodes, boolean forRemoval, boolean force) throws InterruptedException
{
Fqn parentFqn = null;
@@ -175,7 +181,7 @@
if (lockForWriting && acquireLock(context, fqn))
{
// create a copy of the underlying node
- n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
+ n.markForUpdate(dataContainer, writeSkewCheck);
}
if (trace) log.trace("Retrieving wrapped node " + fqn);
if (n.isDeleted() && createIfAbsent)
@@ -200,7 +206,7 @@
}
n = nodeFactory.createWrappedNode(in);
context.putLookedUpNode(fqn, n);
- if (needToCopy) n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
+ if (needToCopy) n.markForUpdate(dataContainer, writeSkewCheck);
}
else if (createIfAbsent) // else, do we need to create one?
{
@@ -212,21 +218,17 @@
if (parentLockNeeded && acquireLock(context, parentFqn))
{
ReadCommittedNode parentRCN = (ReadCommittedNode) context.lookUpNode(parentFqn);
- parentRCN.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
+ parentRCN.markForUpdate(dataContainer, writeSkewCheck);
}
// now to lock and create the node. Lock first to prevent concurrent creation!
acquireLock(context, fqn);
in = nodeFactory.createAndRegister(fqn, null, context, false);
-// NodeSPI temp = parent.getOrCreateChild(fqn.getLastElement(), context.getGlobalTransaction());
-// parent.removeChildDirect(fqn.getLastElement());
-// in = ((NodeInvocationDelegate) temp).getDelegationTarget();
-
n = nodeFactory.createWrappedNode(in);
n.setCreated(true);
context.putLookedUpNode(fqn, n);
- n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
+ n.markForUpdate(dataContainer, writeSkewCheck);
}
}
@@ -241,6 +243,50 @@
}
/**
+ * The same as {@link #wrapNodeForWriting(org.jboss.cache.invocation.InvocationContext, org.jboss.cache.Fqn, boolean, boolean, boolean, boolean, boolean)}
+ * except that it takes in an {@link org.jboss.cache.InternalNode} instead of a {@link Fqn}. Saves on a lookup.
+ * <p/>
+ * Also assumes that the node exists, and hence will not be created.
+ * <p/>
+ *
+ * @param context invocation context
+ * @param node node to wrap
+ * @return a wrapped node, or null.
+ * @throws InterruptedException if interrupted
+ */
+ @SuppressWarnings("unchecked")
+ public NodeSPI wrapNodeForWriting(InvocationContext context, InternalNode node) throws InterruptedException
+ {
+ Fqn fqn = node.getFqn();
+ NodeSPI n = context.lookUpNode(fqn);
+ if (n != null) // exists in context! Just acquire lock if needed, and wrap.
+ {
+ // acquire lock if needed
+ if (acquireLock(context, fqn))
+ {
+ // create a copy of the underlying node
+ n.markForUpdate(dataContainer, writeSkewCheck);
+ }
+ if (trace) log.trace("Retrieving wrapped node " + fqn);
+ }
+ else
+ {
+ // exists in cache! Just acquire lock if needed, and wrap.
+ // do we need a lock?
+ boolean needToCopy = false;
+ if (acquireLock(context, fqn))
+ {
+ needToCopy = true;
+ }
+ n = nodeFactory.createWrappedNode(node);
+ context.putLookedUpNode(fqn, n);
+ if (needToCopy) n.markForUpdate(dataContainer, writeSkewCheck);
+ }
+
+ return n;
+ }
+
+ /**
* Wraps a node and all its subnodes and adds them to the context, acquiring write locks for them all.
*
* @param ctx context
@@ -248,7 +294,8 @@
* @return a list of Fqns of locks acquired in this call.
* @throws InterruptedException if the lock manager is interrupted.
*/
- public List<Fqn> wrapNodesForWriting(InvocationContext ctx, Fqn fqn) throws InterruptedException
+ @SuppressWarnings("unchecked")
+ public List<Fqn> wrapNodesRecursivelyForRemoval(InvocationContext ctx, Fqn fqn) throws InterruptedException
{
// when removing a node we want to get a lock on the Fqn anyway and return the wrapped node.
if (fqn.isRoot()) throw new CacheException("Attempting to remove Fqn.ROOT!");
@@ -257,49 +304,57 @@
// inspect parent
boolean needToCopyParent = false;
boolean parentLockNeeded = isParentLockNeeded(parentFqn, ctx);
+ ReadCommittedNode parent = null;
if (parentLockNeeded)
{
needToCopyParent = acquireLock(ctx, parentFqn);
// Ensure the node is in the context.
- putNodeInContext(ctx, parentFqn, needToCopyParent);
+ parent = wrapAndPutInContext(ctx, parentFqn, needToCopyParent);
}
boolean needToCopyNode = acquireLock(ctx, fqn);
// Ensure the node is in the context.
- putNodeInContext(ctx, fqn, needToCopyNode);
+ ReadCommittedNode node = wrapAndPutInContext(ctx, fqn, needToCopyNode);
- ReadCommittedNode node = (ReadCommittedNode) ctx.lookUpNode(fqn);
-
- // update child ref on parent to point to child as this is now a copy.
- if (node != null && !(node.isNullNode()))
+ if (node == null || node.isNullNode())
{
+ // node does not exist; return an empty list since there is nothing to remove!
+ return Collections.emptyList();
+ }
+ else
+ {
+ // update child ref on parent to point to child as this is now a copy.
if (parentLockNeeded && (needToCopyNode || needToCopyParent))
{
- ReadCommittedNode parent = (ReadCommittedNode) ctx.lookUpNode(parentFqn);
+ if (parent == null) throw new NodeNotExistsException("Parent node " + parentFqn + " does not exist!");
parent.getDelegationTarget().addChild(node.getDelegationTarget());
-
-// parent.addChildDirect(nodeFactory.createNodeInvocationDelegate(node.getDelegationTarget(), configuration.getIsolationLevel() == IsolationLevel.READ_COMMITTED));
}
// now deal with children.
-// Map childMap = node.getChildrenMapDirect();
Map<Object, InternalNode<?, ?>> childMap = node.getDelegationTarget().getChildrenMap();
List<Fqn> fqnsToBeRemoved = new LinkedList<Fqn>();
fqnsToBeRemoved.add(fqn);
- if (childMap == null || childMap.isEmpty()) return fqnsToBeRemoved;
- for (InternalNode n : childMap.values())
+ if (!childMap.isEmpty())
{
- lockForWritingRecursive(n.getFqn(), ctx, fqnsToBeRemoved);
+ for (InternalNode n : childMap.values()) lockForWritingRecursive(n.getFqn(), ctx, fqnsToBeRemoved);
}
return fqnsToBeRemoved;
}
-
- return null;
}
+ /**
+ * Locks a node recursively for writing, not creating if it doesn't exist.
+ *
+ * @param fqn Fqn to lock
+ * @param ctx invocation context to add wrapped node to
+ * @param fqnList fqnList to update - this list should not be null but should be initially empty and will be populated
+ * with a list of all Fqns locked in this call.
+ * @throws InterruptedException if interrupted
+ */
+ @SuppressWarnings("unchecked")
private void lockForWritingRecursive(Fqn fqn, InvocationContext ctx, List<Fqn> fqnList) throws InterruptedException
{
acquireLock(ctx, fqn); // lock node
@@ -309,30 +364,51 @@
NodeSPI rcn = wrapNodeForWriting(ctx, fqn, true, false, true, false, false);
if (rcn != null)
{
- rcn.markForUpdate(ctx, dataContainer, nodeFactory, writeSkewCheck);
+ rcn.markForUpdate(dataContainer, writeSkewCheck);
+ Map<Object, InternalNode<?, ?>> children = rcn.getDelegationTarget().getChildrenMap();
+ for (InternalNode child : children.values()) lockForWritingRecursive(child, ctx, fqnList);
+ }
+ }
- // Why is this necessary again?!?? - Manik, 24Jul08
+ /**
+ * Identical to {@link #lockForWritingRecursive(org.jboss.cache.Fqn, org.jboss.cache.invocation.InvocationContext, java.util.List)}
+ * except that it uses an {@link org.jboss.cache.InternalNode} instead of an {@link Fqn} - saves a lookup.
+ *
+ * @param node node to lock recursively
+ * @param ctx invocation context
+ * @param fqnList list of Fqns to add to
+ * @throws InterruptedException if interrupted
+ */
+ @SuppressWarnings("unchecked")
+ private void lockForWritingRecursive(InternalNode node, InvocationContext ctx, List<Fqn> fqnList) throws InterruptedException
+ {
+ Fqn fqn = node.getFqn();
+ acquireLock(ctx, fqn); // lock node
+ if (fqnList != null) fqnList.add(fqn);
-// NodeSPI parent = ctx.lookUpNode(fqn.getParent());
-// parent.getDelegationTarget().addChild(rcn.getDelegationTarget());
-
- // yukky logic.
-
-// parent.addChildDirect(nodeFactory.createNodeInvocationDelegate(rcn.getDelegationTarget(), configuration.getIsolationLevel() == IsolationLevel.READ_COMMITTED));
-
-// Map<Object, NodeSPI> children = rcn.getChildrenMapDirect();
+ // now wrap and add to the context
+ NodeSPI rcn = wrapNodeForWriting(ctx, node);
+ if (rcn != null)
+ {
+ rcn.markForUpdate(dataContainer, writeSkewCheck);
Map<Object, InternalNode<?, ?>> children = rcn.getDelegationTarget().getChildrenMap();
- if (children != null)
- {
- for (InternalNode child : children.values())
- {
- lockForWritingRecursive(child.getFqn(), ctx, fqnList);
- }
- }
+ for (InternalNode child : children.values()) lockForWritingRecursive(child, ctx, fqnList);
}
}
- private void putNodeInContext(InvocationContext ctx, Fqn fqn, boolean needToCopyNode)
+
+ /**
+ * Wraps a node and puts it in the context, optionally copying the node for updating if <tt>forUpdate</tt> is <tt>true</tt>.
+ * If the node is already in the context, a new wrapped node is not created, but the existing one is still checked
+ * for changes and potentially marked for update if <tt>forUpdate</tt> is <tt>true</tt>.
+ *
+ * @param ctx invocation context to add node to
+ * @param fqn fqn of node to add
+ * @param forUpdate if true, the wrapped node is marked for update before adding to the context.
+ * @return the ReadCommittedNode wrapper, or null if the node does not exist.
+ */
+ @SuppressWarnings("unchecked")
+ private ReadCommittedNode wrapAndPutInContext(InvocationContext ctx, Fqn fqn, boolean forUpdate)
{
ReadCommittedNode node = (ReadCommittedNode) ctx.lookUpNode(fqn);
if (node == null)
@@ -342,17 +418,31 @@
ctx.putLookedUpNode(fqn, node);
}
- if (needToCopyNode && node != null && !node.isChanged()) // node could be null if using read-committed
- {
- node.markForUpdate(ctx, dataContainer, nodeFactory, writeSkewCheck);
- }
+ // node could be null if using read-committed
+ if (forUpdate && node != null && !node.isChanged()) node.markForUpdate(dataContainer, writeSkewCheck);
+
+ return node;
}
+ /**
+ * An overloaded version of {@link #isParentLockNeeded(org.jboss.cache.Fqn, org.jboss.cache.invocation.InvocationContext)}
+ * which takes in an {@link org.jboss.cache.InternalNode} instead of a {@link Fqn}.
+ *
+ * @param parent parent node to test
+ * @return true if parent lock is needed, false otherwise.
+ */
private boolean isParentLockNeeded(InternalNode parent)
{
return lockParentForChildInsertRemove || (parent != null && parent.isLockForChildInsertRemove());
}
+ /**
+ * Tests if locking the parent is necessary when locking a specific node.
+ *
+ * @param parent Fqn of parent node to check
+ * @param ctx invocation context
+ * @return true if parent lock is needed, false otherwise.
+ */
private boolean isParentLockNeeded(Fqn parent, InvocationContext ctx)
{
ReadCommittedNode parentNodeTmp = (ReadCommittedNode) ctx.lookUpNode(parent);
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/NullMarkerNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/NullMarkerNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/NullMarkerNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -2,8 +2,6 @@
import org.jboss.cache.DataContainer;
import org.jboss.cache.InternalNode;
-import org.jboss.cache.NodeFactory;
-import org.jboss.cache.invocation.InvocationContext;
/**
* A marker node to represent a null node for repeatable read, so that a read that returns a null can continue to return
@@ -50,7 +48,7 @@
* A no-op.
*/
@Override
- public void markForUpdate(InvocationContext ctx, DataContainer d, NodeFactory nodeFactory, boolean b)
+ public void markForUpdate(DataContainer d, boolean b)
{
// no op
}
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -5,7 +5,6 @@
import org.jboss.cache.DataContainer;
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
-import org.jboss.cache.NodeFactory;
import org.jboss.cache.NodeNotExistsException;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.invocation.InvocationContext;
@@ -37,6 +36,7 @@
}
}
+ @SuppressWarnings("unchecked")
public ReadCommittedNode(InternalNode node)
{
super(node);
@@ -80,22 +80,25 @@
}
@Override
- public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
+ public void markForUpdate(DataContainer container, boolean writeSkewCheck)
{
if (isFlagSet(CHANGED)) return; // already copied
- setFlag(CHANGED);
- if (!isFlagSet(CREATED))
+ setFlag(CHANGED); // mark as changed
+ if (!isFlagSet(CREATED)) // if newly created, then nothing to copy.
{
backup = node;
+ // don't copy the NodeReference but the InternalNode that the NodeReference delegates to.
InternalNode backupDelegationTarget = ((NodeReference) backup).getDelegate();
node = backupDelegationTarget.copy();
}
}
@Override
- public void commitUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory)
+ @SuppressWarnings("unchecked")
+ public void commitUpdate(InvocationContext ctx, DataContainer container)
{
+ // only do stuff if there are changes.
if (isFlagSet(CHANGED))
{
Fqn fqn = getFqn();
@@ -110,10 +113,11 @@
InternalNode parent = lookupParent(fqn, ctx, container);
parent.removeChild(fqn.getLastElement());
setValid(false, false);
- updateNode(ctx, container, nodeFactory);
+ updateNode(ctx, container);
}
else
{
+ // should never get here. Other layers should prevent a delete on root.
log.warn("Attempting to remove the root node. Not doing anything!");
}
}
@@ -121,14 +125,15 @@
{
// add newly created nodes to parents.
InternalNode parent = lookupParent(fqn, ctx, container);
-// parent.addChildDirect(nodeFactory.createNodeInvocationDelegate(node, false));
parent.addChild(node);
}
else
{
- updateNode(ctx, container, nodeFactory);
+ // Only content has been updated, just update refs.
+ updateNode(ctx, container);
}
+ // reset internal flags and refs to backups, etc.
reset();
}
}
@@ -154,12 +159,14 @@
InternalNode retval;
Fqn parentFqn = fqn.getParent();
NodeSPI parent = ctx.lookUpNode(parentFqn);
+ // first check if the parent is cached in the context.
if (parent != null)
{
retval = parent.getDelegationTarget();
}
else
{
+ // if not, get it from the data container. No need to wrap here, we're just going to update the parent's child map.
retval = container.peekInternalNode(parentFqn, false);
}
if (retval == null)
@@ -172,9 +179,9 @@
*
* @param ctx invocation context
* @param dataContainer data container
- * @param nf node factory
*/
- protected void updateNode(InvocationContext ctx, DataContainer dataContainer, NodeFactory nf)
+ @SuppressWarnings("unchecked")
+ protected void updateNode(InvocationContext ctx, DataContainer dataContainer)
{
// swap refs
if (!isFlagSet(CREATED)) ((NodeReference) backup).setDelegate(node);
@@ -209,7 +216,8 @@
unsetFlag(CREATED);
}
- // do not propagate deletion flags to the underlying node.
+ // do not delegate deletion flags to the InternalNode since this will cause problems with concurrent readers. Maintain
+ // deletion information here and update on commit.
@Override
public boolean isDeleted()
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -5,7 +5,6 @@
import org.jboss.cache.DataContainer;
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
-import org.jboss.cache.NodeFactory;
import org.jboss.cache.invocation.InvocationContext;
import static org.jboss.cache.mvcc.ReadCommittedNode.Flags.CHANGED;
import static org.jboss.cache.mvcc.ReadCommittedNode.Flags.DELETED;
@@ -27,7 +26,7 @@
}
@Override
- public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
+ public void markForUpdate(DataContainer container, boolean writeSkewCheck)
{
if (isFlagSet(CHANGED)) return; // already copied
@@ -55,15 +54,17 @@
}
@Override
- protected void updateNode(InvocationContext ctx, DataContainer dataContainer, NodeFactory nf)
+ @SuppressWarnings("unchecked")
+ protected void updateNode(InvocationContext ctx, DataContainer dataContainer)
{
- if (getFqn().isRoot())
+ Fqn fqn = getFqn();
+ if (fqn.isRoot())
{
dataContainer.setRoot(node);
}
else if (!isFlagSet(DELETED))
{
- InternalNode parent = lookupParent(getFqn(), ctx, dataContainer);
+ InternalNode parent = lookupParent(fqn, ctx, dataContainer);
parent.addChild(node);
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/OptimisticNodeFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/OptimisticNodeFactory.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/OptimisticNodeFactory.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -15,7 +15,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class OptimisticNodeFactory<K, V> extends AbstractNodeFactory<K, V>
{
private LockStrategyFactory lockStrategyFactory;
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspace.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspace.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspace.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -21,8 +21,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @author Steve Woodcock (<a href="mailto:stevew@jofti.com">stevew(a)jofti.com</a>)
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
-
+@Deprecated
public interface TransactionWorkspace<K, V>
{
/**
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspaceImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspaceImpl.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/TransactionWorkspaceImpl.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -19,7 +19,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @author Steve Woodcock (<a href="mailto:stevew@jofti.com">stevew(a)jofti.com</a>)
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class TransactionWorkspaceImpl<K, V> implements TransactionWorkspace<K, V>
{
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNode.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNode.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -24,7 +24,9 @@
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @author Steve Woodcock (<a href="mailto:stevew@jofti.com">stevew(a)jofti.com</a>)
* @since 1.3.0
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public interface WorkspaceNode<K, V>// extends Node<K, V>
{
Fqn getFqn();
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -32,7 +32,9 @@
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @author Steve Woodcock (<a href="mailto:stevew@jofti.com">stevew(a)jofti.com</a>)
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class WorkspaceNodeImpl<K, V> extends AbstractNode<K, V> implements WorkspaceNode<K, V>
{
@@ -215,7 +217,7 @@
private void initialiseChildMap()
{
Map<Object, Node<K, V>> childrenMap = node.getChildrenMapDirect();
- this.optimisticChildNodeMap = childrenMap == null ? new HashMap() : new HashMap(childrenMap);
+ this.optimisticChildNodeMap = new HashMap(childrenMap);
}
private void realPut(Map<K, V> data, boolean eraseData)
Modified: core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -19,8 +19,9 @@
*
* @author <a href="mailto:manik@jboss.org">Manik Surtani (manik(a)jboss.org)</a>
* @author <a href="mailto:stevew@jofti.com">Steve Woodcock (stevew(a)jofti.com)</a>
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
-
+@Deprecated
public class OptimisticTransactionContext extends PessimisticTransactionContext
{
private TransactionWorkspace transactionWorkSpace = new TransactionWorkspaceImpl();
Modified: core/trunk/src/main/java/org/jboss/cache/transaction/PessimisticTransactionContext.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/PessimisticTransactionContext.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/PessimisticTransactionContext.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -38,7 +38,9 @@
* @author <a href="mailto:bela@jboss.org">Bela Ban</a>
* @author Manik Surtani
* @version $Revision$
+ * @deprecated will be removed along with optimistic and pessimistic locking.
*/
+@Deprecated
public class PessimisticTransactionContext implements TransactionContext
{
Modified: core/trunk/src/main/java/org/jboss/cache/util/concurrent/SelfInitializingConcurrentHashMap.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/util/concurrent/SelfInitializingConcurrentHashMap.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/main/java/org/jboss/cache/util/concurrent/SelfInitializingConcurrentHashMap.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -1,7 +1,5 @@
package org.jboss.cache.util.concurrent;
-import org.jboss.cache.UnversionedNode;
-
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -18,44 +16,8 @@
*/
public class SelfInitializingConcurrentHashMap<K, V> implements ConcurrentMap<K, V>
{
- static boolean DEBUG = false; // TODO remove this
-
private volatile ConcurrentMap<K, V> delegate;
-// private int initialCapacity = -1, concurrencyLevel = -1;
-// private float loadFactor = -1;
- /**
- * Creates a new delegate map and will use a default constructor to initialize the {@link java.util.concurrent.ConcurrentMap}
- * it will eventually delegate to.
- */
- public SelfInitializingConcurrentHashMap()
- {
-
- }
-
- /**
- * Creates a new delegate map and will use the params passed in to initialize the {@link java.util.concurrent.ConcurrentMap}
- * it will eventually delegate to.
- *
- * @param initialCapacity the initial capacity. The implementation
- * performs internal sizing to accommodate this many elements.
- * @param loadFactor the load factor threshold, used to control resizing.
- * Resizing may be performed when the average number of elements per
- * bin exceeds this threshold.
- * @param concurrencyLevel the estimated number of concurrently
- * updating threads. The implementation performs internal sizing
- * to try to accommodate this many threads.
- * @throws IllegalArgumentException if the initial capacity is
- * negative or the load factor or concurrencyLevel are
- * nonpositive.
- */
-// public SelfInitializingConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
-// {
-// this.initialCapacity = initialCapacity;
-// this.loadFactor = loadFactor;
-// this.concurrencyLevel = concurrencyLevel;
-// }
-
// -------------- initialization methods and helpers ----------------------
private ConcurrentMap<K, V> getDelegate()
{
@@ -66,27 +28,13 @@
private synchronized void init()
{
// Reminiscent of DCL but the delegate here is volatile so construction reordering should not affect.
- if (delegate == null)
- {
- delegate = new ConcurrentHashMap<K, V>(4, 0.75f, 4);
- // hard-coded for node child maps for now
-
-// if (initialCapacity == -1 || concurrencyLevel == -1 || loadFactor == -1)
-// {
-// delegate = new ConcurrentHashMap<K, V>();
-// }
-// else
-// {
-// delegate = new ConcurrentHashMap<K, V>(initialCapacity, loadFactor, concurrencyLevel);
-// }
- }
+ if (delegate == null) delegate = new ConcurrentHashMap<K, V>(4, 0.75f, 4);
}
// -------------- Public API methods that will trigger initialization ----------------------
public final V put(K key, V value)
{
- if (DEBUG) if (value instanceof UnversionedNode) throw new RuntimeException();
return getDelegate().put(key, value);
}
@@ -102,19 +50,16 @@
public final V putIfAbsent(K key, V value)
{
- if (DEBUG) if (value instanceof UnversionedNode) throw new RuntimeException();
return getDelegate().putIfAbsent(key, value);
}
public final boolean replace(K key, V oldValue, V newValue)
{
- if (DEBUG) if (oldValue instanceof UnversionedNode) throw new RuntimeException();
return getDelegate().replace(key, oldValue, newValue);
}
public final V replace(K key, V value)
{
- if (DEBUG) if (value instanceof UnversionedNode) throw new RuntimeException();
return getDelegate().replace(key, value);
}
@@ -157,19 +102,19 @@
public final Set<K> keySet()
{
- if (delegate == null) return Collections.emptySet();
+ if (delegate == null || delegate.isEmpty()) return Collections.emptySet();
return delegate.keySet();
}
public final Collection<V> values()
{
- if (delegate == null) return Collections.emptySet();
+ if (delegate == null || delegate.isEmpty()) return Collections.emptySet();
return delegate.values();
}
public final Set<Entry<K, V>> entrySet()
{
- if (delegate == null) return Collections.emptySet();
+ if (delegate == null || delegate.isEmpty()) return Collections.emptySet();
return delegate.entrySet();
}
Modified: core/trunk/src/test/java/org/jboss/cache/mock/NodeSpiMock.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mock/NodeSpiMock.java 2008-07-31 09:23:24 UTC (rev 6459)
+++ core/trunk/src/test/java/org/jboss/cache/mock/NodeSpiMock.java 2008-07-31 11:07:45 UTC (rev 6460)
@@ -5,7 +5,6 @@
import org.jboss.cache.Fqn;
import org.jboss.cache.InternalNode;
import org.jboss.cache.Node;
-import org.jboss.cache.NodeFactory;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.invocation.InvocationContext;
import org.jboss.cache.lock.NodeLock;
@@ -301,12 +300,12 @@
throw new UnsupportedOperationException();
}
- public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
+ public void markForUpdate(DataContainer container, boolean writeSkewCheck)
{
throw new UnsupportedOperationException();
}
- public void commitUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory)
+ public void commitUpdate(InvocationContext ctx, DataContainer container)
{
throw new UnsupportedOperationException();
}
16 years, 5 months
JBoss Cache SVN: r6459 - core/trunk/src/test/java/org/jboss/cache/marshall.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-31 05:23:24 -0400 (Thu, 31 Jul 2008)
New Revision: 6459
Modified:
core/trunk/src/test/java/org/jboss/cache/marshall/CacheMarshaller210Test.java
Log:
Fixed test
Modified: core/trunk/src/test/java/org/jboss/cache/marshall/CacheMarshaller210Test.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/marshall/CacheMarshaller210Test.java 2008-07-31 09:18:06 UTC (rev 6458)
+++ core/trunk/src/test/java/org/jboss/cache/marshall/CacheMarshaller210Test.java 2008-07-31 09:23:24 UTC (rev 6459)
@@ -1,8 +1,8 @@
package org.jboss.cache.marshall;
import org.jboss.cache.Fqn;
+import org.jboss.cache.commands.legacy.write.PessPutKeyValueCommand;
import org.jboss.cache.commands.remote.ReplicateCommand;
-import org.jboss.cache.commands.write.PutKeyValueCommand;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
@@ -29,7 +29,7 @@
Map map = createMap(size);
Fqn fqn = Fqn.fromString("/my/stuff");
String key = "key";
- PutKeyValueCommand putCommand = new PutKeyValueCommand(null, fqn, key, map);
+ PessPutKeyValueCommand putCommand = new PessPutKeyValueCommand(null, fqn, key, map);
ReplicateCommand replicateCommand = new ReplicateCommand(putCommand);
byte[] buf = marshaller.objectToByteBuffer(replicateCommand);
16 years, 5 months
JBoss Cache SVN: r6458 - core/trunk/src/main/java/org/jboss/cache/buddyreplication.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-31 05:18:06 -0400 (Thu, 31 Jul 2008)
New Revision: 6458
Modified:
core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
Log:
Allows use of exists when cache is not in started state
Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-07-31 09:15:52 UTC (rev 6457)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-07-31 09:18:06 UTC (rev 6458)
@@ -261,6 +261,7 @@
}
@Start(priority = 20)
+ @SuppressWarnings("unchecked")
public void init() throws CacheException
{
setupInternals(configuration.getBuddyReplicationConfig());
@@ -294,6 +295,7 @@
broadcastBuddyPoolMembership();
+ cache.getInvocationContext().getOptionOverrides().setSkipCacheStatusCheck(true);
if (!cache.exists(BUDDY_BACKUP_SUBTREE_FQN))
{
// need to get the root DIRECTLY. cache.getRoot() will pass a call up the interceptor chain and we will
16 years, 5 months
JBoss Cache SVN: r6457 - in core/trunk/src/main/java/org/jboss/cache: invocation and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-31 05:15:52 -0400 (Thu, 31 Jul 2008)
New Revision: 6457
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java
Log:
Exists command should go up interceptor chain!
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java 2008-07-31 08:29:26 UTC (rev 6456)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java 2008-07-31 09:15:52 UTC (rev 6457)
@@ -8,6 +8,7 @@
import org.jboss.cache.RPCManager;
import org.jboss.cache.commands.VisitableCommand;
+import org.jboss.cache.commands.read.ExistsCommand;
import org.jboss.cache.commands.tx.CommitCommand;
import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
import org.jboss.cache.commands.tx.PrepareCommand;
@@ -49,6 +50,12 @@
}
@Override
+ public Object visitExistsNodeCommand(InvocationContext ctx, ExistsCommand command) throws Throwable
+ {
+ return handleAll(ctx, command, null, false);
+ }
+
+ @Override
public Object visitPutForExternalReadCommand(InvocationContext ctx, PutForExternalReadCommand command) throws Throwable
{
return handleAll(ctx, command, command.getGlobalTransaction(), false);
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java 2008-07-31 08:29:26 UTC (rev 6456)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java 2008-07-31 09:15:52 UTC (rev 6457)
@@ -16,6 +16,7 @@
import org.jboss.cache.buddyreplication.BuddyManager;
import org.jboss.cache.buddyreplication.GravitateResult;
import org.jboss.cache.commands.CommandsFactory;
+import org.jboss.cache.commands.read.ExistsCommand;
import org.jboss.cache.commands.read.GetChildrenNamesCommand;
import org.jboss.cache.commands.read.GetDataMapCommand;
import org.jboss.cache.commands.read.GetKeyValueCommand;
@@ -229,7 +230,10 @@
public boolean exists(Fqn fqn)
{
- return peek(fqn, false, false) != null;
+ InvocationContext ctx = invocationContextContainer.get();
+ cacheStatusCheck(ctx);
+ ExistsCommand command = commandsFactory.buildExistsNodeCommand(fqn);
+ return (Boolean) invoker.invoke(ctx, command);
}
public Notifier getNotifier()
16 years, 5 months
JBoss Cache SVN: r6456 - in core/trunk/src/test/java/org/jboss/cache/api/mvcc: read_committed and 1 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-31 04:29:26 -0400 (Thu, 31 Jul 2008)
New Revision: 6456
Modified:
core/trunk/src/test/java/org/jboss/cache/api/mvcc/LockTestBase.java
core/trunk/src/test/java/org/jboss/cache/api/mvcc/read_committed/ReadCommittedLockParentTest.java
core/trunk/src/test/java/org/jboss/cache/api/mvcc/repeatable_read/RepeatableReadLockParentTest.java
Log:
Test for concurrent remove and insert
Modified: core/trunk/src/test/java/org/jboss/cache/api/mvcc/LockTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/mvcc/LockTestBase.java 2008-07-31 00:06:35 UTC (rev 6455)
+++ core/trunk/src/test/java/org/jboss/cache/api/mvcc/LockTestBase.java 2008-07-31 08:29:26 UTC (rev 6456)
@@ -624,4 +624,56 @@
assert "v2".equals(cache.get(AB, "k"));
assert "v".equals(cache.get(ABC, "k"));
}
+
+ public void testConcurrentInsertRemove1() throws Exception
+ {
+ cache.put(AB, "k", "v");
+
+ tm.begin();
+ cache.put(ABC, "k", "v");
+ assert "v".equals(cache.get(AB, "k"));
+ assert "v".equals(cache.get(ABC, "k"));
+ Transaction t1 = tm.suspend();
+
+ tm.begin();
+ cache.removeNode(AB);
+ assert null == cache.get(ABC, "k");
+ assert null == cache.get(AB, "k");
+ tm.commit();
+
+ assert null == cache.get(ABC, "k");
+ assert null == cache.get(AB, "k");
+
+ tm.resume(t1);
+ t1.commit();
+
+ assert null == cache.get(ABC, "k");
+ assert null == cache.get(AB, "k");
+ }
+
+ public void testConcurrentInsertRemove2() throws Exception
+ {
+ cache.put(AB, "k", "v");
+
+ tm.begin();
+ cache.removeNode(AB);
+ assert null == cache.get(ABC, "k");
+ assert null == cache.get(AB, "k");
+ Transaction t1 = tm.suspend();
+
+ tm.begin();
+ assert "v".equals(cache.get(AB, "k"));
+ cache.put(ABC, "k", "v");
+ assert "v".equals(cache.get(ABC, "k"));
+ tm.commit();
+
+ assert "v".equals(cache.get(AB, "k"));
+ assert "v".equals(cache.get(ABC, "k"));
+
+ tm.resume(t1);
+ t1.commit();
+
+ assert null == cache.get(ABC, "k");
+ assert null == cache.get(AB, "k");
+ }
}
Modified: core/trunk/src/test/java/org/jboss/cache/api/mvcc/read_committed/ReadCommittedLockParentTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/mvcc/read_committed/ReadCommittedLockParentTest.java 2008-07-31 00:06:35 UTC (rev 6455)
+++ core/trunk/src/test/java/org/jboss/cache/api/mvcc/read_committed/ReadCommittedLockParentTest.java 2008-07-31 08:29:26 UTC (rev 6456)
@@ -13,18 +13,30 @@
@Override
public void testOverwritingOnInsert()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
@Override
public void testOverwritingOnInsert2()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
@Override
public void testOverwritingOnInsert3()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
+
+ @Override
+ public void testConcurrentInsertRemove1()
+ {
+ // no op since a locked parent makes this test irrelevant.
+ }
+
+ @Override
+ public void testConcurrentInsertRemove2()
+ {
+ // no op since a locked parent makes this test irrelevant.
+ }
}
Modified: core/trunk/src/test/java/org/jboss/cache/api/mvcc/repeatable_read/RepeatableReadLockParentTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/mvcc/repeatable_read/RepeatableReadLockParentTest.java 2008-07-31 00:06:35 UTC (rev 6455)
+++ core/trunk/src/test/java/org/jboss/cache/api/mvcc/repeatable_read/RepeatableReadLockParentTest.java 2008-07-31 08:29:26 UTC (rev 6456)
@@ -13,20 +13,32 @@
@Override
public void testOverwritingOnInsert()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
@Override
public void testOverwritingOnInsert2()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
@Override
public void testOverwritingOnInsert3()
{
- // no op since a locked parent makes tis test irrelevant.
+ // no op since a locked parent makes this test irrelevant.
}
+
+ @Override
+ public void testConcurrentInsertRemove1()
+ {
+ // no op since a locked parent makes this test irrelevant.
+ }
+
+ @Override
+ public void testConcurrentInsertRemove2()
+ {
+ // no op since a locked parent makes this test irrelevant.
+ }
}
16 years, 5 months
JBoss Cache SVN: r6455 - core/trunk/src/test/java/org/jboss/cache/mgmt.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-30 20:06:35 -0400 (Wed, 30 Jul 2008)
New Revision: 6455
Modified:
core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
Log:
Fixed broken tests
Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java 2008-07-31 00:00:04 UTC (rev 6454)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java 2008-07-31 00:06:35 UTC (rev 6455)
@@ -40,7 +40,6 @@
// now try retrieving a valid attribute and an invalid attribute
assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
-// load++; // since we did a get on a non-existent key which triggered a load
// verify statistics after retrieving entries - misses should still be same since nodes were already loaded
assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());
@@ -98,9 +97,7 @@
assertEquals("CacheLoaderStores count error: ", stores, store.getCacheLoaderStores());
// add two attributes - this should cause two stores
- // plus one load as we're doing put(k, v)
stores += 2;
-// load++;
cache.put(POLAND, CAPITAL, "Warsaw");
cache.put(POLAND, CURRENCY, "Zloty");
assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());
Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java 2008-07-31 00:00:04 UTC (rev 6454)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java 2008-07-31 00:06:35 UTC (rev 6455)
@@ -48,8 +48,6 @@
// now try retrieving a valid attribute and an invalid attribute
assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
- // will cause a load
-// miss++;
assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
// verify statistics after retrieving entries - no change since nodes were already loaded
@@ -108,8 +106,6 @@
assertEquals("Activations count error: ", activations, act.getActivations());
assertEquals("Passivations count error: ", 1, pass.getPassivations());
- // add a new node and two attributes - this should cause a miss only
-// miss++;
cache.put(POLAND, new HashMap<String, Object>());
cache.put(POLAND, CAPITAL, "Warsaw");
cache.put(POLAND, CURRENCY, "Zloty");
16 years, 5 months
JBoss Cache SVN: r6454 - core/trunk/src/test/java/org/jboss/cache/mgmt.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-30 20:00:04 -0400 (Wed, 30 Jul 2008)
New Revision: 6454
Modified:
core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
Log:
Fixed broken tests
Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java 2008-07-30 23:55:29 UTC (rev 6453)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java 2008-07-31 00:00:04 UTC (rev 6454)
@@ -40,7 +40,7 @@
// now try retrieving a valid attribute and an invalid attribute
assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
- load++; // since we did a get on a non-existent key which triggered a load
+// load++; // since we did a get on a non-existent key which triggered a load
// verify statistics after retrieving entries - misses should still be same since nodes were already loaded
assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());
@@ -100,7 +100,7 @@
// add two attributes - this should cause two stores
// plus one load as we're doing put(k, v)
stores += 2;
- load++;
+// load++;
cache.put(POLAND, CAPITAL, "Warsaw");
cache.put(POLAND, CURRENCY, "Zloty");
assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());
Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java 2008-07-30 23:55:29 UTC (rev 6453)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java 2008-07-31 00:00:04 UTC (rev 6454)
@@ -1,17 +1,13 @@
package org.jboss.cache.mgmt;
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertFalse;
-import static org.testng.AssertJUnit.assertNotNull;
-import static org.testng.AssertJUnit.assertNull;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-
import org.jboss.cache.interceptors.ActivationInterceptor;
import org.jboss.cache.interceptors.PassivationInterceptor;
import org.jboss.cache.util.TestingUtil;
+import static org.testng.AssertJUnit.*;
+import org.testng.annotations.Test;
+import java.util.HashMap;
+
/**
* Simple functional tests for ActivationInterceptor and PassivationInterceptor statistics
*
@@ -53,7 +49,7 @@
// now try retrieving a valid attribute and an invalid attribute
assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
// will cause a load
- miss++;
+// miss++;
assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
// verify statistics after retrieving entries - no change since nodes were already loaded
@@ -113,7 +109,7 @@
assertEquals("Passivations count error: ", 1, pass.getPassivations());
// add a new node and two attributes - this should cause a miss only
- miss++;
+// miss++;
cache.put(POLAND, new HashMap<String, Object>());
cache.put(POLAND, CAPITAL, "Warsaw");
cache.put(POLAND, CURRENCY, "Zloty");
16 years, 5 months
JBoss Cache SVN: r6453 - core/trunk/src/test/java/org/jboss/cache/loader.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-30 19:55:29 -0400 (Wed, 30 Jul 2008)
New Revision: 6453
Modified:
core/trunk/src/test/java/org/jboss/cache/loader/TcpCacheLoaderTest.java
Log:
Prevent this lousy test from running!
Modified: core/trunk/src/test/java/org/jboss/cache/loader/TcpCacheLoaderTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/loader/TcpCacheLoaderTest.java 2008-07-30 23:54:23 UTC (rev 6452)
+++ core/trunk/src/test/java/org/jboss/cache/loader/TcpCacheLoaderTest.java 2008-07-30 23:55:29 UTC (rev 6453)
@@ -1,28 +1,7 @@
package org.jboss.cache.loader;
-import org.jboss.cache.CacheException;
-import org.jboss.cache.CacheSPI;
-import org.jboss.cache.DefaultCacheFactory;
-import org.jboss.cache.config.Configuration;
-import org.jboss.cache.factories.UnitTestCacheConfigurationFactory;
-import org.jboss.cache.interceptors.OrderedSynchronizationHandler;
-import org.jboss.cache.loader.tcp.TcpCacheServer;
-import org.jboss.cache.notifications.annotation.CacheListener;
-import org.jboss.cache.notifications.annotation.NodeCreated;
-import org.jboss.cache.notifications.event.Event;
-import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.util.TestingUtil;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import javax.transaction.Synchronization;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
/**
* Tests the TcpDelegatingCacheLoader
*
@@ -31,248 +10,248 @@
*/
@Test(groups = "functional", enabled = false)
// TODO re-enable!!
-public class TcpCacheLoaderTest extends CacheLoaderTestsBase
+public class TcpCacheLoaderTest //extends CacheLoaderTestsBase
{
- protected static final int CACHE_SERVER_RESTART_DELAY_MS = 1000;
- protected static final int TCP_CACHE_LOADER_TIMEOUT_MS = 2000;
- protected static int START_COUNT = 0;
- static TcpCacheServer cacheServer = null;
-
- @BeforeClass
- public static void startCacheServer()
- {
- final CountDownLatch startedSignal = new CountDownLatch(1);
-
- Thread t = new Thread()
- {
- public void run()
- {
- try
- {
- System.out.println("Starting TcpCacheServer");
- cacheServer = new TcpCacheServer();
- cacheServer.setBindAddress("127.0.0.1");
- cacheServer.setPort(12121);
- Configuration config = UnitTestCacheConfigurationFactory.createConfiguration(Configuration.CacheMode.LOCAL, true);
- CacheSPI cache = (CacheSPI) new DefaultCacheFactory<Object, Object>().createCache(config);
- cacheServer.setCache(cache);
- cacheServer.create();
- cacheServer.start();
- START_COUNT++;
- startedSignal.countDown();
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- }
-
- };
- t.setDaemon(true);
- t.start();
-
- // Wait for the cache server to start up.
- boolean started = false;
- try
- {
- started = startedSignal.await(120, TimeUnit.SECONDS);
- }
- catch (InterruptedException e)
- {
- // do nothing
- }
-
- if (!started)
- {
- // the TcpCacheServer was unable to start up for some reason!!
- throw new RuntimeException("Unable to start the TcpCacheServer after 120 seconds!!");
- }
- }
-
- @AfterClass
- public static void stopCacheServer()
- {
- if (cacheServer != null)
- {
- System.out.println("Stopping TcpCacheServer");
- cacheServer.stop();
- }
- }
-
- protected static void restartCacheServer()
- {
- stopCacheServer();
- startCacheServer();
- }
-
- @Override
- public void testPartialLoadAndStore()
- {
- // do nothing
- }
-
- @Override
- public void testBuddyBackupStore()
- {
- // do nothing
- }
-
- protected void configureCache() throws Exception
- {
- cache.getConfiguration().setCacheLoaderConfig(getSingleCacheLoaderConfig("",
- TcpDelegatingCacheLoader.class.getName(),
- "host=127.0.0.1\nport=12121\ntimeout=" + TCP_CACHE_LOADER_TIMEOUT_MS, false, true, false));
- }
-
- // restart tests
- public void testCacheServerRestartMidCall() throws Exception
- {
- CacheServerRestarter restarter = new CacheServerRestarter();
- restarter.restart = true;
- cache.addCacheListener(restarter);
- int oldStartCount = START_COUNT;
- // a restart of the cache server will happen before the cache loader interceptor is called.
- cache.put(FQN, "key", "value");
-
- assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
- assert loader.get(FQN).equals(Collections.singletonMap("key", "value"));
- }
-
- public void testCacheServerDelayedRestartMidCall() throws Exception
- {
- CacheServerRestarter restarter = new CacheServerRestarter();
- restarter.restart = false;
- restarter.delayedRestart = true;
- restarter.startAfter = CACHE_SERVER_RESTART_DELAY_MS;
- cache.addCacheListener(restarter);
- int oldStartCount = START_COUNT;
-
- // the cache server will STOP before the cache laoder interceptor is called.
- // it will be restarted in a separate thread, startAfter millis later.
- // this should be less than the TcpCacheLoader timeout.
- cache.put(FQN, "key", "value");
-
- assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
- assert loader.get(FQN).equals(Collections.singletonMap("key", "value"));
- }
-
- public void testCacheServerTimeoutMidCall() throws Exception
- {
- CacheServerRestarter restarter = new CacheServerRestarter();
- restarter.restart = false;
- restarter.delayedRestart = true;
- restarter.startAfter = -1;
- cache.addCacheListener(restarter);
- int oldStartCount = START_COUNT;
-
- // the cache server will STOP before the cache laoder interceptor is called.
- // it will be restarted in a separate thread, startAfter millis later.
- // this should be less than the TcpCacheLoader timeout.
- try
- {
- cache.put(FQN, "key", "value");
- assert false : "Should have failed";
- }
- catch (CacheException expected)
- {
-
- }
-
- assert oldStartCount == START_COUNT : "Cache server should NOT have restarted!";
- // start the TCP server again
- startCacheServer();
- assert loader.get(FQN) == null;
- }
-
- public void testCacheServerRestartMidTransaction() throws Exception
- {
- int oldStartCount = START_COUNT;
- cache.getTransactionManager().begin();
- cache.put(FQN, "key", "value");
- restartCacheServer();
- cache.put(FQN, "key2", "value2");
- cache.getTransactionManager().commit();
-
- Map m = new HashMap();
- m.put("key", "value");
- m.put("key2", "value2");
-
- assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
- assert loader.get(FQN).equals(m);
- }
-
- public void testCacheServerRestartMidTransactionAfterPrepare() throws Exception
- {
- int oldStartCount = START_COUNT;
- cache.getTransactionManager().begin();
-
- cache.put(FQN, "key", "value");
- cache.put(FQN, "key2", "value2");
-
- GlobalTransaction gtx = cache.getTransactionTable().get(cache.getTransactionManager().getTransaction());
- OrderedSynchronizationHandler osh = cache.getTransactionTable().get(gtx).getOrderedSynchronizationHandler();
-
-// OrderedSynchronizationHandler.getInstance(cache.getTransactionManager().getTransaction()).registerAtTail(
- osh.registerAtTail(
- new Synchronization()
- {
-
- public void beforeCompletion()
- {
- // this will be called after the cache's prepare() phase. Restart the cache server.
- restartCacheServer();
- }
-
- public void afterCompletion(int i)
- {
- // do nothing
- }
- }
- );
-
- cache.getTransactionManager().commit();
-
- Map m = new HashMap();
- m.put("key", "value");
- m.put("key2", "value2");
-
- assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
- assert loader.get(FQN).equals(m);
-
- }
-
- @CacheListener
- public static class CacheServerRestarter
- {
- boolean restart;
- boolean delayedRestart;
- int startAfter;
-
- @NodeCreated
- public void restart(Event e)
- {
- if (e.isPre())
- {
- if (restart)
- {
- restartCacheServer();
- }
- else if (delayedRestart)
- {
- stopCacheServer();
- new Thread()
- {
- public void run()
- {
- if (startAfter > 0)
- {
- TestingUtil.sleepThread(startAfter);
- startCacheServer();
- }
- }
- }.start();
- }
- }
- }
- }
+// protected static final int CACHE_SERVER_RESTART_DELAY_MS = 1000;
+// protected static final int TCP_CACHE_LOADER_TIMEOUT_MS = 2000;
+// protected static int START_COUNT = 0;
+// static TcpCacheServer cacheServer = null;
+//
+// @BeforeClass
+// public static void startCacheServer()
+// {
+// final CountDownLatch startedSignal = new CountDownLatch(1);
+//
+// Thread t = new Thread()
+// {
+// public void run()
+// {
+// try
+// {
+// System.out.println("Starting TcpCacheServer");
+// cacheServer = new TcpCacheServer();
+// cacheServer.setBindAddress("127.0.0.1");
+// cacheServer.setPort(12121);
+// Configuration config = UnitTestCacheConfigurationFactory.createConfiguration(Configuration.CacheMode.LOCAL, true);
+// CacheSPI cache = (CacheSPI) new DefaultCacheFactory<Object, Object>().createCache(config);
+// cacheServer.setCache(cache);
+// cacheServer.create();
+// cacheServer.start();
+// START_COUNT++;
+// startedSignal.countDown();
+// }
+// catch (Exception ex)
+// {
+// ex.printStackTrace();
+// }
+// }
+//
+// };
+// t.setDaemon(true);
+// t.start();
+//
+// // Wait for the cache server to start up.
+// boolean started = false;
+// try
+// {
+// started = startedSignal.await(120, TimeUnit.SECONDS);
+// }
+// catch (InterruptedException e)
+// {
+// // do nothing
+// }
+//
+// if (!started)
+// {
+// // the TcpCacheServer was unable to start up for some reason!!
+// throw new RuntimeException("Unable to start the TcpCacheServer after 120 seconds!!");
+// }
+// }
+//
+// @AfterClass
+// public static void stopCacheServer()
+// {
+// if (cacheServer != null)
+// {
+// System.out.println("Stopping TcpCacheServer");
+// cacheServer.stop();
+// }
+// }
+//
+// protected static void restartCacheServer()
+// {
+// stopCacheServer();
+// startCacheServer();
+// }
+//
+// @Override
+// public void testPartialLoadAndStore()
+// {
+// // do nothing
+// }
+//
+// @Override
+// public void testBuddyBackupStore()
+// {
+// // do nothing
+// }
+//
+// protected void configureCache() throws Exception
+// {
+// cache.getConfiguration().setCacheLoaderConfig(getSingleCacheLoaderConfig("",
+// TcpDelegatingCacheLoader.class.getName(),
+// "host=127.0.0.1\nport=12121\ntimeout=" + TCP_CACHE_LOADER_TIMEOUT_MS, false, true, false));
+// }
+//
+// // restart tests
+// public void testCacheServerRestartMidCall() throws Exception
+// {
+// CacheServerRestarter restarter = new CacheServerRestarter();
+// restarter.restart = true;
+// cache.addCacheListener(restarter);
+// int oldStartCount = START_COUNT;
+// // a restart of the cache server will happen before the cache loader interceptor is called.
+// cache.put(FQN, "key", "value");
+//
+// assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
+// assert loader.get(FQN).equals(Collections.singletonMap("key", "value"));
+// }
+//
+// public void testCacheServerDelayedRestartMidCall() throws Exception
+// {
+// CacheServerRestarter restarter = new CacheServerRestarter();
+// restarter.restart = false;
+// restarter.delayedRestart = true;
+// restarter.startAfter = CACHE_SERVER_RESTART_DELAY_MS;
+// cache.addCacheListener(restarter);
+// int oldStartCount = START_COUNT;
+//
+// // the cache server will STOP before the cache laoder interceptor is called.
+// // it will be restarted in a separate thread, startAfter millis later.
+// // this should be less than the TcpCacheLoader timeout.
+// cache.put(FQN, "key", "value");
+//
+// assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
+// assert loader.get(FQN).equals(Collections.singletonMap("key", "value"));
+// }
+//
+// public void testCacheServerTimeoutMidCall() throws Exception
+// {
+// CacheServerRestarter restarter = new CacheServerRestarter();
+// restarter.restart = false;
+// restarter.delayedRestart = true;
+// restarter.startAfter = -1;
+// cache.addCacheListener(restarter);
+// int oldStartCount = START_COUNT;
+//
+// // the cache server will STOP before the cache laoder interceptor is called.
+// // it will be restarted in a separate thread, startAfter millis later.
+// // this should be less than the TcpCacheLoader timeout.
+// try
+// {
+// cache.put(FQN, "key", "value");
+// assert false : "Should have failed";
+// }
+// catch (CacheException expected)
+// {
+//
+// }
+//
+// assert oldStartCount == START_COUNT : "Cache server should NOT have restarted!";
+// // start the TCP server again
+// startCacheServer();
+// assert loader.get(FQN) == null;
+// }
+//
+// public void testCacheServerRestartMidTransaction() throws Exception
+// {
+// int oldStartCount = START_COUNT;
+// cache.getTransactionManager().begin();
+// cache.put(FQN, "key", "value");
+// restartCacheServer();
+// cache.put(FQN, "key2", "value2");
+// cache.getTransactionManager().commit();
+//
+// Map m = new HashMap();
+// m.put("key", "value");
+// m.put("key2", "value2");
+//
+// assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
+// assert loader.get(FQN).equals(m);
+// }
+//
+// public void testCacheServerRestartMidTransactionAfterPrepare() throws Exception
+// {
+// int oldStartCount = START_COUNT;
+// cache.getTransactionManager().begin();
+//
+// cache.put(FQN, "key", "value");
+// cache.put(FQN, "key2", "value2");
+//
+// GlobalTransaction gtx = cache.getTransactionTable().get(cache.getTransactionManager().getTransaction());
+// OrderedSynchronizationHandler osh = cache.getTransactionTable().get(gtx).getOrderedSynchronizationHandler();
+//
+//// OrderedSynchronizationHandler.getInstance(cache.getTransactionManager().getTransaction()).registerAtTail(
+// osh.registerAtTail(
+// new Synchronization()
+// {
+//
+// public void beforeCompletion()
+// {
+// // this will be called after the cache's prepare() phase. Restart the cache server.
+// restartCacheServer();
+// }
+//
+// public void afterCompletion(int i)
+// {
+// // do nothing
+// }
+// }
+// );
+//
+// cache.getTransactionManager().commit();
+//
+// Map m = new HashMap();
+// m.put("key", "value");
+// m.put("key2", "value2");
+//
+// assert oldStartCount + 1 == START_COUNT : "Cache server should have restarted!";
+// assert loader.get(FQN).equals(m);
+//
+// }
+//
+// @CacheListener
+// public static class CacheServerRestarter
+// {
+// boolean restart;
+// boolean delayedRestart;
+// int startAfter;
+//
+// @NodeCreated
+// public void restart(Event e)
+// {
+// if (e.isPre())
+// {
+// if (restart)
+// {
+// restartCacheServer();
+// }
+// else if (delayedRestart)
+// {
+// stopCacheServer();
+// new Thread()
+// {
+// public void run()
+// {
+// if (startAfter > 0)
+// {
+// TestingUtil.sleepThread(startAfter);
+// startCacheServer();
+// }
+// }
+// }.start();
+// }
+// }
+// }
+// }
}
\ No newline at end of file
16 years, 5 months
JBoss Cache SVN: r6452 - in core/trunk/src: test/java/org/jboss/cache/loader and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-30 19:54:23 -0400 (Wed, 30 Jul 2008)
New Revision: 6452
Modified:
core/trunk/src/main/java/org/jboss/cache/loader/CacheLoaderManager.java
core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderTestsBase.java
Log:
Added null chk
Modified: core/trunk/src/main/java/org/jboss/cache/loader/CacheLoaderManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/loader/CacheLoaderManager.java 2008-07-30 23:52:09 UTC (rev 6451)
+++ core/trunk/src/main/java/org/jboss/cache/loader/CacheLoaderManager.java 2008-07-30 23:54:23 UTC (rev 6452)
@@ -451,7 +451,8 @@
{
throw new CacheException("Unable to start cache loaders", e);
}
- fetchPersistentState |= loader.getConfig().isFetchPersistentState();
+ fetchPersistentState = fetchPersistentState || (loader.getConfig() != null && loader.getConfig().isFetchPersistentState());
+ fetchPersistentState = fetchPersistentState || (config != null && config.isFetchPersistentState());
}
}
Modified: core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderTestsBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderTestsBase.java 2008-07-30 23:52:09 UTC (rev 6451)
+++ core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderTestsBase.java 2008-07-30 23:54:23 UTC (rev 6452)
@@ -88,7 +88,7 @@
public void tearDown() throws Exception
{
cleanup();
- loader.remove(Fqn.ROOT);
+ if (loader != null) loader.remove(Fqn.ROOT);
TestingUtil.killCaches(cache);
}
16 years, 5 months