Bloop fails to compile project with weird error
ktonga opened this issue ยท 11 comments
It happens for only one of the modules (maybe some other after passing that one too) in a multi-module project, there are many modules before that one is attempted which finish compiling without issue. Also if I compile using sbt it doesn't happen.
I wasn't able to isolate the issue in a smaller self-contained project. I can help with any debugging if I'm guided, TBH I don't know where I could start from. To see that error I had to add the --verbose
flag.
[E] Unexpected error when compiling merchant-model: 'null'
[T] java.nio.file.ClosedFileSystemException
[T] jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.ensureOpen(ZipFileSystem.java:1628)
[T] jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getFileAttributes(ZipFileSystem.java:536)
[T] jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:767)
[T] jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:777)
[T] jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:276)
[T] java.base/java.nio.file.Files.readAttributes(Files.java:1851)
[T] java.base/java.nio.file.Files.size(Files.java:2468)
[T] sbt.internal.inc.HashUtil$.farmHash(HashUtil.scala:31)
[T] sbt.internal.inc.FarmHash$.ofPath(Stamp.scala:89)
[T] sbt.internal.inc.Stamper$.$anonfun$forHashInRootPaths$3(Stamp.scala:233)
[T] sbt.internal.inc.Stamper$.tryStamp(Stamp.scala:188)
[T] sbt.internal.inc.Stamper$.$anonfun$forHashInRootPaths$1(Stamp.scala:233)
[T] sbt.internal.inc.UncachedStamps.library(Stamp.scala:468)
[T] sbt.internal.inc.InitialStamps.$anonfun$library$1(Stamp.scala:422)
[T] scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:86)
[T] sbt.internal.inc.InitialStamps.library(Stamp.scala:422)
[T] sbt.internal.inc.TimeWrapBinaryStamps.$anonfun$library0$1(Stamp.scala:446)
[T] sbt.internal.inc.Stamper$.$anonfun$timeWrap$1(Stamp.scala:252)
[T] sbt.internal.inc.TimeWrapBinaryStamps.library(Stamp.scala:447)
[T] sbt.internal.inc.bloop.internal.BloopAnalysisCallback.$anonfun$addProductsAndDeps$16(BloopAnalysisCallback.scala:400)
[T] scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)
[T] scala.collection.mutable.HashSet.foreach(HashSet.scala:79)
[T] scala.collection.TraversableLike.map(TraversableLike.scala:286)
[T] scala.collection.TraversableLike.map$(TraversableLike.scala:279)
[T] scala.collection.mutable.AbstractSet.scala$collection$SetLike$$super$map(Set.scala:50)
[T] scala.collection.SetLike.map(SetLike.scala:105)
[T] scala.collection.SetLike.map$(SetLike.scala:105)
[T] scala.collection.mutable.AbstractSet.map(Set.scala:50)
[T] sbt.internal.inc.bloop.internal.BloopAnalysisCallback.$anonfun$addProductsAndDeps$1(BloopAnalysisCallback.scala:398)
[T] scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:196)
[T] scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:194)
[T] scala.collection.mutable.HashSet.foreach(HashSet.scala:79)
[T] scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:199)
[T] scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:192)
[T] scala.collection.AbstractTraversable.foldLeft(Traversable.scala:108)
[T] sbt.internal.inc.bloop.internal.BloopAnalysisCallback.addProductsAndDeps(BloopAnalysisCallback.scala:356)
[T] sbt.internal.inc.bloop.internal.BloopAnalysisCallback.get(BloopAnalysisCallback.scala:298)
[T] sbt.internal.inc.bloop.internal.BloopIncremental$.$anonfun$compileIncremental$5(BloopIncremental.scala:119)
[T] bloop.task.Task.$anonfun$runAsync$7(Task.scala:265)
[T] monix.eval.Task$Map.apply(Task.scala:4604)
[T] monix.eval.Task$Map.apply(Task.scala:4600)
[T] monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
[T] monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
[T] monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:74)
[T] monix.eval.internal.TaskExecuteOn$AsyncRegister$$anon$1.run(TaskExecuteOn.scala:71)
[T] java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
[T] java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
[T] java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
[T] java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
[T] java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
[T] java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
[E] Failed to compile 'merchant-model'
Thanks for reporting! This looks like an issue with Zinc it or the way we are using it ๐ค
Hey @tgodzik, after testing with the snapshot as you suggested on Twitter, I got the following error logs:
2023.05.27 22:34:42 ERROR Could not calculate hash for /BC/java.base/java/lang/CharSequence.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BC/java.xml/javax/xml/parsers/DocumentBuilderFactory.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.xml/org/w3c/dom/Node.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /B/java.base/java/io/InputStream.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.xml/javax/xml/xpath/XPathConstants.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.xml/org/w3c/dom/NodeList.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.base/java/io/ByteArrayInputStream.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.xml/javax/xml/xpath/XPathExpression.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.xml/javax/xml/xpath/XPath.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.xml/javax/xml/namespace/QName.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.xml/javax/xml/parsers/DocumentBuilder.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.xml/javax/xml/xpath/XPathFactory.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.xml/org/w3c/dom/Document.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /9ABCDEFG/java.base/java/io/File.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /9ABCDEFG/java.base/java/lang/ClassLoader.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BC/java.base/java/nio/file/Path.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.base/java/nio/file/Paths.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /9ABCDEF/java.base/java/time/OffsetDateTime.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /89ABCDEFG/java.base/java/util/HashMap.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEF/java.base/java/time/ZoneOffset.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /9ABCDEF/java.base/java/time/LocalDate.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /9ABCDEF/java.base/java/time/ZoneId.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /879ABCDEFG/java.base/java/nio/charset/Charset.sig because of null
2023.05.27 22:34:42 ERROR Could not calculate hash for /BCDEFG/java.base/java/nio/charset/StandardCharsets.sig because of null
2023.05.27 22:34:43 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/concurrent/atomic/AtomicLong.sig because of null
2023.05.27 22:34:43 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/Iterator.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEF/java.base/java/util/stream/Stream.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/stream/BaseStream.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /9AB/java.base/java/lang/Integer.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCD/java.base/java/lang/Thread.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/concurrent/Future.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /B/java.base/java/util/concurrent/CompletableFuture.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/concurrent/Callable.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /89ABCDEFG/java.base/java/util/Collections.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /9ABCDEFG/java.base/java/util/concurrent/Executors.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/concurrent/ExecutorService.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEFG/java.base/java/lang/Iterable.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /BCDEF/java.base/java/util/function/Consumer.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /9ABCDEF/java.base/java/time/ZonedDateTime.sig because of null
2023.05.27 22:34:44 ERROR Could not calculate hash for /9ABCDEF/java.base/java/time/LocalTime.sig because of null
2023.05.27 22:34:46 ERROR Could not calculate hash for /9ABCDEFG/java.base/java/util/concurrent/ArrayBlockingQueue.sig because of null
2023.05.27 22:34:46 ERROR Could not calculate hash for /BCDEF/java.base/java/util/function/IntUnaryOperator.sig because of null
2023.05.27 22:34:46 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/concurrent/atomic/AtomicInteger.sig because of null
2023.05.27 22:34:46 ERROR Could not calculate hash for /BCDEFG/java.base/java/util/Collection.sig because of null
2023.05.27 22:34:46 ERROR Could not calculate hash for /BCDEF/java.base/java/util/concurrent/atomic/AtomicReference.sig because of null
Hope it helps, If you need any more help just let me know.
Cheers.
Och, that's curious. It shouldn't reach into the jar, just calculate the hash of the entire jar.
Also, any idea where those .sig
files are coming from? Should they be part of the JDK itself? I wonder if we should just filter them out and only calculate hashes for .class
files.
Hey @tgodzik
It doesn't look like those files are in the JDK runtime FS.
I played around a bit with it and it seems it only contains .class
files:
val fs = java.nio.file.FileSystems.getFileSystem(java.net.URI.create("jrt:/"))
java.nio.file.Files.list(fs.getPath("modules", "java.base", "java/lang")).forEach(println(_))
modules/java.base/java/lang/AbstractMethodError.class
modules/java.base/java/lang/AbstractStringBuilder.class
modules/java.base/java/lang/Appendable.class
modules/java.base/java/lang/ApplicationShutdownHooks$1.class
modules/java.base/java/lang/ApplicationShutdownHooks.class
modules/java.base/java/lang/ArithmeticException.class
modules/java.base/java/lang/ArrayIndexOutOfBoundsException.class
modules/java.base/java/lang/ArrayStoreException.class
modules/java.base/java/lang/AssertionError.class
modules/java.base/java/lang/AssertionStatusDirectives.class
modules/java.base/java/lang/AutoCloseable.class
modules/java.base/java/lang/Boolean.class
modules/java.base/java/lang/BootstrapMethodError.class
modules/java.base/java/lang/Byte$ByteCache.class
modules/java.base/java/lang/Byte.class
modules/java.base/java/lang/CharSequence$1CharIterator.class
modules/java.base/java/lang/CharSequence$1CodePointIterator.class
modules/java.base/java/lang/CharSequence.class
modules/java.base/java/lang/Character$CharacterCache.class
....
java.nio.file.Files.lines(fs.getPath("modules", "java.base", "java/lang/CharSequence.sig")).forEach(println(_))
java.nio.file.NoSuchFileException: /modules/java.base/java/lang/CharSequence.sig
at java.base/jdk.internal.jrtfs.JrtFileSystem.checkNode(JrtFileSystem.java:486)
at java.base/jdk.internal.jrtfs.JrtFileSystem.getFileContent(JrtFileSystem.java:245)
at java.base/jdk.internal.jrtfs.JrtFileSystem.newInputStream(JrtFileSystem.java:334)
at java.base/jdk.internal.jrtfs.JrtPath.newInputStream(JrtPath.java:637)
at java.base/jdk.internal.jrtfs.JrtFileSystemProvider.newInputStream(JrtFileSystemProvider.java:325)
at java.base/java.nio.file.Files.newInputStream(Files.java:160)
at java.base/java.nio.file.Files.newBufferedReader(Files.java:2922)
at java.base/java.nio.file.Files.lines(Files.java:4141)
at java.base/java.nio.file.Files.lines(Files.java:4227)
... 59 elided
the .sig
files are supposed to be pickles needed for pipelining (not only probably) but we don't have any pickles for Java files, especially not inside a jar.
I will dig in a bit more.
Are you using any JDK specific classes or options? How is the modules defined, would you be able to share that?
Looks like the sig files should not pop up there and they are somehow ๐ค
Are you using any JDK specific classes or options? How is the modules defined, would you be able to share that?
Looks like the sig files should not pop up there and they are somehow ๐ค
So this is the JDK im using locally:
$ java -version
openjdk version "17.0.7" 2023-04-18
OpenJDK Runtime Environment Homebrew (build 17.0.7+0)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.7+0, mixed mode, sharing)
And this, I think, are all the relevant build definition bits:
val baseSettings =
Seq(
scalaVersion := Dependencies.Version.scala,
organization := "...",
logLevel := Level.Info,
scalacOptions ++= Seq("-release", "11"),
Compile / scalacOptions ++= Seq(
"-Wconf:any:warning-verbose",
"-Wunused:nowarn",
"-Ymacro-annotations",
"-Xsource:3"
),
PB.protocVersion := Version.protobufJava, // generate objects at same version as lib
Compile / scalacOptions ~= {
options: Seq[String] =>
options.filterNot(
Set(
"-Wunused:imports",
"-Wunused:params",
"-Wunused:privates",
"-Xlint:infer-any"
)
)
},
javacOptions ++= Seq("-source", "16", "-target", "16"),
// scalafmtOnCompile := true,
testFrameworks ++= Seq(
TestFramework("zio.test.sbt.ZTestFramework"),
TestFramework("hedgehog.sbt.Framework")
),
Global / cancelable := true,
Global / turbo := true, // ๐ค
Global / fork := true, // https://github.com/sbt/sbt/issues/2274
Global / onChangedBuildSource := ReloadOnSourceChanges,
resolvers ++= Seq(
"Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
"Confluent" at "https://packages.confluent.io/maven",
"Ovotech" at "https://kaluza.jfrog.io/artifactory/maven/"
// Resolver.bintrayRepo("ovotech", "maven")
),
// Don't make or publish scaladoc
Compile / doc / sources := Nil,
Compile / packageDoc / publishArtifact := false,
// parallel and forked tests
Test / fork := true,
Test / testForkedParallel := true,
Test / parallelExecution := true,
// [for the moment] Test / turbo := true,
Test / concurrentRestrictions := Seq(
Tags.limit(Tags.CPU, java.lang.Runtime.getRuntime.availableProcessors()),
Tags.limit(Tags.Test, java.lang.Runtime.getRuntime.availableProcessors())
),
// incremental compilation cache
pushRemoteCacheTo := Some(MavenCache("sbt-build-cache", file(".sbt-build-cache")))
)
val compilerPlugins =
List(
kindProjector,
betterMonadicFor
)
val commonSettings =
baseSettings ++
Seq(
Compile / compile / wartremoverErrors ++= warts,
libraryDependencies ++= compilerPlugins,
dependencyOverrides ++= List(
...
)
)
lazy val `merchant-model` = (project in file("modules/merchant-model"))
.settings(
commonSettings,
libraryDependencies ++=
List(
...
)
)
.dependsOn(
...
)
I finally got back to the PR with a potential fix for your issue @ktonga <- it should be in the newest snapshot version
I finally got back to the PR with a potential fix for your issue @ktonga <- it should be in the newest snapshot version
Thank you so much, I'll give it a go. ๐
Hey! I was able to update to 1.5.7 and I'm not seeing the error any more, so I think we could close this one as fixed.