History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: CACHE-152
Type: Bug Bug
Status: Open Open
Priority: Critical Critical
Assignee: Lars Torunski
Reporter: Pär Eklund
Votes: 2
Watchers: 7
Operations

If you were logged in you would be able to see more operations.
OSCache

Still NullPointerException in LRUCache (list is null)

Created: 16/Mar/05 09:22 AM   Updated: 18/Mar/07 08:24 AM
Component/s: Base Classes
Affects Version/s: 2.1
Fix Version/s: 3.0

File Attachments: 1. Java Source File AbstractConcurrentReadCache.java (73 kb)
2. Java Source File LRUCache.java (11 kb)

Environment:
OSCache 2.1, SunOS 5.7, WebLogic 7.1, JDK 1.3 (org.apache.commons.collections.SequencedHashMap not in classpath, thus using LinkedList for LRUCache)
OSCache 2.3.2, Apache Tomcat 5.5 on Windows XP, JDK 1.5.0_06
Issue Links:
Duplicate
 
This issue is duplicated by:
CACHE-238 NullpointerException after deseriali... Major Closed

Flags: Important


 Description  « Hide
After serialization, we got the error described in CACHE-73. To solve this, we upgraded to OSCache 2.1 and since then, no NullPointerException in AbstractConcurrentReadCache.get() has occurred.

However, today we got another NullPointerException, now:

at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:157)

Looking at the code, this is the following line:

            synchronized (list) { // A further fix for CACHE-44

which, if the line numbering is correct, leads me to believe that the internal list variable is null, probably due to an internal serialization/deserialization event.

Here is the complete stack trace:

15:56:48,577-ERROR-(StatusHandler.java:1075)-StatusHandler.doPublish(): Error executing SQL statementjava.lang.NullPointerException
java.lang.NullPointerException
at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:157)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1566)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:866)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1188)
at java.lang.reflect.Method.invoke(Native Method)
at java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2209)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1406)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:2258)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:514)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1407)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:231)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:104)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:66)
at weblogic.servlet.internal.WebAppServletContext.getAttribute(WebAppServletContext.java:410)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getAppScopeCache(ServletCacheAdministrator.java:239)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getCache(ServletCacheAdministrator.java:220)
at se.posten.pse.framework.core.cache.web.internal.CacheFacadeOSCacheImpl.flushCmtPage(CacheFacadeOSCacheImpl.java:61)
at se.posten.pse.verktyg.cmt.StatusHandler.setReloadNeededForChangedProdPages(StatusHandler.java:389)
at se.posten.pse.verktyg.cmt.StatusHandler.doPublish(StatusHandler.java:1052)
at jsp_servlet._cmt._admin._publishing.__publishingHandler._jspService(__publishingHandler.java:131)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)

[Servlet filter call chain omitted...]

The error is hard to reproduce (haven't succeeded yet), which further strengthens my beliefs that this is a deserialization/serialization issue.

One thing I noted, was that the first time the error occurred, was when a call was erronously made through a CacheTag and not through the CacheFilter we normally use in our system. I don't know if this might have an impact, especially since no error is reported now for that same usage after a system restart. Anyway, here's the stack trace for that (1st occurrence of error):

<Mar 15, 2005 3:49:19 PM CET> <Error> <HTTP> <101017> <[ServletContext(id=5962703,name=docs,context-path=)] Root cause of ServletException
java.lang.NullPointerException
at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:157)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1566)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:866)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1188)
at java.lang.reflect.Method.invoke(Native Method)
at java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2209)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1406)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:2258)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:514)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1407)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:231)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:104)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:66)
at weblogic.servlet.internal.WebAppServletContext.getAttribute(WebAppServletContext.java:410)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getAppScopeCache(ServletCacheAdministrator.java:239)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getCache(ServletCacheAdministrator.java:220)
at com.opensymphony.oscache.web.tag.CacheTag.doStartTag(CacheTag.java:444)
at jsp_servlet._inc._mediaproxy.__mediaProxy_eng._jspService(__mediaProxy_eng.java:119)
at se.posten.pse.framework.application.presentation.PseJspBase.service(PseJspBase.java:73)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)

[Servlet filter call chain omitted...]

This error, when it occurs, leaves us no choice but to restart our system, which is not good. Plase, help.

Sincerely

/Par Eklund
par@middleman.se




 All   Comments   Change History      Sort Order:
Pär Eklund - [16/Mar/05 09:31 AM ]
Here's another stack trace, showing exactly the same error occuring when we try to flush a (= any) cache group through our administrative interface:

<Mar 16, 2005 2:23:45 PM CET> <Error> <HTTP> <101017> <[ServletContext(id=5962703,name=docs,context-path=)] Root cause of ServletException
java.lang.NullPointerException
at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:157)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1566)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:866)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1188)
at java.lang.reflect.Method.invoke(Native Method)
at java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2209)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1406)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:2258)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:514)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1407)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:381)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:231)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:104)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:66)
at weblogic.servlet.internal.WebAppServletContext.getAttribute(WebAppServletContext.java:410)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getAppScopeCache(ServletCacheAdministrator.java:239)
at com.opensymphony.oscache.web.ServletCacheAdministrator.getCache(ServletCacheAdministrator.java:220)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.getCache(CacheableAdminOSCacheImpl.java:106)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.doFlush(CacheableAdminOSCacheImpl.java:123)
at se.posten.pse.framework.core.cache.admin.internal.CacheableAdminOSCacheImpl.flush(CacheableAdminOSCacheImpl.java:114)
at se.posten.pse.framework.core.cache.web.CacheAdminController.flushCacheable(CacheAdminController.java:135)
at se.posten.pse.framework.core.cache.web.CacheAdminController.handleRequest(CacheAdminController.java:78)
at jsp_servlet._admin._cache.__cacheAdmin_do._jspService(__cacheAdmin_do.java:181)
at se.posten.pse.framework.application.presentation.PseJspBase.service(PseJspBase.java:73)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:20)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.business.darksite.DarkSiteServletFilter.doFilter(DarkSiteServletFilter.java:61)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.cache.web.filter.PseCacheFilter.doFilter(PseCacheFilter.java:203)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.thread.filter.ThreadQueueRedirectFilter.doFilter(ThreadQueueRedirectFilter.java:69)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.monitor.filter.MonitorURLMappingFilter.doFilter(MonitorURLMappingFilter.java:84)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.oldurls.filter.CheckOldURLFilter.doFilter(CheckOldURLFilter.java:67)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at se.posten.pse.framework.core.request.RequestServletFilter.doFilter(RequestServletFilter.java:45)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5418)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:744)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3086)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2544)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)

Christoph Kutzinski - [26/Sep/05 07:04 AM ]
From my experience de/serialization of caches is seriously broken in OSCache 2.1.1 (and probably all version before) - at least with LRUCache.
From my observation the problem is that LRUCache during deserialization tries to write into a collection, which is null at that moment.

I fixed this in my own patched version of AbstractConcurrentReadCache and LRUCache. I will attach them to this issue.

Christoph Kutzinski - [26/Sep/05 07:05 AM ]
The patched classes. Note: AbstractConcurrentReadCache contains other, unrelated changes as well.

Lars Torunski - [18/Dec/05 12:10 PM ]
Please try the current CVS HEAD of the upcoming release 2.3. Java 1.4 is required.

Florian Kirchmeir - [03/Oct/06 03:08 AM ]
Hi all!

I can still confirm this bug using oscache-2.3.2.
Environment: Apache Tomcat 5.5 on Windows XP, JDK 1.5.0_06
Stacktrace:
java.lang.NullPointerException
at com.opensymphony.oscache.base.algorithm.LRUCache.itemPut(LRUCache.java:93)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:1612)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.put(AbstractConcurrentReadCache.java:863)
at com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache.readObject(AbstractConcurrentReadCache.java:1210)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1379)
at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:914)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:393)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:320)
at org.apache.catalina.session.StandardManager.start(StandardManager.java:636)
at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:431)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4130)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Regards,
Florian

Lars Torunski - [03/Oct/06 03:33 AM ]
Florian, how did you configured OSCache? Do you use any cluster settings or serialize the cache?

Lars Torunski - [18/Mar/07 08:24 AM ]
This problem isn't easy to solve without structual changes in OSCache. This issue should be fixed with release 3.0 which involves a big change in OSCache. Furthermore I haven't any clue why LRUCache etc. should be serializable.