Skip to content

Commit 6f1005c

Browse files
Speed up dar lock checker (#3475)
[ci] Seems to get it from 12s->1-2s on my local machine for a dar lock check. We can make it even faster with some redesign but this is cheap and helps a lot so may as well start with it. Signed-off-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org> Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>
1 parent 2a49e2d commit 6f1005c

File tree

1 file changed

+16
-5
lines changed
  • build-tools/dar-lock-checker/src/main/scala/org/lfdecentralizedtrust/splice/build_tools

1 file changed

+16
-5
lines changed

build-tools/dar-lock-checker/src/main/scala/org/lfdecentralizedtrust/splice/build_tools/DarLockChecker.scala

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package org.lfdecentralizedtrust.splice.build_tools
55

66
import better.files.*
7-
import com.digitalasset.daml.lf.archive.{DarDecoder, DarParser}
7+
import com.digitalasset.daml.lf.archive.DarParser
88
import com.digitalasset.daml.lf.data.Ref.{PackageName, PackageVersion}
99

1010
import scala.concurrent.duration.{Duration, DurationInt}
@@ -166,10 +166,21 @@ object DarLockChecker {
166166
implicit val ec = ExecutionContext.global
167167

168168
def readDar(filename: String): Dar = {
169-
val hash = DarParser.assertReadArchiveFromFile(File(filename).toJava).main.getHash
170-
val metadata =
171-
DarDecoder.assertReadArchiveFromFile(File(filename).toJava).main._2.metadata
172-
Dar(metadata.name, metadata.version, hash, filename)
169+
val archive = DarParser.assertReadArchiveFromFile(File(filename).toJava)
170+
val hash = archive.main.getHash
171+
// low-level decoding of the protobuf instead of using the LF libraries
172+
// as we only care about the metadata
173+
// and can avoid decoding the full LF AST.
174+
val payload = com.digitalasset.daml.lf.archive.ArchivePayloadParser
175+
.assertFromByteString(archive.main.getPayload)
176+
val input = payload.getDamlLf2.newCodedInput()
177+
input.setRecursionLimit(1000)
178+
val pkg = com.digitalasset.daml.lf.archive.DamlLf2.Package.parseFrom(input)
179+
val metadata = pkg.getMetadata
180+
val internedStrings = pkg.getInternedStrings
181+
val name = PackageName.assertFromString(internedStrings(metadata.getNameInternedStr))
182+
val version = PackageVersion.assertFromString(internedStrings(metadata.getVersionInternedStr))
183+
Dar(name, version, hash, filename)
173184
}
174185

175186
val darFutures: Seq[Future[Dar]] = filenames.map { filename =>

0 commit comments

Comments
 (0)