Skip to content

Zinc sometimes doesn't invalidate files where trait definitions are inherited #3586

@djspiewak

Description

@djspiewak

Ok, I don't have a nice and minimal test case for you guys, unfortunately, but I do have a reproducer. It seems like this issue is broadly related to the cake pattern, which is used heavily in some older parts of the quasar codebase (sadface…). Changing upstream functions (in inherited traits) will cause some downstream compilation units to explode at runtime with AbstractMethodError due to Zinc improperly believing the files in question did not need to be invalidated.

This happens intermittently in local development (my steps below point to a changeset which will reproduce the issue) and 100% deterministically in CI. The reason it is happening deterministically in CI is because we cache our target directories for PR builds in Travis (as discussed with @jvican) in order to bring down our horrendously-long compilation times. This worked almost flawlessly with SBT 0.13.x for the last eight months (we only needed to cache flush twice), which is quite impressive! However, on SBT 1.0, we can't even get a single PR build to work, as the slower matrix builds will get the new caches from the faster builds, and themselves run into mutual-invalidation issues. This is kind of an edge case, but it does demonstrate how much less reliable current Zinc is from its state in 0.13.

steps

  1. Clone my fork of quasar
  2. Check out commit a6b7a91010faf8d06ef678653db53bafdaceaa5e
  3. Run sbt test:compile
  4. Check out commit 66c97fd9ed3e36eec1a058e5b9a546c80ab6309b
  5. Run sbt mimir/test

notes

sbt version: 1.0.2

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions