[infinispan-commits] Infinispan SVN: r171 - in trunk/core/src: main/java/org/infinispan/interceptors and 2 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Mon Apr 27 10:17:28 EDT 2009
Author: manik.surtani at jboss.com
Date: 2009-04-27 10:17:28 -0400 (Mon, 27 Apr 2009)
New Revision: 171
Added:
trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
Removed:
trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java
Modified:
trunk/core/src/main/java/org/infinispan/config/Configuration.java
trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java
trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java
Log:
[ISPN-30] (DIST) Return value issues and more tests
Modified: trunk/core/src/main/java/org/infinispan/config/Configuration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/Configuration.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/main/java/org/infinispan/config/Configuration.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -699,8 +699,5 @@
// certain combinations are illegal, such as state transfer + DIST
if (cacheMode.isDistributed() && fetchInMemoryState)
throw new ConfigurationException("Cache cannot use DISTRIBUTION mode and have fetchInMemoryState set to true");
-
- if (cacheMode == CacheMode.DIST_ASYNC && !unsafeUnreliableReturnValues)
- throw new ConfigurationException("DISTRIBUTION mode cannot be asynchronous without breaking return values in the public API. To force this, please use the <unsafe /> element, setting the 'unreliableReturnValues' attribute to 'true'.");
}
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -12,11 +12,13 @@
import org.infinispan.commands.write.RemoveCommand;
import org.infinispan.commands.write.ReplaceCommand;
import org.infinispan.commands.write.WriteCommand;
+import org.infinispan.container.DataContainer;
import org.infinispan.container.entries.InternalCacheEntry;
import org.infinispan.context.InvocationContext;
import org.infinispan.context.TransactionContext;
import org.infinispan.distribution.DistributionManager;
import org.infinispan.factories.annotations.Inject;
+import org.infinispan.factories.annotations.Start;
import org.infinispan.interceptors.base.BaseRpcInterceptor;
import org.infinispan.remoting.transport.Address;
import org.infinispan.util.Immutables;
@@ -37,6 +39,10 @@
public class DistributionInterceptor extends BaseRpcInterceptor {
DistributionManager dm;
CommandsFactory cf;
+ DataContainer dataContainer;
+ boolean isL1CacheEnabled, needReliableReturnValues, sync;
+
+
static final RecipientGenerator CLEAR_COMMAND_GENERATOR = new RecipientGenerator() {
private final Object[] EMPTY_ARRAY = {};
@@ -50,11 +56,19 @@
};
@Inject
- public void injectDependencies(DistributionManager distributionManager, CommandsFactory cf) {
+ public void injectDependencies(DistributionManager distributionManager, CommandsFactory cf, DataContainer dataContainer) {
this.dm = distributionManager;
this.cf = cf;
+ this.dataContainer = dataContainer;
}
+ @Start
+ public void start() {
+ isL1CacheEnabled = configuration.isL1CacheEnabled();
+ needReliableReturnValues = !configuration.isUnsafeUnreliableReturnValues();
+ sync = configuration.getCacheMode().isSynchronous();
+ }
+
// ---- READ commands
// if we don't have the key locally, fetch from one of the remote servers
@@ -71,14 +85,26 @@
return returnValue;
}
+ /**
+ * This method retrieves an entry from a remote cache and optionally stores it in L1 (if L1 is enabled).
+ * <p/>
+ * This method only works if a) this is a locally originating invocation and b) the entry in question is not local to
+ * the current cache instance and c) the entry is not in L1. If either of a, b or c does not hold true, this method
+ * returns a null and doesn't do anything.
+ *
+ * @param ctx invocation context
+ * @param key key to retrieve
+ * @return value of a remote get, or null
+ * @throws Throwable if there are problems
+ */
private Object remoteGetAndStoreInL1(InvocationContext ctx, Object key) throws Throwable {
- if (ctx.isOriginLocal() && !dm.isLocal(key)) {
+ if (ctx.isOriginLocal() && !dm.isLocal(key) && isNotInL1(key)) {
if (trace) log.trace("Doing a remote get for key {0}", key);
// attempt a remote lookup
InternalCacheEntry ice = dm.retrieveFromRemoteSource(key);
if (ice != null) {
- if (configuration.isL1CacheEnabled()) {
+ if (isL1CacheEnabled) {
if (trace) log.trace("Caching remotely retrieved entry for key {0} in L1", key);
long lifespan = ice.getLifespan() < 0 ? configuration.getL1Lifespan() : Math.min(ice.getLifespan(), configuration.getL1Lifespan());
PutKeyValueCommand put = cf.buildPutKeyValueCommand(ice.getKey(), ice.getValue(), lifespan, -1);
@@ -96,6 +122,16 @@
return null;
}
+ /**
+ * Tests whether a key is in the L1 cache if L1 is enabled.
+ *
+ * @param key key to check for
+ * @return true if the key is not in L1, or L1 caching is not enabled. false the key is in L1.
+ */
+ private boolean isNotInL1(Object key) {
+ return !isL1CacheEnabled || !dataContainer.containsKey(key);
+ }
+
// ---- WRITE commands
@Override
@@ -149,7 +185,6 @@
}
if (!skipReplicationOfTransactionMethod(ctx)) {
- boolean sync = configuration.getCacheMode().isSynchronous();
if (trace) {
log.trace("[" + rpcManager.getTransport().getAddress() + "] Running remote prepare for global tx {1}. Synchronous? {2}",
rpcManager.getTransport().getAddress(), command.getGlobalTransaction(), sync);
@@ -173,11 +208,14 @@
return invokeNextInterceptor(ctx, command);
}
- private void remoteGetBeforeWrite(InvocationContext ctx, Object... keys) throws Throwable {
- // only do this if we are sync (OR if we dont care about return values!)
-// if (!configuration.isUnsafeUnreliableReturnValues()) {
- for (Object k : keys) remoteGetAndStoreInL1(ctx, k);
-// }
+ private void remoteGetBeforeWrite(InvocationContext ctx, boolean isConditionalCommand, Object... keys) throws Throwable {
+ // this should only happen if:
+ // a) unsafeUnreliableReturnValues is false
+ // b) unsafeUnreliableReturnValues is true, we are in a TX and the command is conditional
+
+ if (needReliableReturnValues || (isConditionalCommand && ctx.getTransaction() != null)) {
+ for (Object k : keys) remoteGetAndStoreInL1(ctx, k);
+ }
}
/**
@@ -187,7 +225,7 @@
private Object handleWriteCommand(InvocationContext ctx, WriteCommand command, RecipientGenerator recipientGenerator) throws Throwable {
boolean local = isLocalModeForced(ctx);
// see if we need to load values from remote srcs first
- remoteGetBeforeWrite(ctx, recipientGenerator.getKeys());
+ remoteGetBeforeWrite(ctx, command.isConditional(), recipientGenerator.getKeys());
// if this is local mode then skip distributing
if (local && ctx.getTransaction() == null) return invokeNextInterceptor(ctx, command);
@@ -201,7 +239,7 @@
List<Address> rec = recipientGenerator.generateRecipients();
if (trace) log.trace("Invoking command {0} on hosts {1}", command, rec);
// if L1 caching is used make sure we broadcast an invalidate message
- if (configuration.isL1CacheEnabled() && rec != null) {
+ if (isL1CacheEnabled && rec != null) {
InvalidateCommand ic = cf.buildInvalidateFromL1Command(recipientGenerator.getKeys());
replicateCall(ctx, ic, isSynchronous(ctx), false);
}
Deleted: trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -1,28 +0,0 @@
-package org.infinispan.config;
-
-import org.testng.annotations.Test;
-
- at Test(groups = "unit", testName = "config.ConfigurationValidityTest")
-public class ConfigurationValidityTest {
- public void testInvalidConfigs() {
- Configuration c = new Configuration();
- c.setCacheMode(Configuration.CacheMode.DIST_SYNC);
- c.assertValid();
- c.setCacheMode(Configuration.CacheMode.DIST_ASYNC);
- try {
- c.assertValid();
- assert false : "Should fail";
- } catch (ConfigurationException expected) {
- }
- c.setUnsafeUnreliableReturnValues(true);
- c.assertValid();
- c.setCacheMode(Configuration.CacheMode.DIST_SYNC);
- c.assertValid();
- c.setFetchInMemoryState(true);
- try {
- c.assertValid();
- assert false : "Should fail";
- } catch (ConfigurationException expected) {
- }
- }
-}
Modified: trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -10,6 +10,7 @@
import org.infinispan.container.entries.ImmortalCacheEntry;
import org.infinispan.container.entries.InternalCacheEntry;
import org.infinispan.container.entries.MortalCacheEntry;
+import org.infinispan.lock.IsolationLevel;
import org.infinispan.remoting.transport.Address;
import org.infinispan.test.MultipleCacheManagersTest;
import org.infinispan.test.TestingUtil;
@@ -26,10 +27,16 @@
protected List<Cache<Object, String>> caches;
protected boolean sync = true;
protected boolean tx = false;
+ protected boolean testRetVals = true;
protected void createCacheManagers() throws Throwable {
Configuration c = getDefaultClusteredConfig(sync ? DIST_SYNC : DIST_ASYNC);
- if (!sync) c.setUnsafeUnreliableReturnValues(true);
+ if (!testRetVals) {
+ c.setUnsafeUnreliableReturnValues(true);
+ // we also need to use repeatable read for tests to work when we dont have reliable return values, since the
+ // tests repeatedly queries changes
+ c.setIsolationLevel(IsolationLevel.REPEATABLE_READ);
+ }
if (tx) c.setTransactionManagerLookupClass(DummyTransactionManagerLookup.class.getName());
caches = createClusteredCaches(4, "dist", c);
c1 = caches.get(0);
Modified: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -19,6 +19,7 @@
public DistAsyncFuncTest() {
sync = false;
tx = false;
+ testRetVals = true;
}
@Override
Modified: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -22,6 +22,7 @@
public DistAsyncTxFuncTest() {
sync = false;
tx = true;
+ testRetVals = true;
cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
}
Added: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,13 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistAsyncTxUnsafeFuncTest")
+public class DistAsyncTxUnsafeFuncTest extends DistAsyncTxFuncTest {
+ public DistAsyncTxUnsafeFuncTest() {
+ sync = false;
+ tx = true;
+ testRetVals = false;
+ cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
+ }
+}
Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,12 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistAsyncUnsafeFuncTest")
+public class DistAsyncUnsafeFuncTest extends DistAsyncFuncTest {
+ public DistAsyncUnsafeFuncTest() {
+ sync = false;
+ tx = false;
+ testRetVals = false;
+ }
+}
Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -13,6 +13,7 @@
public DistSyncFuncTest() {
sync = true;
tx = false;
+ testRetVals = true;
}
public void testBasicDistribution() {
@@ -52,7 +53,7 @@
Object retval = nonOwner.put("k1", "value2");
asyncWait("k1", PutKeyValueCommand.class, getSecondNonOwner("k1"));
- assert "value".equals(retval);
+ if (testRetVals) assert "value".equals(retval);
assertOnAllCachesAndOwnership("k1", "value2");
}
@@ -60,7 +61,7 @@
initAndTest();
Object retval = getFirstNonOwner("k1").putIfAbsent("k1", "value2");
- assert "value".equals(retval);
+ if (testRetVals) assert "value".equals(retval);
assertOnAllCachesAndOwnership("k1", "value");
@@ -69,7 +70,7 @@
retval = getFirstNonOwner("k1").putIfAbsent("k1", "value2");
asyncWait("k1", PutKeyValueCommand.class, getSecondNonOwner("k1"));
- assert null == retval;
+ if (testRetVals) assert null == retval;
assertOnAllCachesAndOwnership("k1", "value2");
}
@@ -78,7 +79,7 @@
initAndTest();
Object retval = getFirstNonOwner("k1").remove("k1");
asyncWait("k1", RemoveCommand.class, getSecondNonOwner("k1"));
- if (sync) assert "value".equals(retval);
+ if (testRetVals) assert "value".equals(retval);
assertOnAllCachesAndOwnership("k1", null);
}
@@ -86,13 +87,13 @@
public void testConditionalRemoveFromNonOwner() {
initAndTest();
boolean retval = getFirstNonOwner("k1").remove("k1", "value2");
- assert !retval : "Should not have removed entry";
+ if (testRetVals) assert !retval : "Should not have removed entry";
assertOnAllCachesAndOwnership("k1", "value");
retval = getFirstNonOwner("k1").remove("k1", "value");
asyncWait("k1", RemoveCommand.class, getSecondNonOwner("k1"));
- assert retval : "Should have removed entry";
+ if (testRetVals) assert retval : "Should have removed entry";
assertOnAllCachesAndOwnership("k1", null);
}
@@ -100,7 +101,7 @@
public void testReplaceFromNonOwner() {
initAndTest();
Object retval = getFirstNonOwner("k1").replace("k1", "value2");
- assert "value".equals(retval);
+ if (testRetVals) assert "value".equals(retval);
asyncWait("k1", ReplaceCommand.class, getSecondNonOwner("k1"));
@@ -110,7 +111,7 @@
asyncWait(null, ClearCommand.class);
retval = getFirstNonOwner("k1").replace("k1", "value2");
- assert retval == null;
+ if (testRetVals) assert retval == null;
assertOnAllCachesAndOwnership("k1", null);
}
@@ -119,14 +120,14 @@
initAndTest();
Cache<Object, String> nonOwner = getFirstNonOwner("k1");
boolean retval = nonOwner.replace("k1", "valueX", "value2");
- assert !retval : "Should not have replaced";
+ if (testRetVals) assert !retval : "Should not have replaced";
assertOnAllCachesAndOwnership("k1", "value");
assert !nonOwner.getAdvancedCache().getComponentRegistry().getComponent(DistributionManager.class).isLocal("k1");
retval = nonOwner.replace("k1", "value", "value2");
asyncWait("k1", ReplaceCommand.class, getSecondNonOwner("k1"));
- assert retval : "Should have replaced";
+ if (testRetVals) assert retval : "Should have replaced";
assertOnAllCachesAndOwnership("k1", "value2");
}
Modified: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java 2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -10,6 +10,7 @@
public DistSyncTxFuncTest() {
sync = true;
tx = true;
+ testRetVals = true;
cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
}
@@ -112,9 +113,9 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
Object ret = c4.put(k1, "new_value");
- assert "value1".equals(ret);
+ if (testRetVals) assert "value1".equals(ret);
ret = c4.put(k2, "new_value");
- assert "value2".equals(ret);
+ if (testRetVals) assert "value2".equals(ret);
tm4.rollback();
assertIsInContainerImmortal(c1, k1);
@@ -140,9 +141,9 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
Object ret = c4.putIfAbsent(k1, "new_value");
- assert "value1".equals(ret) : "Was expecting value1 but was " + ret;
+ if (testRetVals) assert "value1".equals(ret) : "Was expecting value1 but was " + ret;
ret = c4.putIfAbsent(k2, "new_value");
- assert "value2".equals(ret) : "Was expecting value2 but was " + ret;
+ if (testRetVals) assert "value2".equals(ret) : "Was expecting value2 but was " + ret;
assert c4.get(k1).equals("value1");
assert c4.get(k2).equals("value2");
@@ -175,9 +176,9 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
Object ret = c4.remove(k1);
- assert "value1".equals(ret);
+ if (testRetVals) assert "value1".equals(ret);
ret = c4.remove(k2);
- assert "value2".equals(ret);
+ if (testRetVals) assert "value2".equals(ret);
assert !c4.containsKey(k1);
assert !c4.containsKey(k2);
@@ -206,17 +207,17 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
boolean ret = c4.remove(k1, "valueX");
- assert !ret;
+ if (testRetVals) assert !ret;
ret = c4.remove(k2, "valueX");
- assert !ret;
+ if (testRetVals) assert !ret;
assert c4.containsKey(k1);
assert c4.containsKey(k2);
ret = c4.remove(k1, "value1");
- assert ret;
+ if (testRetVals) assert ret;
ret = c4.remove(k2, "value2");
- assert ret;
+ if (testRetVals) assert ret;
assert !c4.containsKey(k1);
assert !c4.containsKey(k2);
@@ -245,9 +246,9 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
Object ret = c4.replace(k1, "new_value");
- assert "value1".equals(ret);
+ if (testRetVals) assert "value1".equals(ret);
ret = c4.replace(k2, "new_value");
- assert "value2".equals(ret);
+ if (testRetVals) assert "value2".equals(ret);
assert "new_value".equals(c4.get(k1));
assert "new_value".equals(c4.get(k2));
@@ -276,17 +277,17 @@
TransactionManager tm4 = getTransactionManager(c4);
tm4.begin();
boolean ret = c4.replace(k1, "valueX", "new_value");
- assert !ret;
+ if (testRetVals) assert !ret;
ret = c4.replace(k2, "valueX", "new_value");
- assert !ret;
+ if (testRetVals) assert !ret;
assert "value1".equals(c4.get(k1));
assert "value2".equals(c4.get(k2));
ret = c4.replace(k1, "value1", "new_value");
- assert ret;
+ if (testRetVals) assert ret;
ret = c4.replace(k2, "value2", "new_value");
- assert ret;
+ if (testRetVals) assert ret;
assert "new_value".equals(c4.get(k1));
assert "new_value".equals(c4.get(k2));
Added: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,13 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistSyncTxUnsafeFuncTest")
+public class DistSyncTxUnsafeFuncTest extends DistSyncTxFuncTest {
+ public DistSyncTxUnsafeFuncTest() {
+ sync = true;
+ tx = true;
+ testRetVals = false;
+ cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
+ }
+}
Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java 2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,12 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistSyncUnsafeFuncTest")
+public class DistSyncUnsafeFuncTest extends DistSyncFuncTest {
+ public DistSyncUnsafeFuncTest() {
+ sync = true;
+ tx = false;
+ testRetVals = false;
+ }
+}
Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the infinispan-commits
mailing list