Skip to content

Open GDS v2.7.0+68 ClassNotFoundException org.neo4j.gds.shaded.com.github.benmanes.caffeine.cache.Ticker #316

@JohT

Description

@JohT

Describe the bug

I get the following error message when trying to create a Graph Projection with an Open GDS package of the newest (experimental) tag v2.7.0+68:

Dependencies_3_Create_Projection.cypher: {
  "code": "Neo.ClientError.Procedure.ProcedureCallFailed",
  "message": "Failed to invoke procedure `gds.graph.project`: Caused by: java.lang.ClassNotFoundException: org.neo4j.gds.shaded.com.github.benmanes.caffeine.cache.Ticker"
}

Here is the corresponding Cypher statement:

CALL gds.graph.project('artifact-centrality', 'Artifact', 'DEPENDS_ON', {
    relationshipProperties: ['weight'],
    nodeProperties: ['incomingDependencies', 'outgoingDependencies']
}) YIELD graphName, nodeCount, relationshipCount
RETURN graphName, nodeCount, relationshipCount

With Open GDS 2.7.0-alpha03 everything works fine.

To Reproduce

  • GDS version: 2.7.0+68
  • Neo4j version: 5.16.0 (community edition)
  • Java: OpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7)
  • Operating system: ubuntu-22.04 (in GitHub Action)

Steps to reproduce the behavior

  • Clone https://github.com/JohT/code-graph-analysis-pipeline.git
  • Switch to branch renovate/joht-open-graph-data-science-packaging-2.x
  • Open a terminal
  • Set the following environment variable to whatever value you like: export NEO4J_INITIAL_PASSWORD=whatever_you_like
  • Check if you are using Java 17 with java -version
  • Run ./scripts/examples/analyzeReactRouter.sh 6.23.0

Alternative steps to reproduce the behavior

  • Use the prebuilt Open GDS package of the newest experimental tag v2.7.0+68 or build it your own by checking out the tag and running the following command:
    ./gradlew -Dorg.gradle.jvmargs=-Xmx2g" -Pneo4jVersion=5.16.0 -- :open-packaging:shadowCopy
    
  • Use it as a plugin for Neo4J
  • Create a Projection using CALL gds.graph.project

Expected behavior

Open GDS packaging should contain all libraries needed. I presume that it would be beneficial to define all dependencies in Gradle when they are imported somewhere in the repository directly.
Open GDS 2.7.0-alpha03 as a reference works fine.

Additional context

With commit Use caches instead of hash maps (df4ebed) the package com.github.benmanes.caffeine.cache had been added to EphemeralResultStore.java. I couldn't find that library as a direct dependency in any Gradle configuration (see https://github.com/ben-manes/caffeine?tab=readme-ov-file#download). I guess it needs to be configured somewhere to be able to be picked up by open-packaging. I guess this issue would also happen with tag 2.7.0+65 since it also contains the mentioned changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BUGSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions