Skip to content

Commit 67a7c83

Browse files
committed
Move Neo4jLayout.of behind compat layer
This is one of those sneaky compat issues. In 4.x the signature is `Neo4jLayout.of(org.neo4j.configuration.Config)` In 5.x the signature is `Neo4jLayout#of(org.neo4j.graphdb.config.Configuration)`. `Config` is a concrete class implementing the `Configuration` interface, so 5.x moved to a more abstract API. Since we always pass a `Config`, this is a source-compatible change. The Java Bytecode however will contain the concrete type in the signature, so it tries to link and call a method expecting a `Config` but now it only finds one accepting a `Configuration`.
1 parent c474f8e commit 67a7c83

File tree

8 files changed

+35
-7
lines changed

8 files changed

+35
-7
lines changed

compatibility/4.4/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_44/Neo4jProxyImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,12 @@ public GdsDatabaseLayout databaseLayout(Config config, String databaseName) {
653653
return new GdsDatabaseLayoutImpl(Neo4jLayout.of(config).databaseLayout(databaseName));
654654
}
655655

656+
@Override
657+
@SuppressForbidden(reason = "This is the compat specific use")
658+
public Neo4jLayout neo4jLayout(Config config) {
659+
return Neo4jLayout.of(config);
660+
}
661+
656662
@Override
657663
public BoltTransactionRunner<?, ?> boltTransactionRunner() {
658664
return new BoltTransactionRunnerImpl();

compatibility/5.1/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_51/Neo4jProxyImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,12 @@ public GdsDatabaseLayout databaseLayout(Config config, String databaseName) {
767767
return new GdsDatabaseLayoutImpl(databaseLayout);
768768
}
769769

770+
@Override
771+
@SuppressForbidden(reason = "This is the compat specific use")
772+
public Neo4jLayout neo4jLayout(Config config) {
773+
return Neo4jLayout.of(config);
774+
}
775+
770776
@Override
771777
public BoltTransactionRunner<?, ?> boltTransactionRunner() {
772778
return new BoltTransactionRunnerImpl();

compatibility/5.2/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_52/Neo4jProxyImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,12 @@ public GdsDatabaseLayout databaseLayout(Config config, String databaseName) {
765765
return new GdsDatabaseLayoutImpl(databaseLayout);
766766
}
767767

768+
@Override
769+
@SuppressForbidden(reason = "This is the compat specific use")
770+
public Neo4jLayout neo4jLayout(Config config) {
771+
return Neo4jLayout.of(config);
772+
}
773+
768774
@Override
769775
public BoltTransactionRunner<?, ?> boltTransactionRunner() {
770776
return new BoltTransactionRunnerImpl();

compatibility/5.3/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_53/Neo4jProxyImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,12 @@ public GdsDatabaseLayout databaseLayout(Config config, String databaseName) {
765765
return new GdsDatabaseLayoutImpl(databaseLayout);
766766
}
767767

768+
@Override
769+
@SuppressForbidden(reason = "This is the compat specific use")
770+
public Neo4jLayout neo4jLayout(Config config) {
771+
return Neo4jLayout.of(config);
772+
}
773+
768774
@Override
769775
public BoltTransactionRunner<?, ?> boltTransactionRunner() {
770776
return new BoltTransactionRunnerImpl();

compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxyApi.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.neo4j.internal.schema.IndexOrder;
6464
import org.neo4j.io.fs.FileSystemAbstraction;
6565
import org.neo4j.io.layout.DatabaseLayout;
66+
import org.neo4j.io.layout.Neo4jLayout;
6667
import org.neo4j.io.pagecache.PageCache;
6768
import org.neo4j.io.pagecache.context.CursorContext;
6869
import org.neo4j.io.pagecache.tracing.PageCacheTracer;
@@ -264,6 +265,8 @@ RecordFormats selectRecordFormatForStore(
264265

265266
GdsDatabaseLayout databaseLayout(Config config, String databaseName);
266267

268+
Neo4jLayout neo4jLayout(Config config);
269+
267270
BoltTransactionRunner<?, ?> boltTransactionRunner();
268271

269272
HostnamePort getLocalBoltAddress(ConnectorPortRegister connectorPortRegister);

compatibility/common/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.neo4j.internal.schema.IndexOrder;
6464
import org.neo4j.io.fs.FileSystemAbstraction;
6565
import org.neo4j.io.layout.DatabaseLayout;
66+
import org.neo4j.io.layout.Neo4jLayout;
6667
import org.neo4j.io.pagecache.PageCache;
6768
import org.neo4j.io.pagecache.context.CursorContext;
6869
import org.neo4j.io.pagecache.tracing.PageCacheTracer;
@@ -398,6 +399,10 @@ public static GdsDatabaseLayout databaseLayout(Config config, String databaseNam
398399
return IMPL.databaseLayout(config, databaseName);
399400
}
400401

402+
public static Neo4jLayout neo4jLayout(Config config) {
403+
return IMPL.neo4jLayout(config);
404+
}
405+
401406
public static BoltTransactionRunner<?, ?> boltTransactionRunner() {
402407
return IMPL.boltTransactionRunner();
403408
}

etc/forbidden-apis

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ org.neo4j.logging.internal.LogService#getInternalLog(java.lang.Class) @ Use Neo4
1111
org.neo4j.configuration.SettingImpl#newBuilder(java.lang.String, org.neo4j.configuration.SettingValueParser, java.lang.Object) @ Use SettingProxy#newBuilder instead.
1212
org.neo4j.configuration.SettingBuilder(java.lang.String, org.neo4j.configuration.SettingValueParser, java.lang.Object) @ Use SettingProxy#newBuilder instead.
1313

14+
org.neo4j.io.layout.Neo4jLayout.of(org.neo4j.configuration.Config) @ Use Neo4jProxy.neo4jLayout instead.
15+
org.neo4j.io.layout.Neo4jLayout#of(org.neo4j.graphdb.config.Configuration) @ Use Neo4jProxy.neo4jLayout instead.
16+
1417
java.util.ServiceLoader#load(java.lang.Class) @ Must pass explicit class loader with service loading, as the context class loader for the thread may be the wrong one
1518

1619
org.neo4j.kernel.api.procedure.CallableProcedure @ Implement org.neo4j.gds.compat.CompatCallableProcedure instead and call Neo4jProxy.callableProcedure(compat).

neo4j-adapter/src/main/java/org/neo4j/gds/compat/GraphDatabaseApiProxy.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.jetbrains.annotations.TestOnly;
2323
import org.neo4j.common.DependencyResolver;
24-
import org.neo4j.configuration.Config;
2524
import org.neo4j.exceptions.KernelException;
2625
import org.neo4j.gds.annotation.ValueClass;
2726
import org.neo4j.graphdb.GraphDatabaseService;
@@ -30,7 +29,6 @@
3029
import org.neo4j.graphdb.Result;
3130
import org.neo4j.graphdb.Transaction;
3231
import org.neo4j.io.layout.DatabaseLayout;
33-
import org.neo4j.io.layout.Neo4jLayout;
3432
import org.neo4j.kernel.GraphDatabaseQueryService;
3533
import org.neo4j.kernel.api.KernelTransaction;
3634
import org.neo4j.kernel.api.procedure.GlobalProcedures;
@@ -114,11 +112,6 @@ public static DatabaseLayout databaseLayout(GraphDatabaseService db) {
114112
return cast(db).databaseLayout();
115113
}
116114

117-
public static Neo4jLayout neo4jLayout(GraphDatabaseService db) {
118-
Config configuration = resolveDependency(db, Config.class);
119-
return Neo4jLayout.of(configuration);
120-
}
121-
122115
public static DbmsInfo dbmsInfo(GraphDatabaseService db) {
123116
return cast(db).dbmsInfo();
124117
}

0 commit comments

Comments
 (0)