[
https://issues.jboss.org/browse/ISPN-3330?page=com.atlassian.jira.plugin....
]
Adrian Nistor commented on ISPN-3330:
-------------------------------------
Besides isolation level validation (which is ok) this PR also tries to validate key and
value equivalence by constraining them to be able to compare byte[]. This is wrong for all
caches that are not supposed to be accessed remotely, for example metadata caches spawned
by query. These (especially if infinispan directory is used) do not have byte[] keys and
values so the validation is not meaningful to them. Since we cannot know at this moment
which caches are going to be accessed remotely I will remove this validation.
Hotrod clients getWithMetadata doesn't work when locking
isolation != NONE
--------------------------------------------------------------------------
Key: ISPN-3330
URL:
https://issues.jboss.org/browse/ISPN-3330
Project: Infinispan
Issue Type: Bug
Affects Versions: 5.3.0.Final, 6.0.0.Alpha4
Reporter: Jakub Markos
Assignee: Galder ZamarreƱo
Priority: Minor
Fix For: 6.0.0.Beta1, 6.0.0.Final
I have a cluster of 2 infinispan servers with this configuration:
{code:xml}<subsystem xmlns="urn:infinispan:server:core:5.3">
<cache-container name="default" default-cache="default"
listener-executor="infinispan-listener">
<transport stack="udp" executor="infinispan-transport"
lock-timeout="240000"/>
<distributed-cache name="default" start="EAGER"
mode="SYNC" segments="1" owners="2"
batching="false" l1-lifespan="0" remote-timeout="60000">
<locking isolation="REPEATABLE_READ"/>
</distributed-cache>
</cache-container>
</subsystem>{code}
Running this code:
{code}remoteCache.put("k1", "v1", 10000000, TimeUnit.MICROSECONDS);
// setting only lifespan
MetadataValue<String> k1 = remoteCache.getWithMetadata("k1");
assertTrue(k1.getValue().equals("v1"));
// microseconds converted to seconds
assertTrue(k1.getLifespan() == 10);
assertTrue(k1.getMaxIdle() == -1);{code}
fails with:
{code}org.infinispan.client.hotrod.exceptions.HotRodClientException:Request for message
id[5] returned server error (status=0x85): java.lang.ClassCastException:
org.infinispan.container.entries.RepeatableReadEntry can
not be cast to org.infinispan.container.entries.InternalCacheEntry
at
org.infinispan.client.hotrod.impl.protocol.Codec10.checkForErrorsInResponseStatus(Codec10.java:143)
at
org.infinispan.client.hotrod.impl.protocol.Codec10.readHeader(Codec10.java:99)
at
org.infinispan.client.hotrod.impl.operations.HotRodOperation.readHeaderAndValidate(HotRodOperation.java:56)
at
org.infinispan.client.hotrod.impl.operations.AbstractKeyOperation.sendKeyOperation(AbstractKeyOperation.java:52)
at
org.infinispan.client.hotrod.impl.operations.GetWithMetadataOperation.executeOperation(GetWithMetadataOperation.java:35)
at
org.infinispan.client.hotrod.impl.operations.GetWithMetadataOperation.executeOperation(GetWithMetadataOperation.java:23)
at
org.infinispan.client.hotrod.impl.operations.RetryOnFailureOperation.execute(RetryOnFailureOperation.java:46)
at
org.infinispan.client.hotrod.impl.RemoteCacheImpl.getWithMetadata(RemoteCacheImpl.java:145){code}
Works with isolation="READ_COMMITED"/"NONE" or with no
<locking> at all.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira