Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [dali-dev] comments on bug 243547 (today's deadlock)

Hi Brian, have you taken a look at Chuck's suggestions in 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=245573 ? He attached some 
new traces too. Any thoughts on this and would it be useful for him to 
create a patch? Sounds like GenericJpaModel can get into various deadlock 
situations due to other classes being touched during operations in it's 
sync blocks.


"Suggestion....

Remove the class synchonization around getJpaProject() if the project 
doesn't
exist yet.

A separate Job lock can prevent multiple callers of getJpaProject() if no
project exists, and thus freeing up this lock for other calls like 
synchFiles()
and javaElementChanged()

"GenericJpaModel$DefaultJpaProjectHolder.buildJpaProject" could be done on 
a
separate Job

I can try creating a patch for this is you would like"

------------------------------------------
Leonard Theivendra
Websphere / IBM Software Solutions Toronto
email: theivend@xxxxxxxxxx
tel: (905) 413-3777  tie: 969-3777
fax: (905) 413-4920



Brian Vosburgh <brian.vosburgh@xxxxxxxxxx> 
Sent by: dali-dev-bounces@xxxxxxxxxxx
08/28/2008 02:24 PM
Please respond to
"General Dali EJB ORM developer discussion." <dali-dev@xxxxxxxxxxx>


To
Eclipse Dali <dali-dev@xxxxxxxxxxx>
cc

Subject
[dali-dev] comments on bug 243547 (today's deadlock)






Here's my take on bug 243547. (Which was just closed, since the 
SSE-related
deadlock seems to have been fixed. But Gary Karasiuk will probably open a 
new bug
with the new deadlock, whose relevant stacktraces I've extracted from the 
dump
and attached.)

Any comments, corrections, or insights are welcome.

Both threads are running the Dali validator.

I think(?) Worker-2 has locked the workspace while the Dali validator 
deletes the
Dali-related markers. This causes the workspace to notify Dali that a 
resource
has changed. The Dali listener is waiting for a lock on the Dali model
(GenericJpaModel) so it can forward the notification to the appropriate 
JPA project.
Unfortunately, GenericJpaModel is already locked by Worker-5 (below).

In Worker-5, validation has triggered the (lazy) creation of a JPA 
project, locking
the Dali model (GenericJpaModel) until the JPA project is built. This 
creation also
triggers the loading of the DTP plug-in, which then loads and validates 
the DTP drivers.
It looks like DTP has detected an error in one of the drivers and needs to 
lock the
workspace so it can add the appropriate problem markers. Unfortunately, 
the workspace
is already locked by Worker-2 (above).

The way we are doing things currently (which I've never really warmed up 
to :-) )
doesn't really allow us to remove the validation markers asynchronously. 
We
could investigate changing that.... Likewise, it might be difficult for 
DTP to add its
problem markers asynchronously; but might merit investigation....


Rough notes:

Worker-2
JpaValidator
calls WorkbenchReporter.removeAllMessages(IValidator)
calls Workspace.deleteMarkers(IMarker[])
which notifies listeners that a resource has changed
waiting to call GenericJpaModel.synchronizeFiles(IProject, IResourceDelta)
    which is locked by Worker-5
somewhere acquires a lock...

Worker-5
JpaValidator
calls JptCorePlugin to get the appropriate JPA project
locks and calls GenericJpaModel to get the JPA project
the JPA project is (lazily) built
triggers the loading of JptDbPlugin
builds the DTPConnectionProfileRepository
triggers the DTP InternalProfileManager to load the profiles
the properties of a DTP driver are invalid so...
DriverValidator tries to add a problem marker
WorkManager waits to lock the "primary workspace lock"
3XMTHREADINFO      "Worker-2" TID:0x3210B200, j9thread_t:0x385EC750, 
state:B, prio=5
3XMTHREADINFO1            (native thread ID:0x378, native priority:0x5, 
native policy:UNKNOWN)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:295)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:275)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:286)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:272)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.resourcePostChange(JpaModelManager.java:264)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.resourceChanged(JpaModelManager.java:237)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager$ResourceChangeListener.resourceChanged(JpaModelManager.java:487)
4XESTACKTRACE          at 
org/eclipse/core/internal/events/NotificationManager$2.run(NotificationManager.java:288)
4XESTACKTRACE          at 
org/eclipse/core/runtime/SafeRunner.run(SafeRunner.java:37(Compiled Code))
4XESTACKTRACE          at 
org/eclipse/core/internal/events/NotificationManager.notify(NotificationManager.java:282)
4XESTACKTRACE          at 
org/eclipse/core/internal/events/NotificationManager.broadcastChanges(NotificationManager.java:148)
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/Workspace.broadcastPostChange(Workspace.java:313)
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/Workspace.endOperation(Workspace.java:1022)
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/Workspace.deleteMarkers(Workspace.java:961)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/TaskListUtility.removeTaskSubset(TaskListUtility.java:428)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/TaskListUtility.removeAllTasks(TaskListUtility.java:406)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/TaskListUtility.removeAllTasks(TaskListUtility.java:402)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:164)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:544)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:509)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/validation/JpaValidator.validate(JpaValidator.java:46)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/validation/JpaValidator.validateInJob(JpaValidator.java:77)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/operations/ValidatorJob.run(ValidatorJob.java:78)
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/Worker.run(Worker.java:55)


3XMTHREADINFO      "Worker-5" TID:0x32119D00, j9thread_t:0x39E62C38, 
state:CW, prio=1
3XMTHREADINFO1            (native thread ID:0x9FC, native priority:0x1, 
native policy:UNKNOWN)
4XESTACKTRACE          at java/lang/Object.wait(Native Method)
4XESTACKTRACE          at java/lang/Object.wait(Object.java:196)
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/Semaphore.acquire(Semaphore.java:38)
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/OrderedLock.doAcquire(OrderedLock.java:169)
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:105(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:82(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/WorkManager.checkIn(WorkManager.java:118)
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/Workspace.prepareOperation(Workspace.java:1747)
4XESTACKTRACE          at 
org/eclipse/core/internal/resources/Resource.createMarker(Resource.java:641)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/drivers/DriverValidator.addProblemMarker(DriverValidator.java:230)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/drivers/DriverValidator.isValid(DriverValidator.java:96)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/drivers/DriverValidator.isValid(DriverValidator.java:79)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/internal/InternalProfileManager.getDriverInstance(InternalProfileManager.java:1334)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/internal/InternalProfileManager.enableLocalDatabase(InternalProfileManager.java:1252)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/internal/InternalProfileManager.loadLocalRegisteredDatabases(InternalProfileManager.java:1211)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/internal/InternalProfileManager.loadProfiles(InternalProfileManager.java:928)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/internal/InternalProfileManager.getProfiles(InternalProfileManager.java:139)
4XESTACKTRACE          at 
org/eclipse/datatools/connectivity/ProfileManager.getProfiles(ProfileManager.java:46)
4XESTACKTRACE          at 
org/eclipse/jpt/db/internal/DTPConnectionProfileRepository.start(DTPConnectionProfileRepository.java:63)
4XESTACKTRACE          at 
org/eclipse/jpt/db/JptDbPlugin.start(JptDbPlugin.java:53)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleContextImpl$2.run(BundleContextImpl.java:1009)
4XESTACKTRACE          at 
java/security/AccessController.doPrivileged(AccessController.java:251)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleContextImpl.startActivator(BundleContextImpl.java:1003)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleContextImpl.start(BundleContextImpl.java:984)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleHost.startWorker(BundleHost.java:346)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/AbstractBundle.start(AbstractBundle.java:265)
4XESTACKTRACE          at 
org/eclipse/osgi/framework/util/SecureAction.start(SecureAction.java:400)
4XESTACKTRACE          at 
org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/baseadaptor/loader/ClasspathManager.findLocalClass(ClasspathManager.java:427(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.findLocalClass(DefaultClassLoader.java:193(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleLoader.findLocalClass(BundleLoader.java:368(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/SingleSourcePackage.loadClass(SingleSourcePackage.java:33(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleLoader.findClassInternal(BundleLoader.java:441(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleLoader.findClass(BundleLoader.java:397(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/framework/internal/core/BundleLoader.findClass(BundleLoader.java:385(Compiled 
Code))
4XESTACKTRACE          at 
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.loadClass(DefaultClassLoader.java:87(Compiled 
Code))
4XESTACKTRACE          at 
java/lang/ClassLoader.loadClass(ClassLoader.java:609(Compiled Code))
4XESTACKTRACE          at java/lang/J9VMInternals.verifyImpl(Native 
Method)
4XESTACKTRACE          at 
java/lang/J9VMInternals.verify(J9VMInternals.java:72(Compiled Code))
4XESTACKTRACE          at 
java/lang/J9VMInternals.initialize(J9VMInternals.java:134(Compiled Code))
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/platform/GenericJpaFactory.buildJpaDataSource(GenericJpaFactory.java:226)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/GenericJpaProject.<init>(GenericJpaProject.java:141)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/platform/GenericJpaFactory.buildJpaProject(GenericJpaFactory.java:222)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/GenericJpaModel$DefaultJpaProjectHolder.buildJpaProject(GenericJpaModel.java:453)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/GenericJpaModel$DefaultJpaProjectHolder.jpaProject(GenericJpaModel.java:445)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/GenericJpaModel.getJpaProject(GenericJpaModel.java:84)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/JpaModelManager.getJpaProject(JpaModelManager.java:178)
4XESTACKTRACE          at 
org/eclipse/jpt/core/JptCorePlugin.getJpaProject(JptCorePlugin.java:157)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/validation/JpaValidator.validationMessages(JpaValidator.java:55)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/validation/JpaValidator.validate(JpaValidator.java:48)
4XESTACKTRACE          at 
org/eclipse/jpt/core/internal/validation/JpaValidator.validateInJob(JpaValidator.java:77)
4XESTACKTRACE          at 
org/eclipse/wst/validation/internal/operations/ValidatorJob.run(ValidatorJob.java:78)
4XESTACKTRACE          at 
org/eclipse/core/internal/jobs/Worker.run(Worker.java:55



Back to the top