Random and rare ArrayIndexOutOfBoundsException

22 views
Skip to first unread message

kidogo

unread,
Mar 2, 2015, 6:02:28 PM3/2/15
to google-s...@googlegroups.com
About two years ago, I occasionally got this ArrayIndexOutOfBoundsException in a newly deployed production appengine application. I noticed when I made RoutingDispatcher.dispatch method on DebugModeRoutingDispatcher and WidgetRoutingDispatcher schronized, the problem seemed not to come back. And so it felt like a multi-threading issue. Since the app rendered same content for all users, I created a filter that serialized page rendering and cached results, and the problem seemed to have gone away ever since. 
I have just seen this for the first time in a new appengine application that has been used in production for nearly two months now without such incident. The page that has generated this exception has been accessed many times daily for the past two months with no modification, and without this exception.
Unfortunately I cannot use the workaround I used previously because pages have different content for different users. 
java.lang.ArrayIndexOutOfBoundsException
	at java.lang.System.arraycopy(Native Method)
	at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:780)
	at java.lang.StringBuilder.deleteCharAt(StringBuilder.java:258)
	at com.google.sitebricks.StringBuilderRespond.chew(StringBuilderRespond.java:86)
	at com.google.sitebricks.rendering.control.EmbeddedRespond.chew(EmbeddedRespond.java:103)
	at com.google.sitebricks.rendering.control.XmlWidget.writeOpenTag(XmlWidget.java:115)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:72)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.EmbedWidget.render(EmbedWidget.java:66)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
	at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
	at com.google.sitebricks.routing.WidgetRoutingDispatcher.bindAndRespond(WidgetRoutingDispatcher.java:158)
	at com.google.sitebricks.routing.WidgetRoutingDispatcher.dispatch(WidgetRoutingDispatcher.java:91)
	at com.google.sitebricks.DebugModeRoutingDispatcher.dispatch(DebugModeRoutingDispatcher.java:56)
	at com.google.sitebricks.SitebricksFilter.doFilter(SitebricksFilter.java:62)
	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)

I'll really appreciate any pointers as to why this might be happening.
Thank you.

kidogo

unread,
Dec 20, 2015, 12:52:31 PM12/20/15
to Google Sitebricks
It looks like the source of this problem is that EmbeddedRespondFactory uses a single instance of com.google.sitebricks.StringBuilderRespond for all requests.
As a result different requests/threads may concurrently use the same StringBuilder for output. 

This also explain why sometimes html output is corrupted by content from different pages when an embedded brick is used on different pages.

Related issue:
Reply all
Reply to author
Forward
0 new messages