Skip to content

Unexpected zinc cache invalidation after sbt remote cache hit #966

Open
@bjaglin

Description

@bjaglin

steps

Unfortunately, I haven't been able to extract a repro for this, as this issue is transient (but consistent for a given remote cache artifact). I decided to open a ticket to start adding information along my investigation to see if I can find a pattern.

Context

  • Zulu OpenJDK 11.0.8 on Linux
  • scala 2.13.4 and 2.13.5
  • sbt 1.4.6 and 1.4.8
  • remote caching activated with an adhoc remoteCacheId
    • remote cache artifact producer & consumer is the same machine (CI Jenkins slave running sbt in Docker)
    • problem is repeatable on another machine consuming the artifact

problem

Zinc runs incrementally after a remote cache artifact hit on IntegrationTest, detecting a change in an untouched marker trait trait ConnectTransactor defined in Compile (on which Zinc had a cache hit after pulling the remote cache).

expectation

Zinc cache hit - "No changes"

notes

Here are incOptions.value.withApiDebug(true) logs:

[debug] [zinc] IncrementalCompile -----------
[debug] IncrementalCompile.incrementalCompile
[debug] previous = Stamps for: 181 products, 50 sources, 27 libraries
[debug] current source = Set(${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/CreateManagedBuyerSeatForEntityHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/UpdateBuyerSeatFeeHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/addUrlBasedConversion/AddUrlBasedConversionTestRunner.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/ensureVisitsConversionExistsForBuyerPixelAndDomain/EnsureVisitsConversionExistsForBuyerPixelAndDomainSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/removeUrlBasedConversion/RemoveUrlBasedConversionSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/CreateIoBuyerSeatForEntityHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/TransitionIoBuyerSeatToManagedHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/CreateAdvertiserForPublisherHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/ActivateFeatureForSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/TransitionSelfServedBuyerSeatToManagedHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/Fixtures.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/removeUrlBasedConversion/RemoveUrlBasedConversionTestRunner.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/CreateSelfServedBuyerSeatForEntityHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/CreateAgencyForPublisherHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/DeleteAdvertiserHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/models/BuyerSeat.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/listeners/CleanOutdatedConversionsStatisticsListenerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/repositories/BuyerSeatRepositorySpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/OneAdvertiserAppPerCucumberScenario.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/DeleteAgencyHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/RenameAgencyHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/addEventConversionToAdvertiser/AddEventConversionToAdvertiserSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/MarkClientMsaFilledForSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/EnableBuyerSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/OneAdvertiserAppPerSuite.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/MarkClientBillingDetailsFilledForSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/setWebsitesDomainNamesForPixelsAnonymously/SetWebsitesDomainNamesForPixelsAnonymouslySpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/DisableBuyerSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/TransitionIoBuyerSeatToSelfServedHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/repositories/StandardEventRepositorySpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/ensureVisitsConversionExistsForBuyerPixelAndDomain/EnsureVisitsConversionExistsForBuyerPixelAndDomainTestRunner.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/RenameAdvertiserHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/SharePixelWithBuyerHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/AdvertiserSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/MarkTeadsFinanceApprovalFilledForSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/repositories/AdvertiserRepositoryFixtures.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/WriteThroughDatabaseCache.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/AdvertiserFixtures.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/models/Advertiser.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/TransitionManagedBuyerSeatToSelfServedHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/StepCommon.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/addEventConversionToAdvertiser/AddEventConversionToAdvertiserTestRunner.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/controllers/handlers/DeactivateFeatureForSeatHandlerSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/PixelServiceSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/scalatest/ConversionServiceSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/models/Agency.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/setWebsitesDomainNamesForPixelsAnonymously/TestRunner.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/repositories/ConversionRepositorySpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/cucumber/addUrlBasedConversion/AddUrlBasedConversionSpec.scala, ${BASE}/domains/advertiser/advertiser-commands/src/it/scala/tv/teads/domains/advertiser/commands/services/repositories/PixelRepositorySpec.scala)
[debug] [diff] Detected a change in a public API (tv.teads.domains.advertiser.commands.ConnectTransactor):
[debug] [diff] abstract trait tv.teads.domains.advertiser.commands.ConnectTransactor extends java.lang.this#Object with scala.this#Any {
[debug] [diff] 
[debug] [diff] 
[debug] [diff] 
[debug] [diff] }
[debug] [diff] object tv.teads.domains.advertiser.commands.ConnectTransactor extends  {
[debug] [diff] 
[debug] [diff] 
[debug] [diff] 
[debug] [diff] }
[debug] [diff] Detected a change in a public API (tv.teads.domains.advertiser.commands.AdvertiserCommandsDependencies):
[debug] [diff] abstract trait tv.teads.domains.advertiser.commands.AdvertiserCommandsDependencies extends tv.teads.domains.commons.this#CommonDependencies with java.lang.this#Object with scala.this#Any {
[debug] [diff] 
[debug] [diff] 
[debug] [diff] 
[debug] [diff] }
[debug] [diff] object tv.teads.domains.advertiser.commands.AdvertiserCommandsDependencies extends  {
[debug] [diff] 
[debug] [diff] 
[debug] [diff] 
[debug] [diff] }
[debug] > initialChanges = InitialChanges(Changes(added = Set(), removed = Set(), changed = Set(), unmodified = ...),Set(),Set(),API Changes: Set(NamesChange(tv.teads.domains.advertiser.commands.ConnectTransactor,ModifiedNames(changes = UsedName(finalize,[Default]))), NamesChange(tv.teads.domains.advertiser.commands.AdvertiserCommandsDependencies,ModifiedNames(changes = UsedName(finalize,[Default])))))
[debug] The tv.teads.domains.advertiser.commands.ConnectTransactor has the following regular definitions changed:
[debug] 	UsedName(finalize,[Default]).
...

I have tried to diff the text format representation of inc_compile.bin for Compile & IntegrationTest before and after the recompilation, but I haven't found anything interesting (the diff is hard to read as order changes). I am not including it here as it's massive, but happy to provide extracts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions