Materialize outputs after recursively memoized cache hits
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- csharp
- Área
- build-system
Línea de trabajo
Lee src/Common/MSBuildCachePluginBase.cs, centrándote en la ruta de resultados recursiva de ConcurrentDictionary<NodeContext, Lazy<Task>> y en cómo se gestiona materializeOutputs. Rastrea las consultas recursivas y directas y, después, añade una prueba determinista de concurrencia/orden que cubra consultas de dependencias fuera de orden y compilaciones internas de multi-targeting. La tarea estará completada cuando un resultado recursivo sin materialización haga que las salidas requeridas se materialicen exactamente una vez, mientras que el comportamiento predeterminado y el no recursivo sigan sin cambios.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Recursive cache results are memoized only by NodeContext, but each memoized Lazy<Task<CacheResult>> captures whether outputs should be materialized.
Impact
With MSBuildCacheGetResultsForUnqueriedDependencies=true, a recursive query that does not require outputs can populate the memoized result first. A later direct query for the same node reuses that cache hit without materializing required files, allowing MSBuild to proceed with missing reference assemblies or other outputs.
Evidence
src/Common/MSBuildCachePluginBase.cs stores recursive results in ConcurrentDictionary<NodeContext, Lazy<Task<CacheResult>>>. materializeOutputs is not part of the key or separately tracked. The implementation comments assume the node will not later be queried directly, while the setting is documented for builds that are not executed in graph order.
Suggested fix
Separate result lookup from materialization state. A direct caller requiring outputs should be able to materialize a previously memoized non-materialized hit without repeating fingerprint/cache lookup. Alternatively, include the materialization requirement in memoization while preventing duplicate result mutation.
Acceptance criteria
- A recursive non-materializing hit followed by a direct query materializes outputs exactly once.
- The fix covers out-of-order dependency queries and multi-targeting inner builds.
- Default and non-recursive behavior remains unchanged.
- A deterministic concurrency/order test covers the regression.
- Lenguaje dominante
- C#
- Estrellas
- 64
- Forks
- 24
- Merge medio
- 1 d 14 h
- PR fusionados (30 d)
- 2
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/MSBuildCache
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/MSBuildCache#154 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
microsoft/MSBuildCache#164 · 2 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
microsoft/MSBuildCache#159 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
microsoft/MSBuildCache#155 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
microsoft/MSBuildCache#149 · 3 comentarios ·
Todos los issues de microsoft/MSBuildCache
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
sillsdev/languageforge-lexbox#2665 ·
-
bug documentation frontend
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
azurenoops/spin_agent#975 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Dificultad 2/5 1-3 horas Aptitud para principiantes 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
SubtitleEdit/subtitleedit#15108 · 1 comentario ·