|
Description
Esteban DUGUEPEROUX
https://git.eclipse.org/r/36898 has been submitted to Gerrit. Fixed as 29322aa34cf733e96ea27364c38f8686dd66c43c The commit [1] caused regression in JUnit tests. It has been reverted ([2]). [1] http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=29322aa34cf733e96ea27364c38f8686dd66c43c [2] http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=93e9745399afe74fe7f8e8c4313243df585a058a The initial commit [1] has been split in several more simple commits: * https://git.eclipse.org/r/37968 * https://git.eclipse.org/r/37969 * https://git.eclipse.org/r/37970 * https://git.eclipse.org/r/37971 * https://git.eclipse.org/r/37972 * https://git.eclipse.org/r/37973 * https://git.eclipse.org/r/37974 The last review [2] causes the regression and must be fixed before to be pushed. [1] http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=29322aa34cf733e96ea27364c38f8686dd66c43c [2] https://git.eclipse.org/r/37974 New Gerrit change created: https://git.eclipse.org/r/42271 New Gerrit change created: https://git.eclipse.org/r/42308 Gerrit change https://git.eclipse.org/r/42308 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=0fb7177d285bcd60589afcc87949e19ea818bcf0 Gerrit change https://git.eclipse.org/r/42495 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=4262fc18fbf99dfd33cef7ebbdfe7104a4928339 New Gerrit change created: https://git.eclipse.org/r/42514 Gerrit change https://git.eclipse.org/r/42514 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=4716ad1c3a42bc898751657b505cb15e8e205fc3 Gerrit change https://git.eclipse.org/r/37974 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=287cbe05bdac112d652dd5253cb28f58244f5c4d New Gerrit change created: https://git.eclipse.org/r/42743 Gerrit change https://git.eclipse.org/r/42271 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=1c7f627141c23d0b531aed77250be33321802ca0 New Gerrit change created: https://git.eclipse.org/r/42757 Gerrit change https://git.eclipse.org/r/42743 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=81a8b1f44c065dd8dfd198e33d66e4eca395c04d Fixed. The commit [1] 1c7f627 - "Have Saver registration done in a single place and correctly" will be reverted. It causes some regressions (deadlock) detected by a customer's use case. A scenario corresponding to this use case will be provided later (after customer's use case analysis). [1] http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=1c7f627141c23d0b531aed77250be33321802ca0 New Gerrit change created: https://git.eclipse.org/r/43674 Gerrit change https://git.eclipse.org/r/43674 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=bab2f4ee2811fb865404f7e9bd259565b7ee3cd0 Deadlock scenario with EcoreTools (associated with comment 17): * Launch a workspace with EcoreTools * Create a new ModelingProject (use default value except for the name of the project) * Sometimes (several creations are potentially needed to observe the problem) there is a deadlock. The "New Ecore Modeling Project" wizard freezes with the message "Create modeling resources:" In this case the stacks corresponding to the lock are: * Thread [main] (Suspended) OS.Call(long, long, int, int) line: not available [native method] Display.sleep() line: 4044 ModalContext$ModalContextThread.block() line: 174 ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 388 WizardDialog.run(boolean, boolean, IRunnableWithProgress) line: 1028 EcoreModelerWizard.performFinish() line: 229 WizardDialog.finishPressed() line: 827 WizardDialog.buttonPressed(int) line: 432 * Thread [Worker-11] (Suspended) owns: AtomicBoolean (id=86) waiting for: Object (id=85) Object.wait(long) line: not available [native method] Object.wait() line: 503 ThreadJob.waitForRun(ThreadJob, IProgressMonitor, InternalJob, Thread) line: 270 ThreadJob.joinRun(ThreadJob, IProgressMonitor) line: 197 ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 92 JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 286 WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 118 Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: 2282 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2339 Workspace.run(IWorkspaceRunnable, IProgressMonitor) line: 2326 IsModifiedSavingPolicy(AbstractSavingPolicy).save(Iterable<Resource>, Map<?,?>, IProgressMonitor) line: 69 DAnalysisSessionImpl$1.run() line: 817 DAnalysisSessionImpl.doSave(Map<?,?>, IProgressMonitor, boolean) line: 837 Saver.saveNow(Map<?,?>, IProgressMonitor, boolean) line: 115 Saver.save(Map<?,?>, IProgressMonitor) line: 87 DAnalysisSessionImpl.save(Map<?,?>, IProgressMonitor) line: 787 DAnalysisSessionImpl.save(IProgressMonitor) line: 782 SaveSessionJob.run(IProgressMonitor) line: 67 Worker.run() line: 54 * Thread [ModalContext] (Suspended) owns: EcoreModelingProjectCreationOperation (id=179) waiting for: AtomicBoolean (id=86) Saver.saveNow(Map<?,?>, IProgressMonitor, boolean) line: 112 Saver.save(Map<?,?>, IProgressMonitor) line: 87 DAnalysisSessionImpl.save(Map<?,?>, IProgressMonitor) line: 787 DAnalysisSessionImpl.save(IProgressMonitor) line: 782 EcoreModelingProjectCreationOperation.createModelingResources(IProject, IProgressMonitor) line: 262 EcoreModelingProjectCreationOperation.execute(IProgressMonitor) line: 139 WorkspaceModifyOperation$1.run(IProgressMonitor) line: 106 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2344 EcoreModelingProjectCreationOperation(WorkspaceModifyOperation).run(IProgressMonitor) line: 118 ModalContext$ModalContextThread.run() line: 121 By analysis the above stacks, we can see clearly the deadlock:
NEED THE LOCK ON workspace
Workspace.run(IWorkspaceRunnable, IProgressMonitor) line: 2326
IsModifiedSavingPolicy(AbstractSavingPolicy).save(Iterable<Resource>, Map<?,?>, IProgressMonitor) line: 69
DAnalysisSessionImpl$1.run() line: 817
DAnalysisSessionImpl.doSave(Map<?,?>, IProgressMonitor, boolean) line: 837
Saver.saveNow(Map<?,?>, IProgressMonitor, boolean) line: 115
TAKE LOCK ON Saver.isSaving
Saver.save(Map<?,?>, IProgressMonitor) line: 87
DAnalysisSessionImpl.save(Map<?,?>, IProgressMonitor) line: 787
DAnalysisSessionImpl.save(IProgressMonitor) line: 782
SaveSessionJob.run(IProgressMonitor) line: 67
NEED THE LOCK ON Saver.isSaving
Saver.saveNow(Map<?,?>, IProgressMonitor, boolean) line: 112
Saver.save(Map<?,?>, IProgressMonitor) line: 87
DAnalysisSessionImpl.save(Map<?,?>, IProgressMonitor) line: 787
DAnalysisSessionImpl.save(IProgressMonitor) line: 782
EcoreModelingProjectCreationOperation.createModelingResources(IProject, IProgressMonitor) line: 262
...
LAUNCH ANOTHER THREAD
saveSessionJob.schedule();
...
SaveSessionWhenNoDialectEditorsListener.statusesChanged(Collection<ResourceStatusChange>) line: 121
ResourceSetSync.notifyClientsInBatch(Collection<ResourceStatusChange>) line: 371
ResourceSetSync.resourceSetChanged(ResourceSetChangeEvent) line: 134
...
TransactionalEditingDomainImpl.postcommit(InternalTransaction) line: 771
...
WorkspaceCommandStackImpl(AbstractTransactionalCommandStack).execute(Command) line: 219
EcoreModelingProjectCreationOperation.createModelingResources(IProject, IProgressMonitor) line: 259
EcoreModelingProjectCreationOperation.execute(IProgressMonitor) line: 139
WorkspaceModifyOperation$1.run(IProgressMonitor) line: 106
TAKE LOCK ON workspace
Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2344
EcoreModelingProjectCreationOperation(WorkspaceModifyOperation).run(IProgressMonitor) line: 118
ModalContext$ModalContextThread.run() line: 121
New Gerrit change created: https://git.eclipse.org/r/43684 New Gerrit change created: https://git.eclipse.org/r/43685 Gerrit change https://git.eclipse.org/r/43684 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=5440d7845d7994b4d4bb2f31b63dd93b6d59e2fa Gerrit change https://git.eclipse.org/r/43685 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=daee88ab7a8c76396ba035c65fdcd2612a721208 New Gerrit change created: https://git.eclipse.org/r/44016 The problem described in comment 17 has been fixed with commits [1] and [2]. [1] Re-apply the reverted commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=5440d7845d7994b4d4bb2f31b63dd93b6d59e2fa [2] Fix: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=daee88ab7a8c76396ba035c65fdcd2612a721208 Gerrit change https://git.eclipse.org/r/44016 was merged to [master]. Commit: http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=8e8e1ac2397afaa634773377db8fdabbb4aed681 The last detected regression has been fixed with http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=8e8e1ac2397afaa634773377db8fdabbb4aed681 Verified as technical issue (In reply to Laurent Redor from comment #20) scenario tested 5 times with success Available in Sirius 3.0.0. See https://wiki.eclipse.org/Sirius/3.0.0. |