JBoss Cache SVN: r5623 - in core/trunk/src: main/java/org/jboss/cache/factories and 4 other directories.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-04-22 12:09:06 -0400 (Tue, 22 Apr 2008)
New Revision: 5623
Added:
core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/ChannelMessageListener.java
Removed:
core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/CacheMessageListener.java
Modified:
core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
core/trunk/src/main/java/org/jboss/cache/factories/EmptyConstructorFactory.java
core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
core/trunk/src/test/java/org/jboss/cache/marshall/ActiveInactiveTest.java
core/trunk/src/test/java/org/jboss/cache/marshall/AsyncReplTest.java
core/trunk/src/test/java/org/jboss/cache/statetransfer/FailedStateTransferTest.java
Log:
JBCACHE-1222 - bug fixing - marshalling
Modified: core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -22,7 +22,7 @@
import org.jboss.cache.marshall.Marshaller;
import org.jboss.cache.marshall.MethodCallWrapper;
import org.jboss.cache.notifications.Notifier;
-import org.jboss.cache.remoting.jgroups.CacheMessageListener;
+import org.jboss.cache.remoting.jgroups.ChannelMessageListener;
import org.jboss.cache.statetransfer.StateTransferManager;
import org.jboss.cache.transaction.GlobalTransaction;
import org.jboss.cache.transaction.TransactionTable;
@@ -81,7 +81,7 @@
/**
* JGroups message listener.
*/
- private CacheMessageListener messageListener;
+ private ChannelMessageListener messageListener;
private Configuration configuration;
private Notifier notifier;
private CacheSPI spi;
@@ -97,7 +97,7 @@
private boolean isInLocalMode;
@Inject
- private void setupDependencies(CacheMessageListener messageListener, Configuration configuration, Notifier notifier,
+ private void setupDependencies(ChannelMessageListener messageListener, Configuration configuration, Notifier notifier,
CacheSPI spi, Marshaller marshaller, TransactionTable txTable,
TransactionManager txManager, InvocationContextContainer container, InterceptorChain interceptorChain,
CacheLifecycleManager lifecycleManager)
@@ -439,6 +439,7 @@
useOutOfBandMessage = false;
+ //todo check whether we can get rid of the MethodCallWrapper and use the command directly
rsps = responseFilter == null
? disp.callRemoteMethods(validMembers, new MethodCallWrapper(command), modeToUse, timeout, isUsingBuddyReplication, useOutOfBandMessage)
: disp.callRemoteMethods(validMembers, new MethodCallWrapper(command), modeToUse, timeout, isUsingBuddyReplication, useOutOfBandMessage, responseFilter);
Modified: core/trunk/src/main/java/org/jboss/cache/factories/EmptyConstructorFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/EmptyConstructorFactory.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/main/java/org/jboss/cache/factories/EmptyConstructorFactory.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -13,7 +13,7 @@
import org.jboss.cache.marshall.Marshaller;
import org.jboss.cache.marshall.VersionAwareMarshaller;
import org.jboss.cache.notifications.Notifier;
-import org.jboss.cache.remoting.jgroups.CacheMessageListener;
+import org.jboss.cache.remoting.jgroups.ChannelMessageListener;
import org.jboss.cache.statetransfer.StateTransferManager;
import org.jboss.cache.transaction.TransactionTable;
@@ -24,7 +24,7 @@
* @since 2.1.0
*/
@DefaultFactoryFor(classes = {StateTransferManager.class, TransactionTable.class, RegionManager.class, Notifier.class,
- CacheMessageListener.class, CacheLoaderManager.class, Marshaller.class,
+ ChannelMessageListener.class, CacheLoaderManager.class, Marshaller.class,
InvocationContextContainer.class, CacheInvocationDelegate.class,
CacheTransactionHelper.class, CacheData.class, CommandsFactory.class, LockManager.class})
public class EmptyConstructorFactory extends ComponentFactory
Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -92,9 +92,9 @@
region = rrv.region;
o = rrv.returnValue;
}
- else if (o instanceof MarshallableCommand)
+ else if (o instanceof MethodCallWrapper)
{
- MarshallableCommand marshallableCommand = (MarshallableCommand) o;
+ MarshallableCommand marshallableCommand = ((MethodCallWrapper) o).getCommand();
region = extractFqnRegion(marshallableCommand);
}
Deleted: core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/CacheMessageListener.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/CacheMessageListener.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/CacheMessageListener.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -1,376 +0,0 @@
-package org.jboss.cache.remoting.jgroups;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jboss.cache.CacheException;
-import org.jboss.cache.Fqn;
-import org.jboss.cache.config.Configuration;
-import org.jboss.cache.factories.annotations.Inject;
-import org.jboss.cache.statetransfer.StateTransferManager;
-import org.jboss.cache.util.ExposedByteArrayOutputStream;
-import org.jboss.util.stream.MarshalledValueInputStream;
-import org.jboss.util.stream.MarshalledValueOutputStream;
-import org.jgroups.ExtendedMessageListener;
-import org.jgroups.Message;
-import org.jgroups.util.Util;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * JGroups MessageListener
- *
- * @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
- * @since 2.1.0
- */
-public class CacheMessageListener implements ExtendedMessageListener
-{
- /**
- * Reference to an exception that was raised during
- * state installation on this node.
- */
- protected volatile Exception setStateException;
- private final Object stateLock = new Object();
- private Log log = LogFactory.getLog(CacheMessageListener.class);
- private StateTransferManager stateTransferManager;
- private Configuration configuration;
- /**
- * True if state was initialized during start-up.
- */
- private volatile boolean isStateSet = false;
-
- @Inject
- private void injectDependencies(StateTransferManager stateTransferManager, Configuration configuration)
- {
- this.stateTransferManager = stateTransferManager;
- this.configuration = configuration;
- }
-
- public boolean isStateSet()
- {
- return isStateSet;
- }
-
- public void setStateSet(boolean stateSet)
- {
- isStateSet = stateSet;
- }
-
- public void waitForState() throws Exception
- {
- synchronized (stateLock)
- {
- while (!isStateSet)
- {
- if (setStateException != null)
- {
- throw setStateException;
- }
-
- try
- {
- stateLock.wait();
- }
- catch (InterruptedException iex)
- {
- }
- }
- }
- }
-
- protected void stateReceivedSuccess()
- {
- isStateSet = true;
- setStateException = null;
- }
-
- protected void stateReceivingFailed(Throwable t)
- {
- if (t instanceof CacheException)
- {
- log.debug(t);
- }
- else
- {
- log.error("failed setting state", t);
- }
- if (t instanceof Exception)
- {
- setStateException = (Exception) t;
- }
- else
- {
- setStateException = new Exception(t);
- }
- }
-
- protected void stateProducingFailed(Throwable t)
- {
- if (t instanceof CacheException)
- {
- log.debug(t);
- }
- else
- {
- log.error("Caught " + t.getClass().getName()
- + " while responding to state transfer request", t);
- }
- }
-
- /**
- * Callback, does nothing.
- */
- public void receive(Message msg)
- {
- }
-
- public byte[] getState()
- {
- MarshalledValueOutputStream out = null;
- byte[] result = null;
- ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(16 * 1024);
- try
- {
- out = new MarshalledValueOutputStream(baos);
-
- stateTransferManager.getState(out, Fqn.ROOT, configuration.getStateRetrievalTimeout(), true, true);
- }
- catch (Throwable t)
- {
- stateProducingFailed(t);
- }
- finally
- {
- result = baos.getRawBuffer();
- Util.close(out);
- }
- return result;
- }
-
- public void setState(byte[] new_state)
- {
- if (new_state == null)
- {
- log.debug("transferred state is null (may be first member in cluster)");
- return;
- }
- ByteArrayInputStream bais = new ByteArrayInputStream(new_state);
- MarshalledValueInputStream in = null;
- try
- {
- in = new MarshalledValueInputStream(bais);
- stateTransferManager.setState(in, Fqn.ROOT);
- stateReceivedSuccess();
- }
- catch (Throwable t)
- {
- stateReceivingFailed(t);
- }
- finally
- {
- Util.close(in);
- synchronized (stateLock)
- {
- // Notify wait that state has been set.
- stateLock.notifyAll();
- }
- }
- }
-
- public byte[] getState(String state_id)
- {
- MarshalledValueOutputStream out = null;
- String sourceRoot = state_id;
- byte[] result = null;
-
- boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
- if (hasDifferentSourceAndIntegrationRoots)
- {
- sourceRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[0];
- }
-
- ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(16 * 1024);
- try
- {
- out = new MarshalledValueOutputStream(baos);
-
- stateTransferManager.getState(out, Fqn.fromString(sourceRoot),
- configuration.getStateRetrievalTimeout(), true, true);
- }
- catch (Throwable t)
- {
- stateProducingFailed(t);
- }
- finally
- {
- result = baos.getRawBuffer();
- Util.close(out);
- }
- return result;
- }
-
- public void getState(OutputStream ostream)
- {
- MarshalledValueOutputStream out = null;
- try
- {
- out = new MarshalledValueOutputStream(ostream);
- stateTransferManager.getState(out, Fqn.ROOT, configuration.getStateRetrievalTimeout(), true, true);
- }
- catch (Throwable t)
- {
- stateProducingFailed(t);
- }
- finally
- {
- Util.close(out);
- }
- }
-
- public void getState(String state_id, OutputStream ostream)
- {
- String sourceRoot = state_id;
- MarshalledValueOutputStream out = null;
- boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
- if (hasDifferentSourceAndIntegrationRoots)
- {
- sourceRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[0];
- }
- try
- {
- out = new MarshalledValueOutputStream(ostream);
- stateTransferManager.getState(out, Fqn.fromString(sourceRoot), configuration.getStateRetrievalTimeout(), true, true);
- }
- catch (Throwable t)
- {
- stateProducingFailed(t);
- }
- finally
- {
- Util.close(out);
- }
- }
-
- public void setState(InputStream istream)
- {
- if (istream == null)
- {
- log.debug("stream is null (may be first member in cluster)");
- return;
- }
- MarshalledValueInputStream in = null;
- try
- {
- in = new MarshalledValueInputStream(istream);
- stateTransferManager.setState(in, Fqn.ROOT);
- stateReceivedSuccess();
- }
- catch (Throwable t)
- {
- stateReceivingFailed(t);
- }
- finally
- {
- Util.close(in);
- synchronized (stateLock)
- {
- // Notify wait that state has been set.
- stateLock.notifyAll();
- }
- }
- }
-
- public void setState(String state_id, byte[] state)
- {
- if (state == null)
- {
- log.debug("partial transferred state is null");
- return;
- }
-
- MarshalledValueInputStream in = null;
- String targetRoot = state_id;
- boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
- if (hasDifferentSourceAndIntegrationRoots)
- {
- targetRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[1];
- }
- try
- {
- log.debug("Setting received partial state for subroot " + state_id);
- Fqn subroot = Fqn.fromString(targetRoot);
-// Region region = regionManager.getRegion(subroot, false);
-// ClassLoader cl = null;
-// if (region != null)
-// {
-// // If a classloader is registered for the node's region, use it
-// cl = region.getClassLoader();
-// }
- ByteArrayInputStream bais = new ByteArrayInputStream(state);
- in = new MarshalledValueInputStream(bais);
- //getStateTransferManager().setState(in, subroot, cl);
- stateTransferManager.setState(in, subroot);
- stateReceivedSuccess();
- }
- catch (Throwable t)
- {
- stateReceivingFailed(t);
- }
- finally
- {
- Util.close(in);
- synchronized (stateLock)
- {
- // Notify wait that state has been set.
- stateLock.notifyAll();
- }
- }
- }
-
- public void setState(String state_id, InputStream istream)
- {
- String targetRoot = state_id;
- MarshalledValueInputStream in = null;
- boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
- if (hasDifferentSourceAndIntegrationRoots)
- {
- targetRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[1];
- }
- if (istream == null)
- {
- log.debug("stream is null (may be first member in cluster). State is not set");
- return;
- }
-
- try
- {
- log.debug("Setting received partial state for subroot " + state_id);
- in = new MarshalledValueInputStream(istream);
- Fqn subroot = Fqn.fromString(targetRoot);
-// Region region = regionManager.getRegion(subroot, false);
-// ClassLoader cl = null;
-// if (region != null)
-// {
-// // If a classloader is registered for the node's region, use it
-// cl = region.getClassLoader();
-// }
- //getStateTransferManager().setState(in, subroot, cl);
- stateTransferManager.setState(in, subroot);
- stateReceivedSuccess();
- }
- catch (Throwable t)
- {
- stateReceivingFailed(t);
- }
- finally
- {
- Util.close(in);
- synchronized (stateLock)
- {
- // Notify wait that state has been set.
- stateLock.notifyAll();
- }
- }
- }
-}
Copied: core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/ChannelMessageListener.java (from rev 5617, core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/CacheMessageListener.java)
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/ChannelMessageListener.java (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/remoting/jgroups/ChannelMessageListener.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -0,0 +1,377 @@
+package org.jboss.cache.remoting.jgroups;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.cache.CacheException;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.config.Configuration;
+import org.jboss.cache.factories.annotations.Inject;
+import org.jboss.cache.statetransfer.StateTransferManager;
+import org.jboss.cache.util.ExposedByteArrayOutputStream;
+import org.jboss.util.stream.MarshalledValueInputStream;
+import org.jboss.util.stream.MarshalledValueOutputStream;
+import org.jgroups.ExtendedMessageListener;
+import org.jgroups.Message;
+import org.jgroups.util.Util;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * JGroups MessageListener
+ *
+ * @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
+ * @since 2.1.0
+ */
+public class ChannelMessageListener implements ExtendedMessageListener
+{
+ /**
+ * Reference to an exception that was raised during
+ * state installation on this node.
+ */
+ protected volatile Exception setStateException;
+ private final Object stateLock = new Object();
+ private Log log = LogFactory.getLog(ChannelMessageListener.class);
+ private StateTransferManager stateTransferManager;
+ private Configuration configuration;
+ /**
+ * True if state was initialized during start-up.
+ */
+ private volatile boolean isStateSet = false;
+
+ @Inject
+ private void injectDependencies(StateTransferManager stateTransferManager, Configuration configuration)
+ {
+ this.stateTransferManager = stateTransferManager;
+ this.configuration = configuration;
+ }
+
+ public boolean isStateSet()
+ {
+ return isStateSet;
+ }
+
+ public void setStateSet(boolean stateSet)
+ {
+ isStateSet = stateSet;
+ }
+
+ public void waitForState() throws Exception
+ {
+ synchronized (stateLock)
+ {
+ while (!isStateSet)
+ {
+ if (setStateException != null)
+ {
+ throw setStateException;
+ }
+
+ try
+ {
+ stateLock.wait();
+ }
+ catch (InterruptedException iex)
+ {
+ }
+ }
+ }
+ }
+
+ protected void stateReceivedSuccess()
+ {
+ isStateSet = true;
+ setStateException = null;
+ }
+
+ protected void stateReceivingFailed(Throwable t)
+ {
+ if (t instanceof CacheException)
+ {
+ log.debug(t);
+ }
+ else
+ {
+ log.error("failed setting state", t);
+ }
+ if (t instanceof Exception)
+ {
+ setStateException = (Exception) t;
+ }
+ else
+ {
+ setStateException = new Exception(t);
+ }
+ }
+
+ protected void stateProducingFailed(Throwable t)
+ {
+ if (t instanceof CacheException)
+ {
+ log.debug(t);
+ }
+ else
+ {
+ log.error("Caught " + t.getClass().getName()
+ + " while responding to state transfer request", t);
+ }
+ }
+
+ /**
+ * Callback, does nothing.
+ */
+ public void receive(Message msg)
+ {
+ }
+
+ public byte[] getState()
+ {
+ MarshalledValueOutputStream out = null;
+ byte[] result = null;
+ ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(16 * 1024);
+ try
+ {
+ out = new MarshalledValueOutputStream(baos);
+
+ stateTransferManager.getState(out, Fqn.ROOT, configuration.getStateRetrievalTimeout(), true, true);
+ }
+ catch (Throwable t)
+ {
+ stateProducingFailed(t);
+ }
+ finally
+ {
+ result = baos.getRawBuffer();
+ Util.close(out);
+ }
+ return result;
+ }
+
+ public void setState(byte[] new_state)
+ {
+ if (new_state == null)
+ {
+ log.debug("transferred state is null (may be first member in cluster)");
+ return;
+ }
+ ByteArrayInputStream bais = new ByteArrayInputStream(new_state);
+ MarshalledValueInputStream in = null;
+ try
+ {
+ in = new MarshalledValueInputStream(bais);
+ stateTransferManager.setState(in, Fqn.ROOT);
+ stateReceivedSuccess();
+ }
+ catch (Throwable t)
+ {
+ stateReceivingFailed(t);
+ }
+ finally
+ {
+ Util.close(in);
+ synchronized (stateLock)
+ {
+ // Notify wait that state has been set.
+ stateLock.notifyAll();
+ }
+ }
+ }
+
+ public byte[] getState(String state_id)
+ {
+ MarshalledValueOutputStream out = null;
+ String sourceRoot = state_id;
+ byte[] result = null;
+
+ boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
+ if (hasDifferentSourceAndIntegrationRoots)
+ {
+ sourceRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[0];
+ }
+
+ ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(16 * 1024);
+ try
+ {
+ out = new MarshalledValueOutputStream(baos);
+
+ stateTransferManager.getState(out, Fqn.fromString(sourceRoot),
+ configuration.getStateRetrievalTimeout(), true, true);
+ }
+ catch (Throwable t)
+ {
+ stateProducingFailed(t);
+ }
+ finally
+ {
+ result = baos.getRawBuffer();
+ Util.close(out);
+ }
+ return result;
+ }
+
+ public void getState(OutputStream ostream)
+ {
+ MarshalledValueOutputStream out = null;
+ try
+ {
+ out = new MarshalledValueOutputStream(ostream);
+ stateTransferManager.getState(out, Fqn.ROOT, configuration.getStateRetrievalTimeout(), true, true);
+ }
+ catch (Throwable t)
+ {
+ stateProducingFailed(t);
+ }
+ finally
+ {
+ Util.close(out);
+ }
+ }
+
+ public void getState(String state_id, OutputStream ostream)
+ {
+ String sourceRoot = state_id;
+ MarshalledValueOutputStream out = null;
+ boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
+ if (hasDifferentSourceAndIntegrationRoots)
+ {
+ sourceRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[0];
+ }
+ try
+ {
+ out = new MarshalledValueOutputStream(ostream);
+ stateTransferManager.getState(out, Fqn.fromString(sourceRoot), configuration.getStateRetrievalTimeout(), true, true);
+ }
+ catch (Throwable t)
+ {
+ stateProducingFailed(t);
+ }
+ finally
+ {
+ Util.close(out);
+ }
+ }
+
+ public void setState(InputStream istream)
+ {
+ if (istream == null)
+ {
+ log.debug("stream is null (may be first member in cluster)");
+ return;
+ }
+ MarshalledValueInputStream in = null;
+ try
+ {
+ in = new MarshalledValueInputStream(istream);
+ stateTransferManager.setState(in, Fqn.ROOT);
+ stateReceivedSuccess();
+ }
+ catch (Throwable t)
+ {
+ stateReceivingFailed(t);
+ }
+ finally
+ {
+ Util.close(in);
+ synchronized (stateLock)
+ {
+ // Notify wait that state has been set.
+ stateLock.notifyAll();
+ }
+ }
+ }
+
+ public void setState(String state_id, byte[] state)
+ {
+ if (state == null)
+ {
+ log.debug("partial transferred state is null");
+ return;
+ }
+
+ MarshalledValueInputStream in = null;
+ String targetRoot = state_id;
+ boolean hasDifferentSourceAndIntegrationRoots = state_id.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
+ if (hasDifferentSourceAndIntegrationRoots)
+ {
+ targetRoot = state_id.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[1];
+ }
+ try
+ {
+ log.debug("Setting received partial state for subroot " + state_id);
+ Fqn subroot = Fqn.fromString(targetRoot);
+// Region region = regionManager.getRegion(subroot, false);
+// ClassLoader cl = null;
+// if (region != null)
+// {
+// // If a classloader is registered for the node's region, use it
+// cl = region.getClassLoader();
+// }
+ ByteArrayInputStream bais = new ByteArrayInputStream(state);
+ in = new MarshalledValueInputStream(bais);
+ //getStateTransferManager().setState(in, subroot, cl);
+ stateTransferManager.setState(in, subroot);
+ stateReceivedSuccess();
+ }
+ catch (Throwable t)
+ {
+ stateReceivingFailed(t);
+ }
+ finally
+ {
+ Util.close(in);
+ synchronized (stateLock)
+ {
+ // Notify wait that state has been set.
+ stateLock.notifyAll();
+ }
+ }
+ }
+
+ public void setState(String stateId, InputStream istream)
+ {
+ if (log.isTraceEnabled()) log.trace("**** Receiving state for " + stateId);
+ String targetRoot = stateId;
+ MarshalledValueInputStream in = null;
+ boolean hasDifferentSourceAndIntegrationRoots = stateId.indexOf(StateTransferManager.PARTIAL_STATE_DELIMITER) > 0;
+ if (hasDifferentSourceAndIntegrationRoots)
+ {
+ targetRoot = stateId.split(StateTransferManager.PARTIAL_STATE_DELIMITER)[1];
+ }
+ if (istream == null)
+ {
+ log.debug("stream is null (may be first member in cluster). State is not set");
+ return;
+ }
+
+ try
+ {
+ log.debug("Setting received partial state for subroot " + stateId);
+ in = new MarshalledValueInputStream(istream);
+ Fqn subroot = Fqn.fromString(targetRoot);
+// Region region = regionManager.getRegion(subroot, false);
+// ClassLoader cl = null;
+// if (region != null)
+// {
+// // If a classloader is registered for the node's region, use it
+// cl = region.getClassLoader();
+// }
+ //getStateTransferManager().setState(in, subroot, cl);
+ stateTransferManager.setState(in, subroot);
+ stateReceivedSuccess();
+ }
+ catch (Throwable t)
+ {
+ stateReceivingFailed(t);
+ }
+ finally
+ {
+ Util.close(in);
+ synchronized (stateLock)
+ {
+ // Notify wait that state has been set.
+ stateLock.notifyAll();
+ }
+ }
+ }
+}
Modified: core/trunk/src/test/java/org/jboss/cache/marshall/ActiveInactiveTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/marshall/ActiveInactiveTest.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/test/java/org/jboss/cache/marshall/ActiveInactiveTest.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -153,7 +153,7 @@
public void testObjectFromByteBuffer() throws Exception
{
PutKeyValueCommand put = new PutKeyValueCommand(null, A_B, "name", "Joe", false, false);
- ReplicateCommand replicate = new ReplicateCommand(put);
+ MethodCallWrapper replicate = new MethodCallWrapper(new ReplicateCommand(put));
rman.setDefaultInactive(true);
// register A as an inactive marshalling region
Modified: core/trunk/src/test/java/org/jboss/cache/marshall/AsyncReplTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/marshall/AsyncReplTest.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/test/java/org/jboss/cache/marshall/AsyncReplTest.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -43,9 +43,9 @@
{
CacheSPI<Object, Object> cache1, cache2;
String props = null;
- Person ben_;
- Address addr_;
- Throwable ex_;
+ Person ben;
+ Address addr;
+ Throwable ex;
private Fqn<String> aop = Fqn.fromString("/aop");
protected boolean useMarshalledValues = false;
@@ -60,11 +60,11 @@
cache2 = createCache("TestCache");
- addr_ = new Address();
- addr_.setCity("San Jose");
- ben_ = new Person();
- ben_.setName("Ben");
- ben_.setAddress(addr_);
+ addr = new Address();
+ addr.setCity("San Jose");
+ ben = new Person();
+ ben.setName("Ben");
+ ben.setAddress(addr);
// Pause to give caches time to see each other
TestingUtil.blockUntilViewsReceived(new CacheSPI[]{cache1, cache2}, 60000);
@@ -109,8 +109,8 @@
}
if (useMarshalledValues) Thread.currentThread().setContextClassLoader(cla);
- cache1.put(aop, "person", ben_);
- cache1.put(Fqn.fromString("/alias"), "person", ben_);
+ cache1.put(aop, "person", ben);
+ cache1.put(Fqn.fromString("/alias"), "person", ben);
if (useMarshalledValues) resetContextClassLoader();
TestingUtil.sleepThread(1000);
@@ -120,7 +120,7 @@
ben2 = cache2.get(aop, "person");
if (useMarshalledValues) resetContextClassLoader();
assertNotNull(ben2);
- assertEquals(ben_.toString(), ben2.toString());
+ assertEquals(ben.toString(), ben2.toString());
Class<?> claz = clb.loadClass(ADDRESS_CLASSNAME);
Object add = claz.newInstance();
@@ -161,7 +161,7 @@
Object scopedBen2 = getPersonFromClassloader(clb);
if (useMarshalledValues) Thread.currentThread().setContextClassLoader(cla);
- cache1.put(Fqn.fromString("/aop/1"), "person", ben_);
+ cache1.put(Fqn.fromString("/aop/1"), "person", ben);
cache1.put(Fqn.fromString("/aop/2"), "person", scopedBen1);
if (useMarshalledValues) resetContextClassLoader();
TestingUtil.sleepThread(1000);
@@ -170,7 +170,7 @@
// Can't cast it to Person. CCE will resutl.
if (useMarshalledValues) Thread.currentThread().setContextClassLoader(clb);
ben2 = cache2.get(Fqn.fromString("/aop/1"), "person");
- assertEquals(ben_.toString(), ben2.toString());
+ assertEquals(ben.toString(), ben2.toString());
ben2 = cache2.get(Fqn.fromString("/aop/2"), "person");
assertFalse("cache2 deserialized with scoped classloader", ben2 instanceof Person);
@@ -181,13 +181,13 @@
public void testTxPut() throws Exception
{
beginTransaction();
- cache1.put(aop, "person", ben_);
- cache1.put(aop, "person1", ben_);
+ cache1.put(aop, "person", ben);
+// cache1.put(aop, "person1", ben);
commit();
TestingUtil.sleepThread(1000);
Person ben2 = (Person) cache2.get(aop, "person");
assertNotNull("Person from 2nd cache should not be null ", ben2);
- assertEquals(ben_.toString(), ben2.toString());
+ assertEquals(ben.toString(), ben2.toString());
}
public void testTxCLSet2() throws Exception
@@ -205,7 +205,7 @@
if (useMarshalledValues) Thread.currentThread().setContextClassLoader(cla);
beginTransaction();
- cache1.put(aop, "person", ben_);
+ cache1.put(aop, "person", ben);
commit();
if (useMarshalledValues) resetContextClassLoader();
@@ -216,7 +216,7 @@
if (useMarshalledValues) Thread.currentThread().setContextClassLoader(clb);
ben2 = cache2.get(aop, "person");
if (useMarshalledValues) resetContextClassLoader();
- assertEquals(ben_.toString(), ben2.toString());
+ assertEquals(ben.toString(), ben2.toString());
Class<?> claz = clb.loadClass(ADDRESS_CLASSNAME);
Object add = claz.newInstance();
Modified: core/trunk/src/test/java/org/jboss/cache/statetransfer/FailedStateTransferTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/statetransfer/FailedStateTransferTest.java 2008-04-22 16:03:18 UTC (rev 5622)
+++ core/trunk/src/test/java/org/jboss/cache/statetransfer/FailedStateTransferTest.java 2008-04-22 16:09:06 UTC (rev 5623)
@@ -31,7 +31,7 @@
import org.jboss.cache.factories.UnitTestCacheConfigurationFactory;
import org.jboss.cache.lock.TimeoutException;
import org.jboss.cache.misc.TestingUtil;
-import org.jboss.cache.remoting.jgroups.CacheMessageListener;
+import org.jboss.cache.remoting.jgroups.ChannelMessageListener;
import static org.testng.AssertJUnit.fail;
import org.testng.annotations.Test;
@@ -61,8 +61,8 @@
// inject our own message listener and re-wire deps
ComponentRegistry cr = TestingUtil.extractComponentRegistry(cache);
-// cr.unregisterComponent(CacheMessageListener.class);
- cr.registerComponent(CacheMessageListener.class.getName(), new SecretiveStateCacheMessageListener(), CacheMessageListener.class);
+// cr.unregisterComponent(ChannelMessageListener.class);
+ cr.registerComponent(ChannelMessageListener.class.getName(), new SecretiveStateCacheMessageListener(), ChannelMessageListener.class);
// cr.updateDependencies();
cache.start();
@@ -80,8 +80,8 @@
// inject our own message listener and re-wire deps
cr = TestingUtil.extractComponentRegistry(recipient);
- //cr.unregisterComponent(CacheMessageListener.class);
- cr.registerComponent(CacheMessageListener.class.getName(), new SecretiveStateCacheMessageListener(), CacheMessageListener.class);
+ //cr.unregisterComponent(ChannelMessageListener.class);
+ cr.registerComponent(ChannelMessageListener.class.getName(), new SecretiveStateCacheMessageListener(), ChannelMessageListener.class);
//cr.updateDependencies();
try
@@ -100,7 +100,7 @@
return Version.version;
}
- private static class SecretiveStateCacheMessageListener extends CacheMessageListener
+ private static class SecretiveStateCacheMessageListener extends ChannelMessageListener
{
@Override
public void setState(byte[] new_state)
17 years, 8 months
JBoss Cache SVN: r5622 - in core/trunk/src: main/java/org/jboss/cache/marshall and 1 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 12:03:18 -0400 (Tue, 22 Apr 2008)
New Revision: 5622
Added:
core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller220.java
Modified:
core/trunk/src/main/java/org/jboss/cache/Fqn.java
core/trunk/src/main/java/org/jboss/cache/FqnComparator.java
core/trunk/src/main/java/org/jboss/cache/StringFqn.java
core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
core/trunk/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java
core/trunk/src/test/java/org/jboss/cache/FqnTest.java
Log:
Optimised Fqns for String representation
Modified: core/trunk/src/main/java/org/jboss/cache/Fqn.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/Fqn.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/main/java/org/jboss/cache/Fqn.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -19,7 +19,6 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import java.util.StringTokenizer;
/**
* A Fully Qualified Name (Fqn) is a list of names (typically Strings but can be any Object),
@@ -96,7 +95,7 @@
protected List<E> elements;
private transient int hash_code = 0;
- private int size = 0;
+ protected int size = 0;
/**
* Immutable root FQN.
@@ -355,10 +354,7 @@
{
return root();
}
- List<String> list = new ArrayList<String>();
- StringTokenizer tok = new StringTokenizer(stringRepresentation, SEPARATOR);
- while (tok.hasMoreTokens()) list.add(tok.nextToken());
- return new StringFqn(list);
+ return new StringFqn(stringRepresentation);
}
/**
Modified: core/trunk/src/main/java/org/jboss/cache/FqnComparator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/FqnComparator.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/main/java/org/jboss/cache/FqnComparator.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -46,6 +46,12 @@
return 1;
}
+ if (fqn1.getClass().equals(StringFqn.class) && fqn2.getClass().equals(StringFqn.class))
+ {
+ StringFqn sfqn1 = (StringFqn) fqn1;
+ StringFqn sfqn2 = (StringFqn) fqn2;
+ return sfqn1.stringRepresentation.compareTo(sfqn2.stringRepresentation);
+ }
int size = Math.min(s1, s2);
for (int i = 0; i < size; i++)
Modified: core/trunk/src/main/java/org/jboss/cache/StringFqn.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/StringFqn.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/main/java/org/jboss/cache/StringFqn.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -1,15 +1,21 @@
package org.jboss.cache;
+import java.util.Arrays;
import java.util.List;
/**
* An optimisation of Fqn that does more efficient equals() and hashcode() computations. This is returned by default when
* the factory method {@link Fqn#fromString(String)} is used, or when any of the other factory methods on {@link Fqn} are
* passed only String elements.
+ * <p/>
+ * <b>Note</b> that the "/" character is illegal in any Fqn String element and if encountered may be used to split Fqn elements.
+ * Expect indeterminate behaviour until proper String escaping is in place.
+ * <p/>
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @since 2.2.0
*/
+// TODO: Implement proper String escaping.
public class StringFqn extends Fqn
{
protected StringFqn()
@@ -37,6 +43,11 @@
stringRepresentation = getStringRepresentation(elements);
}
+ protected StringFqn(String stringRep)
+ {
+ this(Arrays.asList(stringRep.split("/")));
+ }
+
private String getStringRepresentation(List<String> elements)
{
StringBuilder builder = new StringBuilder();
@@ -44,7 +55,7 @@
{
builder.append(SEPARATOR);
// escape special chars.
- builder.append(e.replace("\\", "\\\\").replace("/", "\\/"));
+ builder.append(e);
}
return builder.toString();
}
@@ -83,4 +94,9 @@
return super.isChildOrEquals(parentFqn);
}
}
+
+ public String getStringRepresentation()
+ {
+ return stringRepresentation;
+ }
}
Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -257,7 +257,7 @@
// --------- Marshalling methods
- private void marshallObject(Object o, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
+ protected void marshallObject(Object o, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
{
if (o == null)
{
@@ -428,7 +428,7 @@
return reference;
}
- private void marshallString(String s, ObjectOutputStream out) throws Exception
+ protected void marshallString(String s, ObjectOutputStream out) throws Exception
{
//StringUtil.saveString(out, s);
out.writeObject(s);
@@ -454,7 +454,7 @@
}
- private void marshallFqn(Fqn fqn, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
+ protected void marshallFqn(Fqn fqn, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
{
boolean isRoot = fqn.isRoot();
out.writeBoolean(isRoot);
@@ -497,7 +497,7 @@
// --------- Unmarshalling methods
- private Object unmarshallObject(ObjectInputStream in, ClassLoader loader, UnmarshalledReferences refMap, boolean overrideContextClassloaderOnThread) throws Exception
+ protected Object unmarshallObject(ObjectInputStream in, ClassLoader loader, UnmarshalledReferences refMap, boolean overrideContextClassloaderOnThread) throws Exception
{
if (loader == null)
{
@@ -520,7 +520,7 @@
}
}
- private Object unmarshallObject(ObjectInputStream in, UnmarshalledReferences refMap) throws Exception
+ protected Object unmarshallObject(ObjectInputStream in, UnmarshalledReferences refMap) throws Exception
{
byte magicNumber = in.readByte();
int reference = 0;
@@ -630,7 +630,7 @@
}
}
- private String unmarshallString(ObjectInputStream in) throws Exception
+ protected String unmarshallString(ObjectInputStream in) throws Exception
{
return (String) in.readObject();
}
@@ -664,7 +664,7 @@
return gtx;
}
- Fqn unmarshallFqn(ObjectInputStream in, UnmarshalledReferences refMap) throws Exception
+ protected Fqn unmarshallFqn(ObjectInputStream in, UnmarshalledReferences refMap) throws Exception
{
boolean isRoot = in.readBoolean();
Copied: core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller220.java (from rev 5620, core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller210.java)
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller220.java (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller220.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -0,0 +1,82 @@
+package org.jboss.cache.marshall;
+
+import org.jboss.cache.Fqn;
+import org.jboss.cache.StringFqn;
+
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An evolution of {@link CacheMarshaller210}, to allow for {@link org.jboss.cache.StringFqn}s.
+ *
+ * @author Manik Surtani
+ * @since 2.2.0
+ */
+public class CacheMarshaller220 extends CacheMarshaller210
+{
+ public CacheMarshaller220()
+ {
+ initLogger();
+ // disabled, since this is always disabled in JBC 2.0.0.
+ // Java ObjectOutputStreams will have it's own built-in ref counting. No need to repeat this.
+ useRefs = false;
+ }
+
+ @Override
+ protected void marshallFqn(Fqn fqn, ObjectOutputStream out, Map<Object, Integer> refMap) throws Exception
+ {
+ boolean isRoot = fqn.isRoot();
+ out.writeBoolean(isRoot);
+ if (!isRoot)
+ {
+ if (fqn.getClass().equals(StringFqn.class))
+ {
+ out.writeShort(-1);
+ marshallString(((StringFqn) fqn).getStringRepresentation(), out);
+ }
+ else
+ {
+ out.writeShort(fqn.size());
+ for (Object o : fqn.peekElements())
+ {
+ marshallObject(o, out, refMap);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected Fqn unmarshallFqn(ObjectInputStream in, UnmarshalledReferences refMap) throws Exception
+ {
+
+ boolean isRoot = in.readBoolean();
+ Fqn fqn;
+ if (!isRoot)
+ {
+ int numElements = in.readShort();
+ if (numElements == -1)
+ {
+ // this is a "new" StringFqn.
+ fqn = Fqn.fromString(unmarshallString(in));
+ }
+ else
+ {
+ // an "old-style" mixed-type Fqn
+ List<Object> elements = new ArrayList<Object>(numElements);
+ for (int i = 0; i < numElements; i++)
+ {
+ elements.add(unmarshallObject(in, refMap));
+ }
+ fqn = Fqn.fromList(elements);
+ }
+ }
+ else
+ {
+ fqn = Fqn.ROOT;
+ }
+ return fqn;
+ }
+}
\ No newline at end of file
Modified: core/trunk/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/VersionAwareMarshaller.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -279,20 +279,30 @@
marshallers.put(VERSION_200, marshaller);
}
break;
+ case VERSION_210:
+ marshaller = marshallers.get(VERSION_210);
+ if (marshaller == null)
+ {
+ am = new CacheMarshaller210();
+ marshaller = am;
+ componentRegistry.wireDependencies(am);
+ am.init();
+ marshallers.put(VERSION_210, marshaller);
+ }
+ break;
case VERSION_220:
- case VERSION_210:
knownVersion = true;
default:
if (!knownVersion && log.isWarnEnabled())
log.warn("Unknown replication version String. Falling back to the default marshaller installed.");
- marshaller = marshallers.get(VERSION_210);
+ marshaller = marshallers.get(VERSION_220);
if (marshaller == null)
{
- am = new CacheMarshaller210();
+ am = new CacheMarshaller220();
marshaller = am;
componentRegistry.wireDependencies(am);
am.init();
- marshallers.put(VERSION_210, marshaller);
+ marshallers.put(VERSION_220, marshaller);
}
break;
}
Modified: core/trunk/src/test/java/org/jboss/cache/FqnTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/FqnTest.java 2008-04-22 15:44:40 UTC (rev 5621)
+++ core/trunk/src/test/java/org/jboss/cache/FqnTest.java 2008-04-22 16:03:18 UTC (rev 5622)
@@ -447,8 +447,11 @@
System.out.println("-- " + msg);
}
+ @Test(enabled = false)
+ // TODO enable once String escaping is in place
public void testUnescapedString()
{
+
Fqn f1 = Fqn.fromString("/a/b/c/d"); // an Fqn containing elements "a", "b", "c", "d".
Fqn f2 = Fqn.fromElements("a", "b", "c", "d");
@@ -466,4 +469,22 @@
System.out.println("F2: " + f2);
System.out.println("F3: " + f3);
}
+
+ @Test(enabled = false)
+ // TODO enable once String escaping is in place
+ public void testEscapedString()
+ {
+ String str = "/a/b" + '\\' + "/c/d"; // should result in a Fqn with elements "a", "b/c", "d".
+ Fqn f = Fqn.fromString(str);
+
+ assert f.toString().equals(str) : str + " and " + f + " should be equal";
+
+ assert f.size() == 3;
+
+ assert f.get(0).equals("a");
+ assert f.get(1).equals("b/c");
+ assert f.get(2).equals("d");
+
+ assert !f.equals(Fqn.fromString("/a/b/c/d"));
+ }
}
17 years, 8 months
JBoss Cache SVN: r5620 - in core/trunk/src: test/java/org/jboss/cache and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 10:53:02 -0400 (Tue, 22 Apr 2008)
New Revision: 5620
Added:
core/trunk/src/main/java/org/jboss/cache/StringFqn.java
Modified:
core/trunk/src/main/java/org/jboss/cache/Fqn.java
core/trunk/src/test/java/org/jboss/cache/FqnTest.java
Log:
Optimised Fqns for String representation
Modified: core/trunk/src/main/java/org/jboss/cache/Fqn.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/Fqn.java 2008-04-22 12:57:24 UTC (rev 5619)
+++ core/trunk/src/main/java/org/jboss/cache/Fqn.java 2008-04-22 14:53:02 UTC (rev 5620)
@@ -94,7 +94,7 @@
private static final Log log = LogFactory.getLog(Fqn.class);
- private List<E> elements;
+ protected List<E> elements;
private transient int hash_code = 0;
private int size = 0;
@@ -102,25 +102,25 @@
* Immutable root FQN.
*/
@SuppressWarnings("unchecked")
- public static final Fqn ROOT = new Fqn(true);
+ public static final Fqn ROOT = new StringFqn();
/**
* A cached string representation of this Fqn, used by toString to it isn't calculated again every time.
*/
- private String cachedStringRep;
+ protected String stringRepresentation;
// ----------------- START: Private constructors for use by factory methods only. ----------------------
// TODO: Remove the unnecessary internalMarker boolean parameters to these methods once the deprecated public constructors are removed in 3.0.0.
- private Fqn(boolean internalMarker)
+ protected Fqn(boolean internalMarker)
{
elements = Collections.emptyList();
size = 0;
}
@SuppressWarnings("unchecked")
- private Fqn(boolean internalMarker, List<?> names, boolean safe)
+ protected Fqn(boolean internalMarker, List<?> names, boolean safe)
{
if (names != null)
{
@@ -136,7 +136,7 @@
}
@SuppressWarnings("unchecked")
- private Fqn(boolean internalMarker, Fqn<?> base, List<?> relative)
+ protected Fqn(boolean internalMarker, Fqn<?> base, List<?> relative)
{
List elements = new ArrayList(base.elements.size() + relative.size());
elements.addAll(base.elements);
@@ -180,7 +180,10 @@
*/
public static <E> Fqn<E> fromList(List<E> names)
{
- return new Fqn<E>(true, names, false);
+ if (containsStrings(names))
+ return new StringFqn((List<String>) names);
+ else
+ return new Fqn<E>(true, names, false);
}
/**
@@ -221,7 +224,11 @@
*/
public static <E> Fqn<E> fromElements(E... elements)
{
- return new Fqn<E>(true, Arrays.asList(elements), true);
+ List el = Arrays.asList(elements);
+ if (containsStrings(el))
+ return new StringFqn(el);
+ else
+ return new Fqn<E>(true, el, true);
}
/**
@@ -247,7 +254,10 @@
*/
public static Fqn<Object> fromRelativeFqn(Fqn<?> base, Fqn<?> relative)
{
- return new Fqn<Object>(true, base, relative.elements);
+ if (base.getClass().equals(StringFqn.class) && relative.getClass().equals(StringFqn.class))
+ return new StringFqn((StringFqn) base, (StringFqn) relative);
+ else
+ return new Fqn<Object>(true, base, relative.elements);
}
/**
@@ -273,7 +283,10 @@
*/
public static Fqn<Object> fromRelativeList(Fqn<?> base, List<?> relativeElements)
{
- return new Fqn<Object>(true, base, relativeElements);
+ if (base.getClass().equals(StringFqn.class) && containsStrings(relativeElements))
+ return new StringFqn((StringFqn) base, (List<String>) relativeElements);
+ else
+ return new Fqn<Object>(true, base, relativeElements);
}
/**
@@ -299,9 +312,22 @@
*/
public static Fqn<Object> fromRelativeElements(Fqn<?> base, Object... relativeElements)
{
- return new Fqn<Object>(true, base, Arrays.asList(relativeElements));
+ List rel = Arrays.asList(relativeElements);
+ if (base.getClass().equals(StringFqn.class) && containsStrings(rel))
+ return new StringFqn((StringFqn) base, rel);
+ else
+ return new Fqn<Object>(true, base, rel);
}
+ protected static boolean containsStrings(List l)
+ {
+ for (Object o : l)
+ {
+ if (!(o instanceof String)) return false;
+ }
+ return true;
+ }
+
/**
* Returns a new Fqn from a string, where the elements are deliminated by
* one or more separator ({@link #SEPARATOR}) characters.<br><br>
@@ -322,6 +348,7 @@
* @return an Fqn<String> constructed from the string representation passed in
* @see #Fqn(Object[])
*/
+ @SuppressWarnings("unchecked")
public static Fqn<String> fromString(String stringRepresentation)
{
if (stringRepresentation == null)
@@ -331,7 +358,7 @@
List<String> list = new ArrayList<String>();
StringTokenizer tok = new StringTokenizer(stringRepresentation, SEPARATOR);
while (tok.hasMoreTokens()) list.add(tok.nextToken());
- return new Fqn<String>(true, list, true);
+ return new StringFqn(list);
}
/**
@@ -465,7 +492,7 @@
{
if (hash_code == 0)
{
- hash_code = _hashCode();
+ hash_code = calculateHashCode();
}
return hash_code;
}
@@ -482,11 +509,11 @@
*/
public String toString()
{
- if (cachedStringRep == null)
+ if (stringRepresentation == null)
{
if (isRoot())
{
- cachedStringRep = SEPARATOR;
+ stringRepresentation = SEPARATOR;
}
else
{
@@ -495,10 +522,10 @@
{
sb.append(SEPARATOR).append(element);
}
- cachedStringRep = sb.toString();
+ stringRepresentation = sb.toString();
}
}
- return cachedStringRep;
+ return stringRepresentation;
}
public void writeExternal(ObjectOutput out) throws IOException
@@ -578,7 +605,7 @@
*
* @return a cached hashcode
*/
- private int _hashCode()
+ protected int calculateHashCode()
{
int hashCode = 0;
int count = 1;
Added: core/trunk/src/main/java/org/jboss/cache/StringFqn.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/StringFqn.java (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/StringFqn.java 2008-04-22 14:53:02 UTC (rev 5620)
@@ -0,0 +1,86 @@
+package org.jboss.cache;
+
+import java.util.List;
+
+/**
+ * An optimisation of Fqn that does more efficient equals() and hashcode() computations. This is returned by default when
+ * the factory method {@link Fqn#fromString(String)} is used, or when any of the other factory methods on {@link Fqn} are
+ * passed only String elements.
+ *
+ * @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
+ * @since 2.2.0
+ */
+public class StringFqn extends Fqn
+{
+ protected StringFqn()
+ {
+ super(true);
+ stringRepresentation = SEPARATOR;
+ }
+
+ protected StringFqn(StringFqn base, List<String> elements)
+ {
+ super(true, base, elements);
+ String elementStringRep = getStringRepresentation(elements);
+ stringRepresentation = base.isRoot() ? elementStringRep : base.stringRepresentation + elementStringRep;
+ }
+
+ protected StringFqn(StringFqn base, StringFqn relative)
+ {
+ super(true, base, relative.elements);
+ stringRepresentation = base.isRoot() ? relative.stringRepresentation : base.stringRepresentation + relative.stringRepresentation;
+ }
+
+ protected StringFqn(List<String> elements)
+ {
+ super(true, elements, false);
+ stringRepresentation = getStringRepresentation(elements);
+ }
+
+ private String getStringRepresentation(List<String> elements)
+ {
+ StringBuilder builder = new StringBuilder();
+ for (String e : elements)
+ {
+ builder.append(SEPARATOR);
+ // escape special chars.
+ builder.append(e.replace("\\", "\\\\").replace("/", "\\/"));
+ }
+ return builder.toString();
+ }
+
+ @Override
+ public boolean equals(Object other)
+ {
+ if (other == this) return true;
+ if (other == null) return false;
+ if (other.getClass().equals(StringFqn.class))
+ {
+ return stringRepresentation.equals(((StringFqn) other).stringRepresentation);
+ }
+ else
+ {
+ return super.equals(other);
+ }
+ }
+
+ @Override
+ protected int calculateHashCode()
+ {
+ return stringRepresentation.hashCode();
+ }
+
+ @Override
+ public boolean isChildOrEquals(Fqn parentFqn)
+ {
+ if (parentFqn.getClass().equals(StringFqn.class))
+ {
+ StringFqn stringParentFqn = (StringFqn) parentFqn;
+ return stringRepresentation.startsWith(stringParentFqn.stringRepresentation);
+ }
+ else
+ {
+ return super.isChildOrEquals(parentFqn);
+ }
+ }
+}
Modified: core/trunk/src/test/java/org/jboss/cache/FqnTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/FqnTest.java 2008-04-22 12:57:24 UTC (rev 5619)
+++ core/trunk/src/test/java/org/jboss/cache/FqnTest.java 2008-04-22 14:53:02 UTC (rev 5620)
@@ -8,11 +8,16 @@
import org.jboss.cache.config.Configuration;
-import org.jgroups.util.Util;
+import org.jboss.cache.marshall.CacheMarshaller210;
+import org.jboss.cache.marshall.Marshaller;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.HashMap;
/**
@@ -25,11 +30,13 @@
public class FqnTest
{
private Cache<Object, Object> cache;
+ private Marshaller marshaller;
@BeforeTest
protected void setUp()
{
cache = null;
+ marshaller = new CacheMarshaller210();
}
@AfterTest
@@ -341,8 +348,13 @@
@SuppressWarnings("unchecked")
<T> Fqn<T> marshalAndUnmarshal(Fqn<T> fqn) throws Exception
{
- byte[] buf = Util.objectToByteBuffer(fqn);
- return (Fqn<T>) Util.objectFromByteBuffer(buf);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(baos);
+ marshaller.objectToObjectStream(fqn, out);
+ out.close();
+ baos.close();
+ ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
+ return (Fqn<T>) marshaller.objectFromObjectStream(in);
}
// testing generics
@@ -393,6 +405,7 @@
// }
//
+
public void testGenerations()
{
Fqn<Integer> f = Fqn.fromElements(1, 2, 3, 4, 5, 6, 7);
@@ -433,4 +446,24 @@
{
System.out.println("-- " + msg);
}
+
+ public void testUnescapedString()
+ {
+ Fqn f1 = Fqn.fromString("/a/b/c/d"); // an Fqn containing elements "a", "b", "c", "d".
+ Fqn f2 = Fqn.fromElements("a", "b", "c", "d");
+
+ assert f1.equals(f2);
+ assert f2.equals(f1);
+
+ Fqn f3 = Fqn.fromElements("a", "b/c", "d");
+
+ assert !f1.equals(f3);
+ assert !f2.equals(f3);
+ assert !f3.equals(f1);
+ assert !f3.equals(f2);
+
+ System.out.println("F1: " + f1);
+ System.out.println("F2: " + f2);
+ System.out.println("F3: " + f3);
+ }
}
17 years, 8 months
JBoss Cache SVN: r5619 - in core/trunk/src: main/java/org/jboss/cache/commands/remote and 3 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 08:57:24 -0400 (Tue, 22 Apr 2008)
New Revision: 5619
Modified:
core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyFqnTransformer.java
core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
core/trunk/src/main/java/org/jboss/cache/commands/remote/DataGravitationCleanupCommand.java
core/trunk/src/main/java/org/jboss/cache/commands/remote/GravitateDataCommand.java
core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyGroupAssignmentTest.java
core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationContentTest.java
core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationFailoverTest.java
core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationWithTransactionsTest.java
core/trunk/src/test/java/org/jboss/cache/buddyreplication/GravitationCleanupTest.java
Log:
fixed stuff
Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyFqnTransformer.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyFqnTransformer.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyFqnTransformer.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -243,7 +243,7 @@
*/
public static Fqn getBackupFqn(Address dataOwnerAddress, Fqn origFqn)
{
- return getBackupFqn(BuddyManager.getGroupNameFromAddress(dataOwnerAddress), origFqn);
+ return getBackupFqn(getGroupNameFromAddress(dataOwnerAddress), origFqn);
}
/**
@@ -295,7 +295,61 @@
public static Fqn getActualFqn(Fqn fqn)
{
if (!isBackupFqn(fqn)) return fqn;
- // remove the first 2 elements
- return fqn.getSubFqn(2, fqn.size());
+ // remove the first 2 (or 3 in the case of a dead backup region) elements
+ return fqn.getSubFqn(isDeadBackupFqn(fqn) ? 3 : 2, fqn.size());
}
+
+ /**
+ * Tests whether a given Fqn belongs to a dead backup region.
+ *
+ * @param name fqn to test
+ * @return true if the fqn is a part of a dead backup region; false otherwise.
+ */
+ @SuppressWarnings("unchecked")
+ public static boolean isDeadBackupFqn(Fqn name)
+ {
+ if (name == null) return false;
+ Object elem1 = name.get(1);
+ if (elem1 instanceof String)
+ {
+ String strElem1 = (String) elem1;
+ return name.hasElement(BuddyManager.BUDDY_BACKUP_SUBTREE) && strElem1.endsWith(":DEAD");
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * @param dataOwner owner of a data set
+ * @return a backup root for a given data owner
+ */
+ @SuppressWarnings("unchecked")
+ public static Fqn<String> getBackupRoot(Address dataOwner)
+ {
+ return (Fqn) Fqn.fromRelativeElements(BUDDY_BACKUP_SUBTREE_FQN, getGroupNameFromAddress(dataOwner));
+ }
+
+ /**
+ * Returns the backup root of a dead data owner
+ *
+ * @param dataOwner owner of data
+ * @return Fqn of dead data owner's root
+ */
+ @SuppressWarnings("unchecked")
+ public static Fqn<String> getDeadBackupRoot(Address dataOwner)
+ {
+ return (Fqn) Fqn.fromRelativeElements(BUDDY_BACKUP_SUBTREE_FQN, getGroupNameFromAddress(dataOwner) + ":DEAD");
+ }
+
+ public static boolean isDeadBackupRoot(Fqn f)
+ {
+ return f.getParent().equals(BUDDY_BACKUP_SUBTREE_FQN) && f.getLastElementAsString().endsWith(":DEAD");
+ }
+
+ public static String getGroupNameFromAddress(Address address)
+ {
+ return address.toString().replace(':', '_');
+ }
}
Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -217,11 +217,6 @@
return config.getBuddyPoolName();
}
- public static String getGroupNameFromAddress(Address address)
- {
- return address.toString().replace(':', '_');
- }
-
/**
* Stops the buddy manager and the related async thread.
*/
@@ -266,7 +261,7 @@
throw new CacheException("Unable to initialize BuddyManager - the RPCManager has not connected to the cluster and local Address is null!");
}
}
- buddyGroup.setGroupName(getGroupNameFromAddress(localAddress));
+ buddyGroup.setGroupName(BuddyFqnTransformer.getGroupNameFromAddress(localAddress));
if (config.getBuddyPoolName() != null)
{
@@ -549,7 +544,7 @@
buddyGroupsIParticipateIn.put(newGroup.getDataOwner(), newGroup);
// Integrate state transfer from the data owner of the buddy group
- Fqn integrationBase = getBackupRoot(newGroup.getDataOwner());
+ Fqn integrationBase = BuddyFqnTransformer.getBackupRoot(newGroup.getDataOwner());
if (state.isEmpty())
{
@@ -675,57 +670,6 @@
// -------------- internal helpers methods --------------------
- /**
- * @param dataOwner owner of a data set
- * @return a backup root for a given data owner
- */
- @SuppressWarnings("unchecked")
- public static Fqn<String> getBackupRoot(Address dataOwner)
- {
- Fqn f = Fqn.fromRelativeElements(BUDDY_BACKUP_SUBTREE_FQN, getGroupNameFromAddress(dataOwner));
- return f;
- }
-
- /**
- * Returns the backup root of a dead data owner
- *
- * @param dataOwner owner of data
- * @return Fqn of dead data owner's root
- */
- @SuppressWarnings("unchecked")
- public static Fqn<String> getDeadBackupRoot(Address dataOwner)
- {
- Fqn f = Fqn.fromRelativeElements(BUDDY_BACKUP_SUBTREE_FQN, getGroupNameFromAddress(dataOwner) + ":DEAD");
- return f;
- }
-
- public static boolean isDeadBackupRoot(Fqn f)
- {
- return f.getParent().equals(BUDDY_BACKUP_SUBTREE_FQN) && f.getLastElementAsString().endsWith(":DEAD");
- }
-
- /**
- * Tests whether a given Fqn belongs to a dead backup region.
- *
- * @param name fqn to test
- * @return true if the fqn is a part of a dead backup region; false otherwise.
- */
- @SuppressWarnings("unchecked")
- public static boolean isDeadBackupFqn(Fqn name)
- {
- if (name == null) return false;
- Object elem1 = name.get(1);
- if (elem1 instanceof String)
- {
- String strElem1 = (String) elem1;
- return name.hasElement(BuddyManager.BUDDY_BACKUP_SUBTREE) && strElem1.endsWith(":DEAD");
- }
- else
- {
- return false;
- }
- }
-
private void removeFromGroup(List<Address> buddies)
{
if (log.isDebugEnabled())
@@ -1034,13 +978,6 @@
return BuddyFqnTransformer.getBackupFqn(buddyGroup == null || buddyGroup.getGroupName() == null ? "null" : buddyGroup.getGroupName(), originalFqn);
}
- public static Fqn getActualFqn(Fqn fqn)
- {
- if (!BuddyFqnTransformer.isBackupFqn(fqn)) return fqn;
- // remove the first 2 (or 3 in the case of a dead backup region) elements
- return fqn.getSubFqn(isDeadBackupFqn(fqn) ? 3 : 2, fqn.size());
- }
-
private void migrateDefunctData(Node backupRoot, Address dataOwner)
{
Fqn defunctBackupRootFqn = getDefunctBackupRootFqn(dataOwner);
@@ -1060,7 +997,7 @@
{
// the defunct Fqn should be: /_BUDDY_BACKUP_/dataOwnerAddess:DEAD/N
// where N is a number.
- Fqn<String> defunctRoot = getDeadBackupRoot(dataOwner);
+ Fqn<String> defunctRoot = BuddyFqnTransformer.getDeadBackupRoot(dataOwner);
cache.getInvocationContext().getOptionOverrides().setCacheModeLocal(true);
Node defunctRootNode = cache.getRoot().addChild(defunctRoot);
SortedSet childrenNames = new TreeSet(defunctRootNode.getChildrenNames()); // will be naturally sorted.
@@ -1186,7 +1123,7 @@
for (Address a : toRemove)
{
BuddyGroup bg = buddyGroupsIParticipateIn.remove(a);
- Node backupRoot = cache.getNode(getBackupRoot(bg.getDataOwner()));
+ Node backupRoot = cache.getNode(BuddyFqnTransformer.getBackupRoot(bg.getDataOwner()));
migrateDefunctData(backupRoot, bg.getDataOwner());
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/commands/remote/DataGravitationCleanupCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/remote/DataGravitationCleanupCommand.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/commands/remote/DataGravitationCleanupCommand.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -5,6 +5,7 @@
import org.jboss.cache.Fqn;
import org.jboss.cache.InvocationContext;
import org.jboss.cache.NodeSPI;
+import org.jboss.cache.buddyreplication.BuddyFqnTransformer;
import org.jboss.cache.buddyreplication.BuddyManager;
import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.commands.CommandsVisitor;
@@ -83,11 +84,11 @@
if (!executeRemove(gtx, fqn))
{
// only attempt to clean up the backup if the primary did not exist - a waste of a call otherwise.
- Object result = executeRemove(gtx, fqn);
+ Object result = executeRemove(gtx, backup);
if (wasNodeRemoved(result))
{
// if this is a DIRECT child of a DEAD buddy backup region, then remove the empty dead region structural node.
- if (BuddyManager.isDeadBackupFqn(backup) && BuddyManager.isDeadBackupRoot(backup.getParent().getParent()))
+ if (BuddyFqnTransformer.isDeadBackupFqn(backup) && BuddyFqnTransformer.isDeadBackupRoot(backup.getParent().getParent()))
{
NodeSPI deadBackupRoot = cacheData.peek(backup.getParent(), false);
if (deadBackupRoot.getChildrenMapDirect().isEmpty())
@@ -106,6 +107,10 @@
}
}
}
+ else
+ {
+ if (trace) log.trace("Managed to remove primary (" + fqn + "). Not bothering with backups.");
+ }
}
else
{
@@ -217,11 +222,7 @@
public String toString()
{
return "DataGravitationCleanupCommand{" +
- "buddyManager=" + buddyManager +
- ", transactionHelper=" + transactionHelper +
- ", invoker=" + invoker +
- ", commandsFactory=" + commandsFactory +
- ", globalTransaction=" + globalTransaction +
+ "fqn=" + fqn +
", backup=" + backup +
'}';
}
Modified: core/trunk/src/main/java/org/jboss/cache/commands/remote/GravitateDataCommand.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/remote/GravitateDataCommand.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/commands/remote/GravitateDataCommand.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -89,7 +89,7 @@
// childName is the name of a buddy group since all child names in this
// collection are direct children of BUDDY_BACKUP_SUBTREE_FQN
Fqn backupRoot = Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, childName);
- if (BuddyManager.isDeadBackupRoot(backupRoot))
+ if (BuddyFqnTransformer.isDeadBackupRoot(backupRoot))
{
//actualNode = searchDeadRoot(backupRoot, fqn);
Set<Integer> deadChildNames = new TreeSet<Integer>(spi.getChildrenNames(backupRoot));
@@ -141,7 +141,7 @@
if (backupNodeFqn == null && searchSubtrees)
{
- backupNodeFqn = BuddyFqnTransformer.getBackupFqn(BuddyManager.getGroupNameFromAddress(rpcManager.getLocalAddress()), fqn);
+ backupNodeFqn = BuddyFqnTransformer.getBackupFqn(BuddyFqnTransformer.getGroupNameFromAddress(rpcManager.getLocalAddress()), fqn);
}
List<NodeData> list = cacheData.getNodeData(new LinkedList<NodeData>(), (NodeSPI) actualNode);
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -178,7 +178,7 @@
protected boolean skipReplicationOfTransactionMethod(InvocationContext ctx)
{
GlobalTransaction gtx = ctx.getGlobalTransaction();
- return gtx == null || gtx.isRemote();
+ return gtx == null || gtx.isRemote() || ctx.getOptionOverrides().isCacheModeLocal();
}
/**
Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -2,7 +2,10 @@
import org.jboss.cache.InvocationContext;
import org.jboss.cache.commands.CacheCommand;
+import org.jboss.cache.commands.remote.AnnounceBuddyPoolNameCommand;
+import org.jboss.cache.commands.remote.AssignToBuddyGroupCommand;
import org.jboss.cache.commands.remote.DirectCommand;
+import org.jboss.cache.commands.remote.RemoveFromBuddyGroupCommand;
import org.jboss.cache.invocation.CacheLifecycleManager;
import org.jboss.cache.invocation.InterceptorChain;
import org.jboss.cache.invocation.InvocationContextContainer;
@@ -85,6 +88,15 @@
{
if (trace) log.trace("This is a direct command - so performing directly and not via the invoker.");
DirectCommand dCmd = (DirectCommand) cmd;
+
+ // need to check cache status for all except buddy replication commands.
+ if (!(dCmd instanceof AnnounceBuddyPoolNameCommand ||
+ dCmd instanceof AssignToBuddyGroupCommand ||
+ dCmd instanceof RemoveFromBuddyGroupCommand)
+ && !lifecycleManager.allowsInvocation(false))
+ {
+ return null;
+ }
return dCmd.performDirectly();
}
InvocationContext ctx = invocationContextContainer.get();
Modified: core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyGroupAssignmentTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyGroupAssignmentTest.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyGroupAssignmentTest.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -140,11 +140,11 @@
System.out.println("*** Testing cache 1:");
assertIsBuddy(caches.get(1), caches.get(0), true);
- assert caches.get(0).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for self";
- assert caches.get(0).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have backup region for buddy";
+ assert caches.get(0).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for self";
+ assert caches.get(0).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have backup region for buddy";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) != null : "Should have backup region for buddy";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have backup region for self";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) != null : "Should have backup region for buddy";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have backup region for self";
caches.add(createCache(1, null));
@@ -162,17 +162,17 @@
System.out.println("1 Lock info: " + CachePrinter.printCacheLockingInfo(caches.get(1)));
System.out.println("2 Lock info: " + CachePrinter.printCacheLockingInfo(caches.get(2)));
- assert caches.get(0).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for self";
- assert caches.get(0).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should have backup region for non-buddy";
- assert caches.get(0).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have backup region for buddy";
+ assert caches.get(0).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for self";
+ assert caches.get(0).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should have backup region for non-buddy";
+ assert caches.get(0).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have backup region for buddy";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) != null : "Should have backup region for buddy";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have backup region for self";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have backup region for non-buddy";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) != null : "Should have backup region for buddy";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have backup region for self";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have backup region for non-buddy";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for non-buddy";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have backup region for buddy";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have backup region for self";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have backup region for non-buddy";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have backup region for buddy";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have backup region for self";
// ensure no state transfer has happened!!
assert caches.get(2).peek(Fqn.fromString("/cache0"), false) == null : "Unnecessary state should not have been transferred!";
Modified: core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationContentTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationContentTest.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationContentTest.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -51,7 +51,7 @@
caches = createCaches(3, false);
String fqn = "/test";
- String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
+ String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
assertNoStaleLocks(caches);
@@ -83,7 +83,7 @@
caches = createCaches(3, false);
String fqn = "/test";
- String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
+ String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
assertNoStaleLocks(caches);
@@ -127,7 +127,7 @@
caches = createCaches(2, 4, false);
String fqn = "/test";
- String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
+ String backupFqn = "/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + fqn;
// put something in cache 1
assertNoStaleLocks(caches);
Modified: core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationFailoverTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationFailoverTest.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationFailoverTest.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -70,15 +70,15 @@
System.out.println("Killed. Testing backup roots.");
dumpCacheContents(caches);
// assert that the remaining caches have picked new buddies. Cache 1 should have cache 2's backup data.
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have self as a backup root.";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
- assert caches.get(1).peek(Fqn.fromRelativeElements(BuddyManager.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) != null : "Should have dead node as a defunct backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have self as a backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
+ assert caches.get(1).peek(Fqn.fromRelativeElements(BuddyFqnTransformer.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) != null : "Should have dead node as a defunct backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have self as a backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
- assert caches.get(2).peek(Fqn.fromRelativeElements(BuddyManager.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have self as a backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
+ assert caches.get(2).peek(Fqn.fromRelativeElements(BuddyFqnTransformer.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
}
System.out.println("***** Killed original data owner, about to call a get on a different cache instance. *****");
@@ -86,7 +86,7 @@
// according to data gravitation, a call to *any* cache should retrieve the data, and move the data to the new cache.
assertEquals("Value should have gravitated", value, caches.get(2).get(fqn, key));
- TestingUtil.sleepThread(500);
+ delay(); // cleanup commands are async
dumpCacheContents(caches);
@@ -100,16 +100,16 @@
}
else
{
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have self as a backup root.";
- assert caches.get(1).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
- assert caches.get(1).peek(Fqn.fromRelativeElements(BuddyManager.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
- assert caches.get(1).peek(BuddyManager.getDeadBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a defunct backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) == null : "Should not have self as a backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
+ assert caches.get(1).peek(Fqn.fromRelativeElements(BuddyFqnTransformer.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
+ assert caches.get(1).peek(BuddyFqnTransformer.getDeadBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a defunct backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have self as a backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
- assert caches.get(2).peek(BuddyManager.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
- assert caches.get(2).peek(Fqn.fromRelativeElements(BuddyManager.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(2).getLocalAddress()), false) == null : "Should not have self as a backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(1).getLocalAddress()), false) != null : "Should have new buddy's backup root.";
+ assert caches.get(2).peek(BuddyFqnTransformer.getBackupRoot(caches.get(0).getLocalAddress()), false) == null : "Should not have dead node as a backup root.";
+ assert caches.get(2).peek(Fqn.fromRelativeElements(BuddyFqnTransformer.getDeadBackupRoot(caches.get(0).getLocalAddress()), 1), false) == null : "Should not have dead node as a defunct backup root.";
}
assertTrue("Should be false", !caches.get(1).exists(fqn));
@@ -169,6 +169,7 @@
caches.get(1).getInvocationContext().getOptionOverrides().setForceDataGravitation(true);
assertEquals("value", caches.get(1).get(fqn, key));
+ delay(); // cleanup commands are async
dumpCacheContents(caches);
@@ -186,8 +187,8 @@
Fqn<String> fqn = Fqn.fromString("/test");
Fqn<String> fqn2 = Fqn.fromString("/test/subtree");
- Fqn<String> backupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test");
- Fqn<String> backupFqn2 = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test/subtree");
+ Fqn<String> backupFqn = BuddyFqnTransformer.getBackupFqn(caches.get(0).getLocalAddress(), fqn);
+ Fqn<String> backupFqn2 = BuddyFqnTransformer.getBackupFqn(caches.get(0).getLocalAddress(), fqn2);
caches.get(0).put(fqn, key, value);
caches.get(0).put(fqn2, key, value);
@@ -211,9 +212,10 @@
// gravitate to 2:
caches.get(2).getNode(fqn); // expect entire subtree to gravitate.
+ delay(); // cleanup commands are async
- Fqn<String> newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test");
- Fqn<String> newBackupFqn2 = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test/subtree");
+ Fqn<String> newBackupFqn = BuddyFqnTransformer.getBackupFqn(caches.get(2).getLocalAddress(), fqn);
+ Fqn<String> newBackupFqn2 = BuddyFqnTransformer.getBackupFqn(caches.get(2).getLocalAddress(), fqn2);
assertEquals(value, caches.get(2).get(fqn, key));
assertTrue(caches.get(2).exists(fqn2));
@@ -229,6 +231,8 @@
assertTrue(!caches.get(1).exists(newBackupFqn));
assertTrue(!caches.get(1).exists(newBackupFqn2));
+ dumpCacheContents(caches);
+
for (CacheSPI<Object, Object> cache : caches)
{
assertTrue(!cache.exists(backupFqn));
@@ -237,4 +241,9 @@
assertNoLocks(caches);
}
+
+ protected void delay()
+ {
+ TestingUtil.sleepThread(250);
+ }
}
Modified: core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationWithTransactionsTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationWithTransactionsTest.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/test/java/org/jboss/cache/buddyreplication/BuddyReplicationWithTransactionsTest.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -27,8 +27,8 @@
caches = createCaches(3, false, true, false);
caches.get(0).put(fqn, key, value);
- Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test");
- Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test");
+ Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test");
+ Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test");
dumpCacheContents(caches);
@@ -86,8 +86,8 @@
caches = createCaches(3, false, true, false);
caches.get(0).put(fqn, key, value);
- Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test");
- Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyManager.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test");
+ Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress()) + "/test");
+ Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE + "/" + BuddyFqnTransformer.getGroupNameFromAddress(caches.get(2).getLocalAddress()) + "/test");
dumpCacheContents(caches);
Modified: core/trunk/src/test/java/org/jboss/cache/buddyreplication/GravitationCleanupTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/buddyreplication/GravitationCleanupTest.java 2008-04-22 11:14:28 UTC (rev 5618)
+++ core/trunk/src/test/java/org/jboss/cache/buddyreplication/GravitationCleanupTest.java 2008-04-22 12:57:24 UTC (rev 5619)
@@ -49,12 +49,12 @@
System.out.println("buddy: " + CachePrinter.printCacheLockingInfo(buddy));
assert dataOwner.peek(fqn, false) != null : "Should have data";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
assert buddy.peek(fqn, false) == null : "Should not have data";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
assert buddy.peek(BuddyFqnTransformer.getBackupFqn(dataOwner.getLocalAddress(), fqn), false) != null : "Should have backup data";
// now do a gravitate call.
@@ -64,12 +64,12 @@
System.out.println("buddy: " + CachePrinter.printCacheLockingInfo(buddy));
assert buddy.peek(fqn, false) != null : "Should have data";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
assert dataOwner.peek(fqn, false) == null : "Should not have data";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
assert dataOwner.peek(BuddyFqnTransformer.getBackupFqn(buddy.getLocalAddress(), fqn), false) != null : "Should have backup data";
}
@@ -93,13 +93,13 @@
System.out.println("thirdInstance: " + CachePrinter.printCacheLockingInfo(thirdInstance));
assert dataOwner.peek(fqn, false) != null : "Should have data";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) != null : "Should have backup node for buddy";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for 2nd instance!";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for 2nd instance!";
assert buddy.peek(fqn, false) == null : "Should not have data";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null : "Should have backup node for buddy";
assert buddy.peek(BuddyFqnTransformer.getBackupFqn(dataOwner.getLocalAddress(), fqn), false) != null : "Should have backup data";
// now do a gravitate call.
@@ -110,12 +110,12 @@
System.out.println("thirdInstance: " + CachePrinter.printCacheLockingInfo(thirdInstance));
assert thirdInstance.peek(fqn, false) != null : "Should have data";
- assert thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
- assert thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
assert dataOwner.peek(fqn, false) == null : "Should not have data";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
- assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyManager.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) != null : "Should have backup node for buddy";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null : "Should NOT have backup node for self!";
+ assert dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, BuddyFqnTransformer.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) != null : "Should have backup node for buddy";
assert dataOwner.peek(BuddyFqnTransformer.getBackupFqn(thirdInstance.getLocalAddress(), fqn), false) != null : "Should have backup data";
assert buddy.peek(fqn, false) == null : "Should not have data";
assert buddy.peek(fqn.getParent(), false) == null : "Should not have any part of the data";
17 years, 8 months
JBoss Cache SVN: r5618 - in core/trunk/src: main/java/org/jboss/cache/interceptors and 1 other directories.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-04-22 07:14:28 -0400 (Tue, 22 Apr 2008)
New Revision: 5618
Modified:
core/trunk/src/main/java/org/jboss/cache/Cache.java
core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java
core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java
Log:
JBCACHE-1222 - bug fixing - put for external read
Modified: core/trunk/src/main/java/org/jboss/cache/Cache.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/Cache.java 2008-04-22 10:38:03 UTC (rev 5617)
+++ core/trunk/src/main/java/org/jboss/cache/Cache.java 2008-04-22 11:14:28 UTC (rev 5618)
@@ -172,7 +172,8 @@
* Under special operating behavior, associates the value with the specified key for a node identified by the Fqn passed in.
* <ul>
* <li> Only goes through if the node specified does not exist; no-op otherwise.</i>
- * <li> Force asynchronous mode for replication or invalidation to prevent any blocking.</li>
+ * <li> Force asynchronous mode for replication to prevent any blocking.</li>
+ * <li> invalidation does not take place. </li>
* <li> 0ms lock timeout to prevent any blocking here either. If the lock is not acquired, this method is a no-op, and swallows the timeout exception.</li>
* <li> Ongoing transactions are suspended before this call, so failures here will not affect any ongoing transactions.</li>
* <li> Errors and exceptions are 'silent' - logged at a much lower level than normal, and this method does not throw exceptions</li>
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java 2008-04-22 10:38:03 UTC (rev 5617)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java 2008-04-22 11:14:28 UTC (rev 5618)
@@ -108,6 +108,7 @@
public Object handlePutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable
{
+ if (command.isPutForExternalRead()) return invokeNextInterceptor(ctx, command);
return handleCrudMethod(ctx, command.getFqn(), null, command);
}
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-04-22 10:38:03 UTC (rev 5617)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-04-22 11:14:28 UTC (rev 5618)
@@ -70,16 +70,16 @@
@Override
public Object handlePutDataMapCommand(InvocationContext ctx, PutDataMapCommand command) throws Throwable
{
- return handlePutCommand(ctx, command);
+ return handlePutCommand(ctx, command, false);
}
@Override
public Object handlePutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable
{
- return handlePutCommand(ctx, command);
+ return handlePutCommand(ctx, command, command.isPutForExternalRead());
}
- private Object handlePutCommand(InvocationContext ctx, CacheDataCommand command)
+ private Object handlePutCommand(InvocationContext ctx, CacheDataCommand command, boolean zeroAcquisitionTimeout)
throws Throwable
{
if ((ctx.isSupressLocking()) || configuration.getIsolationLevel() == IsolationLevel.NONE)
@@ -99,7 +99,8 @@
}
else
{
- lockManager.acquireLocksWithTimeout(ctx, command.getFqn(), NodeLock.LockType.WRITE, true, false, false, true, null, false);
+ lockManager.acquireLocksWithTimeout(ctx, command.getFqn(), NodeLock.LockType.WRITE, true,
+ zeroAcquisitionTimeout, false, true, null, false);
}
Object retVal = invokeNextInterceptor(ctx, command);
ctx.clearInvocationLocksAcquired();
Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java 2008-04-22 10:38:03 UTC (rev 5617)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java 2008-04-22 11:14:28 UTC (rev 5618)
@@ -104,8 +104,9 @@
long startTime = System.currentTimeMillis();
cache1.putForExternalRead(fqn, key, value);
+ long waited = System.currentTimeMillis() - startTime;
// crappy way to test that pFER does not block, but it is effective.
- assertTrue("Should not wait for lock timeout, should attempt to acquite lock with 0ms!", System.currentTimeMillis() - startTime < cache1.getConfiguration().getLockAcquisitionTimeout());
+ assertTrue("Should not wait " + waited + " millis for lock timeout, should attempt to acquite lock with 0ms!", waited < cache1.getConfiguration().getLockAcquisitionTimeout());
// should not block.
tm1.resume(t);
17 years, 8 months
JBoss Cache SVN: r5617 - core/trunk/src/main/java/org/jboss/cache/interceptors.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 06:38:03 -0400 (Tue, 22 Apr 2008)
New Revision: 5617
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
Log:
Handle moves!
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-04-22 10:27:14 UTC (rev 5616)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-04-22 10:38:03 UTC (rev 5617)
@@ -13,6 +13,7 @@
import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.commands.cachedata.CreateNodeCommand;
import org.jboss.cache.commands.cachedata.EvictNodeCommand;
+import org.jboss.cache.commands.cachedata.MoveCommand;
import org.jboss.cache.commands.cachedata.PutDataMapCommand;
import org.jboss.cache.commands.cachedata.PutKeyValueCommand;
import org.jboss.cache.commands.cachedata.RemoveDataCommand;
@@ -358,6 +359,12 @@
}
@Override
+ public Object handleMoveCommand(InvocationContext ctx, MoveCommand command) throws Throwable
+ {
+ return command;
+ }
+
+ @Override
public Object handleDefault(InvocationContext ctx, CacheCommand command) throws Throwable
{
throw new CacheException("Not handling " + command + "!");
17 years, 8 months
JBoss Cache SVN: r5616 - in core/trunk/src: main/java/org/jboss/cache/invocation and 3 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 06:27:14 -0400 (Tue, 22 Apr 2008)
New Revision: 5616
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
core/trunk/src/main/java/org/jboss/cache/invocation/InterceptorChain.java
core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java
core/trunk/src/test/java/org/jboss/cache/optimistic/CacheTest.java
core/trunk/src/test/java/org/jboss/cache/optimistic/NodeInterceptorRemoveDataTest.java
core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticReplicationInterceptorTest.java
Log:
Fixed various issues pertaining to optimistic locking
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -11,6 +11,7 @@
import org.jboss.cache.InvocationContext;
import org.jboss.cache.commands.CacheCommand;
import org.jboss.cache.commands.CommandsFactory;
+import org.jboss.cache.commands.cachedata.CreateNodeCommand;
import org.jboss.cache.commands.cachedata.EvictNodeCommand;
import org.jboss.cache.commands.cachedata.PutDataMapCommand;
import org.jboss.cache.commands.cachedata.PutKeyValueCommand;
@@ -174,7 +175,7 @@
return invokeNextInterceptor(ctx, command);
}
GlobalTransaction gtx = getGlobalTransaction(ctx);
- transactionTable.get(gtx).setForceAsyncReplication(true);
+ if (command.isPutForExternalRead()) transactionTable.get(gtx).setForceAsyncReplication(true);
return invokeNextInterceptor(ctx, command);
}
@@ -351,9 +352,15 @@
}
@Override
+ public Object handleCreateNodeCommand(InvocationContext ctx, CreateNodeCommand command) throws Throwable
+ {
+ return command;
+ }
+
+ @Override
public Object handleDefault(InvocationContext ctx, CacheCommand command) throws Throwable
{
- throw new CacheException("Not handling " + command + " commads!");
+ throw new CacheException("Not handling " + command + "!");
}
/**
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/InterceptorChain.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/InterceptorChain.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/InterceptorChain.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -2,8 +2,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.cache.CacheException;
import org.jboss.cache.InvocationContext;
-import org.jboss.cache.CacheException;
import org.jboss.cache.commands.CacheCommand;
import org.jboss.cache.factories.annotations.Inject;
import org.jboss.cache.interceptors.base.ChainedInterceptor;
@@ -269,11 +269,24 @@
return cacheCommand.accept(ctxt, firstInChain);
}
+ /**
+ * @return the first interceptor in the chain.
+ */
public ChainedInterceptor getFirstInChain()
{
return firstInChain;
}
+ /**
+ * Mainly used by unit tests to replace the interceptor chain with the starting point passed in.
+ *
+ * @param interceptor interceptor to be used as the first interceptor in the chain.
+ */
+ public void setFirstInChain(ChainedInterceptor interceptor)
+ {
+ this.firstInChain = interceptor;
+ }
+
public InvocationContext getInvocationContext()
{
return invocationContextContainer.get();
Modified: core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -65,6 +65,8 @@
{
throw new IllegalStateException("VersionedNode version null");
}
+
+ initFlags();
}
protected void initFlags()
Modified: core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -498,10 +498,16 @@
public static void replaceInterceptorChain(CacheSPI<?, ?> cache, ChainedInterceptor interceptor)
{
ComponentRegistry cr = extractComponentRegistry(cache);
+ // make sure all interceptors here are wired.
+ ChainedInterceptor i = interceptor;
+ do
+ {
+ cr.wireDependencies(i);
+ }
+ while ((i = i.getNext()) != null);
- // This will replace the previous interceptor chain in the component registry
- // as well as update dependencies!
- cr.registerComponent(ChainedInterceptor.class.getName(), interceptor, ChainedInterceptor.class);
+ InterceptorChain inch = cr.getComponent(InterceptorChain.class);
+ inch.setFirstInChain(interceptor);
}
/**
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/CacheTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/CacheTest.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/CacheTest.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -227,7 +227,7 @@
commandsFactory = new CommandsFactory();
//call our remote method
List<TxCacheCommand> cacheCommands = injectDataVersion(entry.getModifications());
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, cacheCommands, (Map) null, (Address) remoteGtx.getAddress(), false);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, cacheCommands, (Map) null, (Address) remoteGtx.getAddress(), false);
TestingUtil.replicateCommand(c, prepareCommand);
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/NodeInterceptorRemoveDataTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/NodeInterceptorRemoveDataTest.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/NodeInterceptorRemoveDataTest.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -2,7 +2,6 @@
import org.jboss.cache.CacheSPI;
import org.jboss.cache.Fqn;
-import org.jboss.cache.commands.tx.CommitCommand;
import org.jboss.cache.interceptors.OptimisticCreateIfNotExistsInterceptor;
import org.jboss.cache.interceptors.OptimisticNodeInterceptor;
import org.jboss.cache.interceptors.base.ChainedInterceptor;
@@ -86,7 +85,7 @@
assertTrue(entry.getLocks().isEmpty());
assertEquals(0, entry.getModifications().size());
assertTrue(!cache.exists("/one/two"));
- assertEquals(CommitCommand.class, dummy.getCalledCommand().getClass());
+ assertEquals(null, dummy.getCalledCommand());
}
public void testTransactionRemoveEmptyMethod() throws Exception
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticReplicationInterceptorTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticReplicationInterceptorTest.java 2008-04-22 10:18:45 UTC (rev 5615)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticReplicationInterceptorTest.java 2008-04-22 10:27:14 UTC (rev 5616)
@@ -8,7 +8,6 @@
import org.jboss.cache.CacheSPI;
import org.jboss.cache.commands.CacheCommand;
-import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.commands.state.GlobalTransactionCommand;
import org.jboss.cache.commands.tx.CommitCommand;
import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
@@ -41,11 +40,11 @@
* @author xenephon
*/
@SuppressWarnings("unchecked")
-@Test(groups = "functional")
+@Test(groups = "functional", enabled = false)
+// disabling since this needs to be rewritten to cope with the new OptimisticReplicationInterceptor. This really doesn't test very much right now.
public class OptimisticReplicationInterceptorTest extends AbstractOptimisticTestCase
{
private CacheSPI cache;
- private CommandsFactory commandsFactory;
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception
@@ -149,8 +148,7 @@
command.setGlobalTransaction(remoteGtx);
//call our remote method
- commandsFactory = new CommandsFactory();
- CacheCommand prepcareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
+ CacheCommand prepcareCommand = new OptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
try
{
TestingUtil.replicateCommand(cache, prepcareCommand); //getInvocationDelegate(cache)._replicate(prepareMethod);
@@ -214,7 +212,7 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- CacheCommand prepcareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
+ CacheCommand prepcareCommand = new OptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
try
{
TestingUtil.replicateCommand(cache, prepcareCommand);
@@ -243,7 +241,7 @@
assertEquals(1, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- CacheCommand cacheCommand = commandsFactory.buildRollbackCommand(null);
+ CacheCommand cacheCommand = new RollbackCommand(null);
try
{
TestingUtil.replicateCommand(cache, cacheCommand);
@@ -299,7 +297,7 @@
assertEquals(0, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- CacheCommand cacheCommand = commandsFactory.buildCommitCommand(gtx);
+ CacheCommand cacheCommand = new CommitCommand(gtx);
try
{
@@ -359,7 +357,7 @@
assertEquals(0, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- CacheCommand cacheCommand = commandsFactory.buildRollbackCommand(remoteGtx);
+ CacheCommand cacheCommand = new RollbackCommand(remoteGtx);
TestingUtil.replicateCommand(cache, cacheCommand);
assertTrue("Should be handled on the remote end without barfing, in the event of a rollback without a prepare", true);
@@ -403,7 +401,7 @@
//hack the method call to make it have the remote globalTransaction
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
- CacheCommand prepcareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
+ CacheCommand prepcareCommand = new OptimisticPrepareCommand(remoteGtx, null, (Map) null, (Address) remoteGtx.getAddress(), false);
try
{
TestingUtil.replicateCommand(cache, prepcareCommand);
@@ -433,7 +431,7 @@
assertEquals(1, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- CacheCommand commitCommand = commandsFactory.buildCommitCommand(remoteGtx);
+ CacheCommand commitCommand = new CommitCommand(remoteGtx);
try
{
TestingUtil.replicateCommand(cache, commitCommand);
17 years, 8 months
JBoss Cache SVN: r5615 - in core/trunk/src: main/java/org/jboss/cache/interceptors and 2 other directories.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-04-22 06:18:45 -0400 (Tue, 22 Apr 2008)
New Revision: 5615
Modified:
core/trunk/src/main/java/org/jboss/cache/NodeSPI.java
core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java
core/trunk/src/test/java/org/jboss/cache/api/NodeSPITest.java
Log:
JBCACHE-1222 - bug fixing -
Modified: core/trunk/src/main/java/org/jboss/cache/NodeSPI.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/NodeSPI.java 2008-04-22 08:12:20 UTC (rev 5614)
+++ core/trunk/src/main/java/org/jboss/cache/NodeSPI.java 2008-04-22 10:18:45 UTC (rev 5615)
@@ -375,8 +375,6 @@
* This data should only be modified by the cache itself.
* This method should never return null.
* <p/>
- * Also note that this method returns an unmodifiable reference to the underlying data map.
- * <p/>
* The caller needs to ensure a proper lock has been obtained prior to calling this method, otherwise a
* {@link org.jboss.cache.lock.LockingException} will be thrown.
* <p/>
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-04-22 08:12:20 UTC (rev 5614)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java 2008-04-22 10:18:45 UTC (rev 5615)
@@ -232,12 +232,13 @@
Object retVal = invokeNextInterceptor(ctx, command);
// and make sure we remove all nodes we've created for the sake of later removal.
+ //todo [mmarkus] this logic should be moved within moveNodeCommand, as it is plain removal logic
if (ctx.getGlobalTransaction() == null)
{
-
for (NodeSPI nodeSPI : createdNodes) cacheData.realRemove(nodeSPI.getFqn(), true);
cacheData.realRemove(command.getFqn(), true);
+ //todo end of the logic that needs to be moved
NodeSPI n = cacheData.peek(command.getFqn(), true, false);
if (n != null)
{
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java 2008-04-22 08:12:20 UTC (rev 5614)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/CacheInvocationDelegate.java 2008-04-22 10:18:45 UTC (rev 5615)
@@ -390,7 +390,7 @@
InvocationContext ctx = invocationContextContainer.get();
cacheStatusCheck(ctx);
GlobalTransaction tx = transactionHelper.getCurrentTransaction();
- RemoveNodeCommand command = commandsFactory.buildRemoveNodeCommand(tx, fqn, true, true, false);
+ RemoveNodeCommand command = commandsFactory.buildRemoveNodeCommand(tx, fqn, false, false, true);
Object retval = invoker.invoke(ctx, command);
return retval != null && (Boolean) retval;
}
Modified: core/trunk/src/test/java/org/jboss/cache/api/NodeSPITest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/NodeSPITest.java 2008-04-22 08:12:20 UTC (rev 5614)
+++ core/trunk/src/test/java/org/jboss/cache/api/NodeSPITest.java 2008-04-22 10:18:45 UTC (rev 5615)
@@ -76,41 +76,6 @@
nodeA.addChildDirect(B);// should work
}
- public void testDataImmutabilityAndDefensiveCopy()
- {
- // put some stuff in the root node
- root.put("k", "v");
- Map dataDirect = root.getDataDirect();
- Set keysDirect = root.getKeysDirect();
-
- try
- {
- dataDirect.remove("k");
- fail("getDataDirect() should return an unmodifiable collection object");
- }
- catch (UnsupportedOperationException uoe)
- {
- // good; should be immutable
- }
-
- try
- {
- keysDirect.clear();
- fail("getKeysDirect() should return an unmodifiable collection object");
- }
- catch (UnsupportedOperationException uoe)
- {
- // good; should be immutable
- }
-
- // now test defensive copy
- root.put("k2", "v2");
-
- assertTrue("root.put() should have succeeded", root.getDataDirect().containsKey("k2"));
-// assertTrue("getDataDirect() should have made a defensive copy of the data collection object", !dataDirect.containsKey("k2"));
- assertTrue("getKeysDirect() should have made a defensive copy of the data collection object", !keysDirect.contains("k2"));
- }
-
public void testChildrenImmutabilityAndDefensiveCopy()
{
// put some stuff in the root node
17 years, 8 months
JBoss Cache SVN: r5614 - in core/trunk/src: test/java/org/jboss/cache/optimistic and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-22 04:12:20 -0400 (Tue, 22 Apr 2008)
New Revision: 5614
Modified:
core/trunk/src/main/java/org/jboss/cache/commands/CommandsFactory.java
core/trunk/src/test/java/org/jboss/cache/optimistic/AsyncFullStackInterceptorTest.java
core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticVersioningTest.java
Log:
Fixed various issues
Modified: core/trunk/src/main/java/org/jboss/cache/commands/CommandsFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/commands/CommandsFactory.java 2008-04-22 00:37:00 UTC (rev 5613)
+++ core/trunk/src/main/java/org/jboss/cache/commands/CommandsFactory.java 2008-04-22 08:12:20 UTC (rev 5614)
@@ -341,14 +341,17 @@
break;
case RemoveDataCommand.METHOD_ID:
+ case RemoveDataCommand.VERSIONED_METHOD_ID:
returnValue = new RemoveDataCommand();
break;
case RemoveKeyCommand.METHOD_ID:
+ case RemoveKeyCommand.VERSIONED_METHOD_ID:
returnValue = new RemoveKeyCommand();
break;
case RemoveNodeCommand.METHOD_ID:
+ case RemoveNodeCommand.VERSIONED_METHOD_ID:
returnValue = new RemoveNodeCommand();
break;
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/AsyncFullStackInterceptorTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/AsyncFullStackInterceptorTest.java 2008-04-22 00:37:00 UTC (rev 5613)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/AsyncFullStackInterceptorTest.java 2008-04-22 08:12:20 UTC (rev 5614)
@@ -266,8 +266,8 @@
assertTrue(cache.exists(Fqn.fromString("/one/two")));
assertNotNull(cache.getNode("/one"));
assertEquals(false, cache.getRoot().getLock().isLocked());
- assertEquals(false, ((NodeSPI<Object, Object>) cache.getNode("/one")).getLock().isLocked());
- assertEquals(false, ((NodeSPI<Object, Object>) cache.getNode("/one/two")).getLock().isLocked());
+ assertEquals(false, cache.getNode("/one").getLock().isLocked());
+ assertEquals(false, cache.getNode("/one/two").getLock().isLocked());
assertNotNull(cache.getNode("/one").getChild("two"));
assertNotNull(cache.get(Fqn.fromString("/one/two"), "key1"));
@@ -285,8 +285,8 @@
assertTrue(cache2.exists(Fqn.fromString("/one/two")));
assertNotNull(cache2.getRoot().getChild("one"));
assertEquals(false, cache2.getRoot().getLock().isLocked());
- assertEquals(false, ((NodeSPI<Object, Object>) cache2.getNode("/one")).getLock().isLocked());
- assertEquals(false, ((NodeSPI<Object, Object>) cache2.getNode("/one/two")).getLock().isLocked());
+ assertEquals(false, cache2.getNode("/one").getLock().isLocked());
+ assertEquals(false, cache2.getNode("/one/two").getLock().isLocked());
assertNotNull(cache2.getNode("/one").getChild("two"));
assertNotNull(cache2.get(Fqn.fromString("/one/two"), "key1"));
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticVersioningTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticVersioningTest.java 2008-04-22 00:37:00 UTC (rev 5613)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticVersioningTest.java 2008-04-22 08:12:20 UTC (rev 5614)
@@ -7,7 +7,6 @@
package org.jboss.cache.optimistic;
import junit.framework.Assert;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.cache.CacheSPI;
@@ -35,7 +34,7 @@
public class OptimisticVersioningTest extends AbstractOptimisticTestCase
{
private static final Log log = LogFactory.getLog(OptimisticVersioningTest.class);
-
+
CacheSPI cache1, cache2;
@BeforeMethod(alwaysRun = true)
@@ -72,8 +71,8 @@
// change stuff in the node again...
cache1.put(fqn, key, "value2");
- v1 = ((NodeSPI) cache1.getNode(fqn)).getVersion();
- v2 = ((NodeSPI) cache2.getNode(fqn)).getVersion();
+ v1 = cache1.getNode(fqn).getVersion();
+ v2 = cache2.getNode(fqn).getVersion();
assertEquals("value2", cache1.get(fqn, key));
assertEquals("value2", cache2.get(fqn, key));
@@ -91,8 +90,8 @@
cache1.put(fqn, key, "value");
- DataVersion v1 = ((NodeSPI) cache1.getNode(fqn)).getVersion();
- DataVersion v2 = ((NodeSPI) cache2.getNode(fqn)).getVersion();
+ DataVersion v1 = cache1.getNode(fqn).getVersion();
+ DataVersion v2 = cache2.getNode(fqn).getVersion();
assertEquals("value", cache1.get(fqn, key));
assertEquals("value", cache2.get(fqn, key));
@@ -130,35 +129,41 @@
assertEquals("Version info should have propagated", v1, v2);
}
-
+
public void testRemovalWithSpecifiedVersion() throws Exception
{
Fqn fqn = Fqn.fromString("/test/node");
-
+
Node root = cache1.getRoot();
cache1.getInvocationContext().getOptionOverrides().setDataVersion(new NonLockingDataVersion());
root.addChild(fqn);
cache1.getInvocationContext().getOptionOverrides().setDataVersion(new NonLockingDataVersion());
cache1.removeNode(fqn);
-
+
Assert.assertNull(cache1.getRoot().getChild(fqn));
}
-
- private static class NonLockingDataVersion implements DataVersion {
- /** The serialVersionUID */
+ private static class NonLockingDataVersion implements DataVersion
+ {
+
+ /**
+ * The serialVersionUID
+ */
private static final long serialVersionUID = 1L;
- public boolean newerThan(DataVersion dataVersion) {
-
- if (dataVersion instanceof DefaultDataVersion) {
- log.info("unexpectedly validating against a DefaultDataVersion", new Exception("Just a stack trace"));
- }
- else {
- log.trace("non locking lock check...");
- }
- return false;
+ public boolean newerThan(DataVersion dataVersion)
+ {
+
+ if (dataVersion instanceof DefaultDataVersion)
+ {
+ log.info("unexpectedly validating against a DefaultDataVersion", new Exception("Just a stack trace"));
+ }
+ else
+ {
+ log.trace("non locking lock check...");
+ }
+ return false;
}
- }
+ }
}
17 years, 8 months
JBoss Cache SVN: r5613 - in core/trunk/src: test/java/org/jboss/cache/misc and 1 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-04-21 20:37:00 -0400 (Mon, 21 Apr 2008)
New Revision: 5613
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java
core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticLockInterceptorTest.java
core/trunk/src/test/java/org/jboss/cache/optimistic/TxInterceptorTest.java
core/trunk/src/test/java/org/jboss/cache/optimistic/ValidatorInterceptorTest.java
Log:
Fixed various issues
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java 2008-04-21 23:39:34 UTC (rev 5612)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java 2008-04-22 00:37:00 UTC (rev 5613)
@@ -114,7 +114,7 @@
Transaction tx = getTransaction();
GlobalTransaction realGtx = getGlobalTransaction(tx, gtx);
if (tx == null && realGtx != null && realGtx.isRemote()) tx = txTable.getLocalTransaction(gtx);
- setTransactionalContext(tx, gtx, ctx);
+ setTransactionalContext(tx, realGtx, ctx);
if (optionOverride != null)
{
Modified: core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java 2008-04-21 23:39:34 UTC (rev 5612)
+++ core/trunk/src/test/java/org/jboss/cache/misc/TestingUtil.java 2008-04-22 00:37:00 UTC (rev 5613)
@@ -14,11 +14,10 @@
import org.jboss.cache.commands.CacheCommand;
import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.factories.ComponentRegistry;
-import org.jboss.cache.interceptors.Interceptor;
import org.jboss.cache.interceptors.base.ChainedInterceptor;
import org.jboss.cache.invocation.CacheInvocationDelegate;
+import org.jboss.cache.invocation.CacheLifecycleManager;
import org.jboss.cache.invocation.InterceptorChain;
-import org.jboss.cache.invocation.CacheLifecycleManager;
import org.jboss.cache.loader.CacheLoader;
import org.jboss.cache.loader.CacheLoaderManager;
@@ -211,7 +210,7 @@
throw new RuntimeException("timed out before caches had complete views");
}
- /**
+ /**
* Checks each cache to see if the number of elements in the array
* returned by {@link CacheSPI#getMembers()} matches the size of
* the <code>caches</code> parameter.
@@ -536,9 +535,12 @@
}
throw new RuntimeException("Timed out waiting for condition");
}
- public static void replicateCommand(CacheSPI cache, CacheCommand prepcareCommand)
+
+ public static void replicateCommand(CacheSPI cache, CacheCommand command) throws Throwable
{
- //todo implement
+ ComponentRegistry cr = extractComponentRegistry(cache);
+ InterceptorChain ic = cr.getComponent(InterceptorChain.class);
+ ic.invoke(command);
}
public static void blockUntilViewsReceived(int timeout, List caches)
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticLockInterceptorTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticLockInterceptorTest.java 2008-04-21 23:39:34 UTC (rev 5612)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/OptimisticLockInterceptorTest.java 2008-04-22 00:37:00 UTC (rev 5613)
@@ -40,6 +40,7 @@
{
cache = createCache();
lri = new LockReportInterceptor();
+ TestingUtil.extractComponentRegistry(cache).wireDependencies(lri);
TestingUtil.injectInterceptor(cache, lri, OptimisticLockingInterceptor.class);
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/TxInterceptorTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/TxInterceptorTest.java 2008-04-21 23:39:34 UTC (rev 5612)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/TxInterceptorTest.java 2008-04-22 00:37:00 UTC (rev 5613)
@@ -7,7 +7,6 @@
package org.jboss.cache.optimistic;
import org.jboss.cache.CacheSPI;
-import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.commands.state.GlobalTransactionCommand;
import org.jboss.cache.commands.tx.CommitCommand;
import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
@@ -30,8 +29,6 @@
@Test(groups = {"functional", "transaction"})
public class TxInterceptorTest extends AbstractOptimisticTestCase
{
- private CommandsFactory commandsFactory;
-
@Override
protected CacheSPI<Object, Object> createCacheUnstarted(boolean optimistic) throws Exception
{
@@ -223,7 +220,6 @@
}
catch (Exception e)
{
- e.printStackTrace();
failed = true;
assertTrue(true);
}
@@ -309,11 +305,10 @@
remoteGtx.setAddress(new DummyAddress());
//hack the method call to make it have the remote globalTransaction
- commandsFactory = new CommandsFactory();
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -372,7 +367,7 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -455,7 +450,7 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -469,7 +464,7 @@
assertEquals(2, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- CommitCommand commitMethod = commandsFactory.buildCommitCommand(remoteGtx);
+ CommitCommand commitMethod = new CommitCommand(remoteGtx);
try
{
TestingUtil.replicateCommand(cache, commitMethod);
@@ -543,7 +538,7 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -557,10 +552,10 @@
assertEquals(2, cache.getTransactionTable().getNumLocalTransactions());
// call our remote method
- RollbackCommand rollbackCommand = commandsFactory.buildRollbackCommand(remoteGtx);
+ RollbackCommand rollbackCommand = new RollbackCommand(remoteGtx);
try
{
- TestingUtil.replicateCommand(cache, command);
+ TestingUtil.replicateCommand(cache, rollbackCommand);
}
catch (Throwable t)
{
@@ -641,7 +636,7 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -667,7 +662,7 @@
assertNull(mgr.getTransaction());
// call our remote method
- CommitCommand commitCommand = commandsFactory.buildCommitCommand(remoteGtx);
+ CommitCommand commitCommand = new CommitCommand(remoteGtx);
try
{
TestingUtil.replicateCommand(cache, commitCommand);
@@ -725,10 +720,10 @@
GlobalTransactionCommand command = (GlobalTransactionCommand) entry.getModifications().get(0);
command.setGlobalTransaction(remoteGtx);
//call our remote method
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(remoteGtx, injectDataVersion(entry.getModifications()), (Map) null, (Address) remoteGtx.getAddress(), Boolean.FALSE);
try
{
- TestingUtil.replicateCommand(cache, command);
+ TestingUtil.replicateCommand(cache, prepareCommand);
}
catch (Throwable t)
{
@@ -748,7 +743,7 @@
assertEquals(OptimisticPrepareCommand.METHOD_ID, calls.get(2));
// call our remote method
- RollbackCommand rollbackCommand = commandsFactory.buildRollbackCommand(remoteGtx);
+ RollbackCommand rollbackCommand = new RollbackCommand(remoteGtx);
try
{
TestingUtil.replicateCommand(cache, rollbackCommand);
Modified: core/trunk/src/test/java/org/jboss/cache/optimistic/ValidatorInterceptorTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/optimistic/ValidatorInterceptorTest.java 2008-04-21 23:39:34 UTC (rev 5612)
+++ core/trunk/src/test/java/org/jboss/cache/optimistic/ValidatorInterceptorTest.java 2008-04-22 00:37:00 UTC (rev 5613)
@@ -11,7 +11,6 @@
import org.jboss.cache.InvocationContext;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.commands.CacheCommand;
-import org.jboss.cache.commands.CommandsFactory;
import org.jboss.cache.commands.tx.CommitCommand;
import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
import org.jboss.cache.commands.tx.RollbackCommand;
@@ -47,7 +46,6 @@
private CacheSPI<Object, Object> cache;
private TransactionManager mgr;
private MockInterceptor dummy;
- private CommandsFactory commandsFactory;
@BeforeMethod
public void setUp() throws Exception
@@ -110,8 +108,7 @@
assertTrue(!cache.exists("/one/two"));
assertEquals(null, dummy.getCalledCommand());
- commandsFactory = new CommandsFactory();
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
//now let us do a prepare
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -164,7 +161,7 @@
//lets change one of the underlying version numbers
workspace.getNode(Fqn.fromString("/one/two")).getNode().setVersion(new DefaultDataVersion(2));
//now let us do a prepare
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -211,7 +208,7 @@
//lets change one of the underlying version numbers
//now let us do a prepare
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -222,7 +219,7 @@
assertTrue(true);
}
- CommitCommand commitCommand = commandsFactory.buildCommitCommand(gtx);
+ CommitCommand commitCommand = new CommitCommand(gtx);
TestingUtil.replicateCommand(cache, commitCommand);
@@ -288,7 +285,7 @@
//lets change one of the underlying version numbers
//now let us do a prepare
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
try
{
TestingUtil.replicateCommand(cache, prepareCommand);
@@ -300,7 +297,7 @@
}
- CommitCommand commitCommand = commandsFactory.buildCommitCommand(gtx);
+ CommitCommand commitCommand = new CommitCommand(gtx);
TestingUtil.replicateCommand(cache, commitCommand);
@@ -367,7 +364,7 @@
//lets change one of the underlying version numbers
//now let us do a prepare
- OptimisticPrepareCommand prepareCommand = commandsFactory.buildOptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
+ OptimisticPrepareCommand prepareCommand = new OptimisticPrepareCommand(gtx, entry.getModifications(), (Map) null, (Address) gtx.getAddress(), Boolean.FALSE);
try
{
@@ -379,7 +376,7 @@
assertTrue(true);
}
- RollbackCommand rollbackCommand = commandsFactory.buildRollbackCommand(null);
+ RollbackCommand rollbackCommand = new RollbackCommand(gtx);
TestingUtil.replicateCommand(cache, rollbackCommand);
17 years, 8 months