Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Dynamic Languages Toolkit (DLTK) » Save file generates multiple builds(The DLTK ScriptReconciler thread and the eclipse BuildManager worker thread build the same source simultaneously)
Save file generates multiple builds [message #654500] Tue, 15 February 2011 23:12 Go to next message
Carl Knight is currently offline Carl Knight
Messages: 13
Registered: December 2010
Junior Member
This appears to be a lot of unnecessary work. The investigation that follows was after I saw multiple messages from static code analysis that should only be reported uniquely. What was found was the messages were being generated from two threads running the same build participant on the same source file after a single change was made:

Script Reconciler:

Daemon Thread [org.eclipse.dltk.internal.ui.text.ScriptReconciler] (Suspended)
UDependencyInfoDiskCache.getIncludeInfo(IPath, IPath) line: 103
UDependencyInfoCache.getIncludeInfoInternal(IPath, IPath, UDependencyInfoCache$depInfoCreationRule) line: 277
UDependencyInfoCache.getIncludeInfo(IPath, IPath) line: 268
UDependencyInfoCache.getIncludeModulesFor(ISourceModule) line: 242
UValidationEngine.processIncludes(List<ISourceModule>) line: 150
UValidationEngine.fullyValidate(ISourceModule) line: 107
USourceElementValidator.endvisit(ModuleDeclaration) line: 214
UModuleDeclaration(ModuleDeclaration).traverse(ASTVisitor) line: 72
UValidationBuildParticipant$UBuildParticipant.build(IBuildCo ntext) line: 45
StructureBuilder.build(String, ISourceModule, AccumulatingProblemReporter) line: 73
ReconcileWorkingCopyOperation.makeConsistent(SourceModule, IProblemRequestor) line: 90
ReconcileWorkingCopyOperation.executeOperation() line: 58
ReconcileWorkingCopyOperation(ModelOperation).run(IProgressM onitor) line: 698
ReconcileWorkingCopyOperation(ModelOperation).runOperation(I ProgressMonitor) line: 764
SourceModule.reconcile(boolean, WorkingCopyOwner, IProgressMonitor) line: 309
ScriptReconcilingStrategy.reconcile(ISourceModule, boolean) line: 164
ScriptReconcilingStrategy.access$0(ScriptReconcilingStrategy , ISourceModule, boolean) line: 153
ScriptReconcilingStrategy$1.run() line: 125
SafeRunner.run(ISafeRunnable) line: 42
ScriptReconcilingStrategy.reconcile(boolean) line: 120
ScriptReconcilingStrategy.reconcile(IRegion) line: 192
ScriptCompositeReconcilingStrategy(CompositeReconcilingStrat egy).reconcile(IRegion) line: 97
ScriptCompositeReconcilingStrategy.reconcile(IRegion) line: 74
ScriptReconciler(MonoReconciler).process(DirtyRegion) line: 77
AbstractReconciler$BackgroundThread.run() line: 206

BuildManager worker thread:

Thread [Worker-36] (Suspended)
SQLParser.jj_scan_token(int) line: not available
SQLParser.jj_3R_399() line: not available
SQLParser.jj_3R_397() line: not available
SQLParser.jj_3R_396() line: not available
SQLParser.jj_3R_387() line: not available
SQLParser.jj_3R_379() line: not available
SQLParser.jj_3R_352() line: not available
SQLParser.jj_3R_327() line: not available
SQLParser.jj_3R_261() line: not available
SQLParser.jj_3R_219() line: not available
SQLParser.jj_3R_124() line: not available
SQLParser.jj_3R_51() line: not available
SQLParser.jj_3_4() line: not available
SQLParser.jj_2_4(int) line: not available
SQLParser.StatementPart(Token[]) line: not available
SQLParser.Statement(String, Object[]) line: not available
ParserImpl.parseStatement(String, Object[]) line: not available
GenericStatement.prepMinion(LanguageConnectionContext, boolean, Object[], SchemaDescriptor, boolean) line: not available
GenericStatement.prepare(LanguageConnectionContext, boolean) line: not available
GenericLanguageConnectionContext.prepareInternalStatement(Sc hemaDescriptor, String, boolean, boolean) line: not available
EmbedPreparedStatement40(EmbedPreparedStatement).<init>(EmbedConnection, String, boolean, int, int, int, int, int[], String[]) line: not available
EmbedPreparedStatement40(EmbedPreparedStatement20).<init>(EmbedConnection, String, boolean, int, int, int, int, int[], String[]) line: not available
EmbedPreparedStatement40(EmbedPreparedStatement30).<init>(EmbedConnection, String, boolean, int, int, int, int, int[], String[]) line: not available
EmbedPreparedStatement40.<init>(EmbedConnection, String, boolean, int, int, int, int, int[], String[]) line: not available
Driver40.newEmbedPreparedStatement(EmbedConnection, String, boolean, int, int, int, int, int[], String[]) line: not available
EmbedConnection40(EmbedConnection).prepareStatement(String, int, int, int, int, int[], String[]) line: not available
EmbedConnection40(EmbedConnection).prepareStatement(String) line: not available
UDependencyInfoDiskCache.getIncludeInfo(IPath, IPath) line: 107
UDependencyInfoCache.getIncludeInfoInternal(IPath, IPath, UDependencyInfoCache$depInfoCreationRule) line: 277
UDependencyInfoCache.getIncludeInfo(IPath, IPath) line: 268
UDependencyInfoCache.getIncludeModulesFor(ISourceModule) line: 242
UValidationEngine.processIncludes(List<ISourceModule>) line: 150
UValidationEngine.fullyValidate(ISourceModule) line: 107
USourceElementValidator.endvisit(ModuleDeclaration) line: 214
UModuleDeclaration(ModuleDeclaration).traverse(ASTVisitor) line: 72
UValidationBuildParticipant$UBuildParticipant.build(IBuildCo ntext) line: 45
StandardScriptBuilder.buildModule(IBuildContext) line: 219
StandardScriptBuilder.buildNatureModules(IScriptProject, int, List<ISourceModule>, IProgressMonitor) line: 167
StandardScriptBuilder.buildModules(IScriptProject, List<ISourceModule>, int, IProgressMonitor) line: 136
StandardScriptBuilder.buildModelElements(IScriptProject, List<ISourceModule>, IProgressMonitor, int) line: 52
ScriptBuilder.buildElements(ScriptBuilder$BuilderState[], IProgressMonitor, int) line: 858
ScriptBuilder.incrementalBuild(IResourceDelta, IProgressMonitor) line: 697
ScriptBuilder.build(int, Map, IProgressMonitor) line: 274
BuildManager$2.run() line: 629
SafeRunner.run(ISafeRunnable) line: 42
BuildManager.basicBuild(int, IncrementalProjectBuilder, Map, MultiStatus, IProgressMonitor) line: 172
BuildManager.basicBuild(IProject, int, ICommand[], MultiStatus, IProgressMonitor) line: 203
BuildManager$1.run() line: 255
SafeRunner.run(ISafeRunnable) line: 42
BuildManager.basicBuild(IProject, int, MultiStatus, IProgressMonitor) line: 258
BuildManager.basicBuildLoop(IProject[], IProject[], int, MultiStatus, IProgressMonitor) line: 311
BuildManager.build(int, IProgressMonitor) line: 343
AutoBuildJob.doBuild(IProgressMonitor) line: 144
AutoBuildJob.run(IProgressMonitor) line: 242
Worker.run() line: 54

Ideally I want a single build of the source file in this case.

Am I doing something wrong?

- Carl.
Re: Save file generates multiple builds [message #654505 is a reply to message #654500] Wed, 16 February 2011 00:09 Go to previous message
Alex Panchenko is currently offline Alex Panchenko
Messages: 342
Registered: July 2009
Senior Member
Hi Carl,

There are 2 independent things:
Builder - is handling saved content and creating markers, starts on file change
Reconciler - is handling not saved content and highlight problems in the editor, starts periodically on editor change and in some other cases

(You might remember that in JDT if you type some random content it is highlighted as error even without save but after a small delay - that's reconciler work)

If Reconciler is performing heavy tasks so it becomes a performance problem, then you can:
- check build type in IBuildParticipant to skip some actions
- override ScriptSourceViewerConfiguration.getReconciler(ISourceViewer) and return null, so you don't have reconciler at all.

Regards,
Alex
Previous Topic:MixinModel lacks thread safety (DLTK 2.0)
Next Topic:orientation questions
Goto Forum:
  


Current Time: Fri Jul 25 01:27:14 EDT 2014

Powered by FUDForum. Page generated in 0.02302 seconds