GDS Not Worling on Neo4j-cluster

  • Situtation
    I’m trying to enable GDS on Neo4j, but when I run RETURN gds.version() on the activated pod, I get the following error.

neo4j@neo4j> RETURN gds.version()
;
Unknown function 'gds.version' (line 1, column 8 (offset: 7))
"RETURN gds.version()"

The configuration and plugin seem to be loaded correctly, so I’m not sure what the root cause is. Any advice would be greatly appreciated.

  • neo4j version
    Verison : 2025.04.0
    Env : EKS, The cluster consists of four nodes, and we plan to install GDS on a SECONDARY
    How to install : Helm

  • neo4j.conf(part of)


licenses:
mode: volume
volume:
secret:
secretName: gds-license
items:
- key: gds.license
path: gds.license
env:
NEO4J_PLUGINS: '["graph-data-science", "apoc"]'

config:
dbms.security.procedures.unrestricted: "gds.,apoc."
dbms.security.procedures.allowlist: "gds.,apoc."
server.directories.plugins: '/var/lib/neo4j/plugins'
server.config.strict_validation.enabled: "false"
gds.enterprise.license_file: "/licenses/gds.license"
initial.server.mode_constraint: "SECONDARY"
server.cluster.system_database_mode: "SECONDARY"
dbms.cluster.minimum_initial_system_primaries_count: "3"
dbms.cluster.discovery.resolver_type: K8S
dbms.routing.enabled: "true"
server.metrics.prometheus.enabled: "true"
server.metrics.prometheus.endpoint: "0.0.0.0:2004"
server.metrics.jmx.enabled: "true"
gds.model.store_location: '/data/model/'


  • which plugins / extensions / procedures do you use
    GDS plugin
  • neo4j.log and debug.log

neo4j.log


Installing Plugin 'graph-data-science' from /var/lib/neo4j/products/neo4j-graph-data-science-.jar to /var/lib/neo4j/plugins/graph-data-science.jar
Applying default values for plugin graph-data-science to neo4j.conf
Installing Plugin 'apoc' from /var/lib/neo4j/labs/apoc-
-core.jar to /var/lib/neo4j/plugins/apoc.jar
Applying default values for plugin apoc to neo4j.conf
Changed password for user 'neo4j'. IMPORTANT: this change will only take effect if performed before the database is started for the first time.
2025-06-06 01:19:57.722+0000 INFO Logging config in use: File '/config/user-logs.xml/user-logs.xml'
2025-06-06 01:19:57.739+0000 INFO The license agreement was accepted with environment variable NEO4J_ACCEPT_LICENSE_AGREEMENT=yes when the Software was started.

2025-06-06 01:19:57.773+0000 INFO Command expansion is explicitly enabled for configuration
2025-06-06 01:19:57.774+0000 INFO Executing external script to retrieve value of setting server.routing.advertised_address
2025-06-06 01:19:57.774+0000 INFO Executing external script to retrieve value of setting server.cluster.raft.advertised_address
2025-06-06 01:19:57.774+0000 INFO Executing external script to retrieve value of setting server.cluster.advertised_address
2025-06-06 01:19:57.788+0000 INFO Starting...
2025-06-06 01:20:01.722+0000 INFO ======== Neo4j 2025.04.0 ========
2025-06-06 01:20:01.749+0000 INFO This instance is ServerId{1c26b676} (1c26b676-f77d-4619-b916-92e62a13d1c1)
2025-06-06 01:20:01.813+0000 INFO Prometheus: enabled
2025-06-06 01:20:01.814+0000 INFO Server metrics filter: [bolt.connections, bolt.messages_received, bolt.messages_started, *dbms.pool.bolt.free, *dbms.pool.bolt.total_size, *dbms.pool.bolt.total_used, *dbms.pool.bolt.used_heap, *cluster.raft.is_leader, *cluster.raft.last_leader_message, *cluster.raft.replication_attempt, *cluster.raft.replication_fail, *cluster.raft.last_applied, *cluster.raft.last_appended, *cluster.raft.append_index, *cluster.raft.commit_index, *cluster.raft.applied_index, *cluster.internal.discovery.memberset.left, *cluster.internal.discovery.crdt.gossip_id_data.size, *cluster.internal.discovery.crdt.server_data.size, *cluster.internal.discovery.crdt.database_data.size, *cluster.internal.discovery.crdt.leader_data.size, *cluster.internal.discovery.crdt.total_merge_operations, *cluster.internal.discovery.crdt.total_update_operations, *cluster.internal.discovery.gossip.incoming_queue_size, *cluster.internal.discovery.gossip.total_received_data, *cluster.internal.discovery.gossip.total_sent_data, *cluster.internal.discovery.gossip.uncontactable_members_exist, check_point., *cypher.replan_events, cypher.cache, ids_in_use, .neo4j.count., pool.transaction..total_used, pool.transaction..used_heap, pool.transaction..used_native, store.size, *transaction.active_read, *transaction.active_write, transaction.committed, *transaction.last_committed_tx_id, *transaction.peak_concurrent, transaction.rollbacks, page_cache.hit, *page_cache.page_faults, *page_cache.usage_ratio, *vm.file.descriptors.count, vm.gc.time., *vm.heap.used, *vm.memory.buffer.direct.used, *vm.memory.pool.g1_eden_space, *vm.memory.pool.g1_old_gen, *vm.pause_time, vm.thread, db.query.execution, protocol]
2025-06-06 01:20:01.816+0000 INFO algorithm metrics disabled
2025-06-06 01:20:01.817+0000 INFO projection metrics disabled
2025-06-06 01:20:01.819+0000 INFO procedure deprecation metrics disabled
2025-06-06 01:20:01.830+0000 INFO Progress tracking: enabled
2025-06-06 01:20:01.830+0000 INFO Memory usage guard: minimum estimate
2025-06-06 01:20:01.835+0000 INFO Register GDS Memory Facade...
2025-06-06 01:20:01.836+0000 INFO GDS Memory Facade registered.
2025-06-06 01:20:01.844+0000 INFO Building Graph Data Science extension...
2025-06-06 01:20:01.847+0000 INFO Register Graph Data Science...
2025-06-06 01:20:01.848+0000 INFO Graph Data Science registered.
2025-06-06 01:20:01.849+0000 INFO Register Metrics...
2025-06-06 01:20:01.850+0000 INFO Metrics registered.
2025-06-06 01:20:01.850+0000 INFO Register Task Registry Factory...
2025-06-06 01:20:01.851+0000 INFO Task Registry Factory registered.
2025-06-06 01:20:01.852+0000 INFO Register Task Store...
2025-06-06 01:20:01.852+0000 INFO Task Store registered.
2025-06-06 01:20:01.853+0000 INFO Register User Log Registry Factory...
2025-06-06 01:20:01.854+0000 INFO User Log Registry Factory registered.
2025-06-06 01:20:01.854+0000 INFO Register License State...
2025-06-06 01:20:01.855+0000 INFO License State registered.
2025-06-06 01:20:01.856+0000 INFO Register Model Catalog...
2025-06-06 01:20:01.856+0000 INFO Model Catalog registered.
2025-06-06 01:20:01.857+0000 INFO Graph Data Science extension built.
2025-06-06 01:20:01.857+0000 INFO Building Graph Data Science Extras extension...
2025-06-06 01:20:01.858+0000 INFO Register Graph Data Science Extras...
2025-06-06 01:20:01.858+0000 INFO Graph Data Science Extras registered.
2025-06-06 01:20:01.859+0000 INFO Graph Data Science Extras extension built.


plugin located.

$ ls plugins/
README.txt apoc.jar graph-data-science.jar

Hey,
@Nemuchan i think the issue lies in the config.
You write dbms.security.procedures.allowlist: "gds.,apoc."but this wont match for the prefix.
You should use dbms.security.procedures.allowlist: "gds.*,apoc.*" to get them enabled.
(similar applies for dbms.security.procedures.unrestricted)

see Unable to install GDS plugin on Neo4j server - #3 by Ororom as well.

1 Like

@florentin_dorre
Thanks you quick response!

Sorry, it looks like the asterisks got stripped out when I pasted the message, but the settings were actually configured as you advised!
Is there anything else I should check?

config:
  dbms.cluster.discovery.resolver_type: K8S
  dbms.cluster.minimum_initial_system_primaries_count: "3"
  dbms.routing.enabled: "true"
  dbms.security.procedures.allowlist: gds.*,apoc.*
  dbms.security.procedures.unrestricted: gds.*,apoc.*
  gds.enterprise.license_file: /licenses/gds.license
  gds.model.store_location: /data/model/
  initial.server.mode_constraint: SECONDARY
  server.bolt.advertised_address: neo4j-cluster-lb-neo4j.neo4j-cluster.svc.cluster.local:7687
  server.bolt.enabled: "true"
  server.bolt.listen_address: 0.0.0.0:7687
  server.bolt.tls_level: DISABLED
  server.cluster.system_database_mode: SECONDARY
  server.config.strict_validation.enabled: "false"
  server.directories.plugins: /var/lib/neo4j/plugins
  server.metrics.jmx.enabled: "true"
  server.metrics.prometheus.enabled: "true"
  server.metrics.prometheus.endpoint: 0.0.0.0:2004
env:
  NEO4J_PLUGINS: '["graph-data-science", "apoc"]'

How are you running RETURN gds.version()?
I am thinking if maybe you are getting routed to another cluster member.
You can check the query logs to see if it actually reaches the configured SECONDARY with GDS installed

You can use bolt://< server where gds installed> : 7687 to directly query against the server where gds is installed.