Skip to content

def-conversion sometimes breaks when AOT-compiled #68

@DerGuteMoritz

Description

@DerGuteMoritz
Collaborator

Repro: https://github.com/bevuta/byte-streams-def-conversion-aot-issue

Essentially the same issue as #34 but with tools.deps and tools.build instead of Leiningen. The resulting error is the same:

Execution error (ClassCastException) at clj_commons.byte_streams.graph.ConversionGraph/assoc_conversion (graph.clj:117).
class clj_commons.byte_streams.graph.Type cannot be cast to class clj_commons.byte_streams.graph.Type (clj_commons.byte_streams.graph.Type is in unnamed module of loader 'app'; clj_commons.byte_streams.graph.Type is in unnamed module of loader clojure.lang.DynamicClassLoader @650a1aff)

It's very likely caused by https://clojure.atlassian.net/browse/CLJ-1741, i.e. when first AOT-compiling a namespace which depends on another namespace which contains a def-conversion call, and then AOT-compiling that namespace itself.

Activity

added a commit that references this issue on Jan 24, 2023
15073f6
KingMob

KingMob commented on Jul 7, 2023

@KingMob
Collaborator

Update for posterity: it's probably not the same as CLJ-1741, even if it's related. 1741 is a duplicate of of CLJ-1650, but that was fixed in Clojure 1.8, so the timing seems wrong.

KingMob

KingMob commented on Jul 7, 2023

@KingMob
Collaborator

Re-opening, because the problem isn't really fixed, we just removed the type hints.

But it's interfering with Eastwood, CircleCI, and automatic deploys.

reopened this on Jul 7, 2023
KingMob

KingMob commented on Aug 27, 2023

@KingMob
Collaborator

Update. Now it's flat-out breaking the new HTTP/2 code. What's going on?

DerGuteMoritz

DerGuteMoritz commented on Aug 29, 2023

@DerGuteMoritz
CollaboratorAuthor

Ouch! Do you have a repro case to look at somewhere?

KingMob

KingMob commented on Aug 29, 2023

@KingMob
Collaborator

No, I think I was confused. I don't think it's AOT-related now.

I think the issue is loading byte-streams in Netty threads that use their own classloader. It gives me a ClassCastException even when Netty finds the class because class identity is tied to classloader.

It just looked a bit like the AOT errors we've gotten in the past.

Right now I'm biting the bullet and trying to decide how best to insert the clj loader into Netty threads. It's become more of an issue with the way ALPN and http2 multiplexing work; we have to do more work in Netty than we did for http1, and that runs a greater risk of needing the clj loader.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @DerGuteMoritz@KingMob

      Issue actions

        `def-conversion` sometimes breaks when AOT-compiled · Issue #68 · clj-commons/byte-streams