Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

central: Refresh workspace inside bndLock for cnf change #4944

Merged
merged 1 commit into from Nov 11, 2021

Conversation

bjhargrave
Copy link
Member

If a change to cnf was detected, we called workspace refresh without
regard to any running builders. This caused issues where the workspace
refresh closed repos while a builder was running.

We now refresh the workspace while holding the bndLock. We use a job
to handle this in case we need to wait for the lock and don't want to
block the notification (which could be the main) thread.

If a change to cnf was detected, we called workspace refresh without
regard to any running builders. This caused issues where the workspace
refresh closed repos while a builder was running.

We now refresh the workspace while holding the bndLock. We use a job
to handle this in case we need to wait for the lock and don't want to
block the notification (which could be the main) thread.

Signed-off-by: BJ Hargrave <bj@hargrave.dev>
@bjhargrave bjhargrave merged commit 37c9c11 into bndtools:master Nov 11, 2021
@bjhargrave bjhargrave deleted the race-condition-fix branch November 11, 2021 23:01
@bjhargrave
Copy link
Member Author

For the record:

Exception during build:

Exception: java.lang.IllegalStateException: Already closed MavenBndRepository [localRepo=/Users/hargrave/.m2/repository, storage=Baseline, inited=true, redeploy=false]
  at aQute.bnd.repository.maven.provider.MavenBndRepository.init(MavenBndRepository.java:559)
  at aQute.bnd.repository.maven.provider.MavenBndRepository.versions(MavenBndRepository.java:544)
  at aQute.bnd.build.ProjectBuilder.getBaselineJar(ProjectBuilder.java:521)
  at aQute.bnd.build.ProjectBuilder.doBaseline(ProjectBuilder.java:319)
  at aQute.bnd.osgi.Builder.build(Builder.java:176)
  at aQute.bnd.osgi.Builder.builds(Builder.java:1446)
  at aQute.bnd.build.ProjectBuilder.builds(ProjectBuilder.java:841)
  at aQute.bnd.build.Project.buildLocal(Project.java:1897)
  at aQute.bnd.build.Project.build(Project.java:1710)
  at aQute.bnd.build.Project.build(Project.java:2487)
  at org.bndtools.builder.BndtoolsBuilder.lambda$build$5(BndtoolsBuilder.java:284)
  at bndtools.central.Central.lambda$bndCall$13(Central.java:823)
  at aQute.bnd.service.progress.TaskManager.with(TaskManager.java:37)
  at bndtools.central.Central.bndCall(Central.java:823)
  at org.bndtools.builder.BndtoolsBuilder.build(BndtoolsBuilder.java:165)
  at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:853)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:232)
  at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:281)
  at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:334)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:337)
  at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:389)
  at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:410)
  at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:160)
  at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:251)
  at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Closer of repo:

Caused by: java.lang.Exception: MavenBndRepository [localRepo=/Users/hargrave/.m2/repository, storage=Baseline, inited=true, redeploy=false] closed
  at aQute.bnd.repository.maven.provider.MavenBndRepository.close(MavenBndRepository.java:708)
  at aQute.lib.io.IO.close(IO.java:976)
  at java.base/java.lang.Iterable.forEach(Iterable.java:75)
  at aQute.bnd.osgi.PluginsContainer.close(PluginsContainer.java:386)
  at aQute.bnd.memoize.Memoize.accept(Memoize.java:211)
  at aQute.bnd.memoize.Memoize.ifPresent(Memoize.java:226)
  at aQute.bnd.osgi.Processor.clearPlugins(Processor.java:706)
  at aQute.bnd.osgi.Processor.refresh(Processor.java:982)
  at aQute.bnd.build.Workspace.refresh(Workspace.java:461)
  at bndtools.central.Central.lambda$addCnfChangeListener$5(Central.java:433)
  at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:305)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:295)
  at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:158)
  at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:381)
  at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1503)
  at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2327)
  at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2338)
  at org.eclipse.search2.internal.ui.text.MarkerHighlighter.addHighlights(MarkerHighlighter.java:49)
  at org.eclipse.search2.internal.ui.text.EditorAnnotationManager.addAnnotations(EditorAnnotationManager.java:244)
  at org.eclipse.search2.internal.ui.text.EditorAnnotationManager.addAnnotations(EditorAnnotationManager.java:227)
  at org.eclipse.search2.internal.ui.text.EditorAnnotationManager.addSearchResult(EditorAnnotationManager.java:111)
  at org.eclipse.search2.internal.ui.text.EditorAnnotationManager.setSearchResults(EditorAnnotationManager.java:104)
  at org.eclipse.search2.internal.ui.text.WindowAnnotationManager.startHighlighting(WindowAnnotationManager.java:92)
  at org.eclipse.search2.internal.ui.text.WindowAnnotationManager$1.partVisible(WindowAnnotationManager.java:73)
  at org.eclipse.ui.internal.PartService$12.run(PartService.java:217)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.ui.internal.PartService.partVisible(PartService.java:214)
  at org.eclipse.ui.internal.WorkbenchPage$17.run(WorkbenchPage.java:5217)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.ui.internal.WorkbenchPage.firePartVisible(WorkbenchPage.java:5214)
  at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partVisible(WorkbenchPage.java:257)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$5.run(PartServiceImpl.java:297)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartVisible(PartServiceImpl.java:294)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.lambda$0(PartServiceImpl.java:105)
  at org.eclipse.e4.ui.services.internal.events.UIEventHandler.lambda$0(UIEventHandler.java:38)
  at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236)
  at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133)
  at org.eclipse.swt.widgets.Display.syncExec(Display.java:5131)
  at org.eclipse.e4.ui.workbench.swt.DisplayUISynchronize.syncExec(DisplayUISynchronize.java:34)
  at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:38)
  at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205)
  at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203)
  at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
  at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:228)
  at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
  at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:133)
  at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75)
  at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44)
  at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55)
  at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63)
  at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424)
  at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElementGen(ElementContainerImpl.java:170)
  at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:188)
  at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:660)
  at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:624)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:786)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:400)
  at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1260)
  at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3195)
  at org.eclipse.ui.internal.WorkbenchPage.lambda$9(WorkbenchPage.java:3100)
  at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
  at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3098)
  at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3068)
  at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3059)
  at org.eclipse.search.internal.ui.text.EditorOpener.showWithReuse(EditorOpener.java:120)
  at org.eclipse.search.internal.ui.text.EditorOpener.openAndSelect(EditorOpener.java:61)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage.openAndSelect(AbstractTextSearchViewPage.java:448)
  at org.eclipse.search.internal.ui.text.FileSearchPage.showMatch(FileSearchPage.java:230)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage$3.run(AbstractTextSearchViewPage.java:927)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage.showMatch(AbstractTextSearchViewPage.java:930)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage.showCurrentMatch(AbstractTextSearchViewPage.java:995)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage.gotoNextMatch(AbstractTextSearchViewPage.java:960)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage.handleOpen(AbstractTextSearchViewPage.java:1410)
  at org.eclipse.search.internal.ui.text.FileSearchPage.handleOpen(FileSearchPage.java:251)
  at org.eclipse.search.ui.text.AbstractTextSearchViewPage$2.open(AbstractTextSearchViewPage.java:754)
  at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)
  at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:800)
  at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
  at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
  at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:797)
  at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1116)
  at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275)
  at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:310)
  at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
  at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4524)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1522)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1545)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1530)
  at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1324)
  at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4310)
  at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3883)
  at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
  at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
  at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1041)
  at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
  at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
  at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
  at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
  at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
  at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
  at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:568)
  at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
  at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
  at org.eclipse.equinox.launcher.Main.run(Main.java:1467)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant