[JBoss JIRA] Created: (ISPN-445) Ensure that locks time out
by Phil vd (JIRA)
Ensure that locks time out
--------------------------
Key: ISPN-445
URL: https://jira.jboss.org/browse/ISPN-445
Project: Infinispan
Issue Type: Feature Request
Components: Locking and Concurrency
Reporter: Phil vd
Assignee: Manik Surtani
When a lock is acquired, no mechanism ensure that it is reclaimed later.
So if for whatever reason the thread owning the lock is stuck in an endless loop or waiting for some resource, the entry is locked. This kind of situation could happen in cache stores trying to contact a remote storage.
The risk is quite high that other entries may be locked as well if you use lock stripping (default : TRUE)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 2 months
[JBoss JIRA] (ISPN-1778) NullPointerException when putting into Cache
by Galder Zamarreño (JIRA)
Galder Zamarreño created ISPN-1778:
--------------------------------------
Summary: NullPointerException when putting into Cache
Key: ISPN-1778
URL: https://issues.jboss.org/browse/ISPN-1778
Project: Infinispan
Issue Type: Bug
Affects Versions: 5.1.0.CR4
Reporter: Galder Zamarreño
Assignee: Galder Zamarreño
Fix For: 5.1.0.FINAL
NPE thrown:
{code}16:06:31,680 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (http-localhost.localdomain-127.0.0.1-8080-4) ISPN000136: Execution error: java.lang.NullPointerException
at org.infinispan.commands.write.PutKeyValueCommand.perform(PutKeyValueCommand.java:82) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.CallInterceptor.handleDefault(CallInterceptor.java:83) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:61) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.DistributionInterceptor.handleWriteCommand(DistributionInterceptor.java:464) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.DistributionInterceptor.visitPutKeyValueCommand(DistributionInterceptor.java:274) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.EntryWrappingInterceptor.invokeNextAndApplyChanges(EntryWrappingInterceptor.java:199) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:134) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitPutKeyValueCommand(NonTransactionalLockingInterceptor.java:68) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:130) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:61) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.StateTransferLockInterceptor.handleWithRetries(StateTransferLockInterceptor.java:201) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.StateTransferLockInterceptor.visitPutKeyValueCommand(StateTransferLockInterceptor.java:131) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:116) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:61) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:345) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:941) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.CacheImpl.put(CacheImpl.java:654) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.CacheImpl.put(CacheImpl.java:646) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
at org.infinispan.CacheSupport.put(CacheSupport.java:52) [infinispan-core-5.1.0.CR4.jar:5.1.0.CR4]
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 2 months
[JBoss JIRA] Created: (ISPN-755) Provide API documentation for scala components within the distribution
by Richard Achmatowicz (JIRA)
Provide API documentation for scala components within the distribution
----------------------------------------------------------------------
Key: ISPN-755
URL: https://jira.jboss.org/browse/ISPN-755
Project: Infinispan
Issue Type: Feature Request
Affects Versions: 4.1.0.Final
Reporter: Richard Achmatowicz
Assignee: Manik Surtani
Infinispan makes use of the Scala language to implement server modules for client-server communication. At present, these modules do not have any API documentation, which means that application developers must browse through the source code in order to find out which classes are available and what their interfaces are.
Scala has the ability to produce scaladoc documentation, but this is not compatible with javadoc. It appears that there is no method at present to incorporate scala API information into existing javadoc documentation.
The task of this issue is to investigate and implement a viable way to incorporate API information for the scala classes into the Infinispan distribution.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 2 months
[JBoss JIRA] (ISPN-1808) Make InfiniSpan passivation faster
by Johann Burkard (JIRA)
Johann Burkard created ISPN-1808:
------------------------------------
Summary: Make InfiniSpan passivation faster
Key: ISPN-1808
URL: https://issues.jboss.org/browse/ISPN-1808
Project: Infinispan
Issue Type: Enhancement
Components: Loaders and Stores, Marshalling
Affects Versions: 5.1.0.FINAL, 5.1.0.CR4
Reporter: Johann Burkard
Assignee: Galder Zamarreño
While InfiniSpan is very fast in-memory, once passivation is turned on, things get slow for me.
On my i5-2400 with a Crucial C300 SSD, it takes about 11 ms to passivate a 2964 B value. This comes down to a write speed of 250 to 300 KB/s. The disk can write up to 180 MB/s so it's not the bottleneck.
Clearly, passivation should be faster than that.
Profiling with YourKit shows most of the hot spots are centered around {{FileCacheStore}}, the JBoss Marshalling library and various bucket and {{ImmortalCacheEntry}} methods. Locking also seems to play a role. Here's a screenshot:
!http://i.imgur.com/LzkPw.png!
To make profiling easier for you, I've taken my test case and turned it into a small Maven project. Simply running {{mvn install}} should run the test, ready for profiling.
Of course, it could also be that my configuration is suboptimal. However, in my experiments, many configurations were unusable (hitting the file handle limit), which is not a good thing.
The project is available at http://johannburkard.de/resources/Johann/infinispan-performance.zip
I've also found one or two other things I think are more costly than they would need to be
In {{FileCacheStore}}
{code}
byte[] buffer = new byte[streamBufferSize];
...
fileInStream = new FileInputStream(file);
...
bis = new BufferedInputStream(fileInStream);
...
bytesRead = bis.read(buffer, 0, streamBufferSize);
{code}
wrapping the {{FileInputStream}} in a {{BufferedInputStream}} is unnecessary because you already have a buffer in {{byte[] buffer}}. I think I have seen this before in InfiniSpan, so you might want to check for occurrences of {{BufferedInputStream}} or {{BufferedOutputStream}}.
Another one
{code}
if (bytes.length == 0) {
// Short circuit
if (f.exists()) f.delete();
return;
}
{code}
{{f.exists()}} is essentially a syscall. Just calling {{f.delete()}} is enough.
{code}
if (!root.exists()) {
if (!root.mkdirs()) {
log.problemsCreatingDirectory(root);
}
}
if (!root.exists()) {
throw new ConfigurationException("Directory " + root.getAbsolutePath() + " does not exist and cannot be created!");
}
{code}
This could also be shortened to
{code}
if (!root.mkdirs()) {
throw new ConfigurationException("Directory " + root.getAbsolutePath() + " does not exist and cannot be created!");
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 2 months