[ 
https://issues.apache.org/jira/browse/DERBY-4018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-4018:
--------------------------------------

    Attachment: sync.diff

It looks like the synchronization in TopService is not used consistently. The 
moduleInstances variable is a Vector with its own internal synchronization, but 
the intention of the code seems to be that all accesses to it should be 
synchronized on the TopService object (this). Most of the places the accesses 
are synchronized on the TopService, but some (for instance where the exception 
is thrown) are not.

I made an attempt on cleaning up the synchronization (see the attached patch), 
and also replaced the Vector with an ArrayList to make it clearer that we 
shouldn't rely on the internal synchronization in the Vector object. Now I 
don't see the exception, but instead I see a Java level deadlock between 
TopService and FileMonitor, so there is clearly some more cleanup needed. I'm 
attaching the patch for reference anyway in case someone wants to have a look 
at it.

> ArrayIndexOutOfBoundsException in TopService.inService under heavy 
> multithreaded use of EmbeddedDriver
> ------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4018
>                 URL: https://issues.apache.org/jira/browse/DERBY-4018
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.4.2.0
>         Environment: Windows XP SP2
> Intel Core 2 Duo 3GHz, 3GB RAM
> Java JDK 1.6.0_07
>            Reporter: Jeff Clary
>         Attachments: BeatDerbyToPieces.java, program_output.txt, sync.diff, 
> trunk_stacktrace.txt
>
>
> I have created a test program that reproduces this issue.  The program pounds 
> on Derby by running jobs on a pool of 10 threads.  Each job creates a new 
> Derby database, a schema, a table, and an index.  Then it shuts down the 
> database and finishes.  The program runs until an error occurs or until 1000 
> jobs have finished.
> The problem is very intermittent, and related I think to multithreaded access 
> of a vector "moduleInstances" in TopService.java.  I am seeing the error on 
> my machine about half the time I run the test program.  Sometimes it happens 
> after 100 or 200 jobs...but sometimes not until 500 or more, or not at all.
> I am using the 10.4.2 derby.jar downloaded from 
> http://db.apache.org/derby/releases/release-10.4.2.0.cgi, without any 
> modifications on my part.
> I will attach the test program plus output from a run that failed with the 
> ArrayIndexOutOfBoundsException.  (The actual exception thrown to the 
> application from Derby is SQLException, but the underlying cause is an 
> ArrayIndexOutOfBoundsException.)  BE AWARE that if you run this test program 
> it can use up a GByte or more of disk space in your Java tmp directory.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to